17
stão stão LINGUAGENS DE PROGRAMAÇÃO Módulo 5: Tipo Estruturado -Tabelas Curso Profissional de Informática de Ges Curso Profissional de Informática de Ges Conteúdos 1. Noção de tabelas 1. Tipos de dados definidos pelo utilizador –Tabela 2. Manipulação de elementos de uma tabela 3. Manipulação de Strings Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 2

6-Modulo5

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: 6-Modulo5

Cu

rso

Pro

fiss

ion

al d

e In

form

áti

ca d

e G

estã

oC

urs

o P

rofi

ssio

na

l de

Info

rmá

tica

de

Ges

tão

LINGUAGENS DE PROGRAMAÇÃOMódulo 5: Tipo Estruturado - Tabelas

Cu

rso

Pro

fiss

ion

al d

e In

form

áti

ca d

e G

estã

oC

urs

o P

rofi

ssio

na

l de

Info

rmá

tica

de

Ges

tão

Conteúdos

1. Noção de tabelas1. Tipos de dados definidos pelo utilizador – Tabela

2. Manipulação de elementos de uma tabela

3. Manipulação de Strings

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 2

Page 2: 6-Modulo5

Tabelas ou Vectores

� Frequentemente, existe a necessidade de trabalhar com um número elevado de elementos de informação, todos do mesmo tipo. Neste caso, a utilização de uma variável diferente para cada elemento leva a muitas repetições desnecessárias de código e à incapacidade de generalização.

� Um vectorvector (arrayarray) não é mais do que um conjunto de elementos consecutivos, todos do mesmo tipo, que podem ser acedidos individualmente a partir de um único nome.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 3

Declaração de vectores

� A declaração de um vector com uma única dimensão obedece à seguinte sintaxe:

tipotipo nome_variável[[nº de elementos]]

tipotipo – corresponde ao tipo de dados de cada um tipotipo – corresponde ao tipo de dados de cada um dos elementos do vector.

nome_variávelnome_variável – indica o nome pelo qual este vector será conhecido.

nº de elementos nº de elementos – valor constante que indica quantos elementos tem o vector.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 4

Page 3: 6-Modulo5

Exemplos:

int g[20];

/* g é um vector com 20 inteiros */

float renda[100];

/* renda é um vector com 100 reais*//* renda é um vector com 100 reais*/

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 5

Vectores

� Todos os elementos de um vector podem ser identificados pelo mesmo nome, no entanto, para que se possa identificar cada um deles individualmente é necessário um númer0 (índiceíndice), que indique qual a sua posição no vector.

nota[20]

nota[0] 13

nota[1] 12

nota[2] 9

nota[3] 17sua posição no vector.

� Os elementos de um vector são armazenados em posições consecutivas da memória, iniciando os índices em zero.

� Um vector é um exemplo de um tipo de dados estruturados. Envolve dois conjuntos de valores e uma regra de estruturação.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 6

nota[3] 17

nota[19] 0

?

Page 4: 6-Modulo5

Exemplos:

int vector[6];

� Coloque o valor 123 na primeira posição de vector.

vector[0] = 123;

� Coloque na última posição de vector o dobro do � Coloque na última posição de vector o dobro do valor do primeiro elemento.

vector[5] = vector[0] * 2;

� Coloque no terceiro elemento de vector a soma do primeiro com o último elemento.

vector[2] = vector[0] + vector[5];

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 7

Inicialização de vectores

� É possível inicializar todos os elementos de um vector através da seguinte sintaxe:

tipo var[n] = {valor1, valor2, …, valorn}

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 8

Page 5: 6-Modulo5

Exemplo

� Declare e inicialize um vector com todas as vogais do alfabeto.

char vogal[5] = {’a’, ’e’, ’i’, ’o’, ’u’ };

� Evita-se assim escrever:

char vogal[5];

vogal[0] = ’a’;

vogal[1] = ’e’;

vogal[2] = ’i’;

vogal[3] = ’o’;

vogal[4] = ’u’;

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 9

Algumas notas

� Num vector o n-ésimo elemento está sempre na posição n-1.

� Tal como as variáveis, os vectores quando são criados contêm valores aleatórios em cada uma das suas posições.

� Se um vector for declarado com n elementos e forem colocados apenas k valores (k<n) na

� Se um vector for declarado com n elementos e forem colocados apenas k valores (k<n) na inicialização , então os k primeiros elementos serão inicializados com os respectivos valores e os restantes serão inicializados com o valor ZERO.� As posições de um vector só são inicializadas se a

declaração for seguida de ={valor … valor}

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 10

Page 6: 6-Modulo5

Passagem de vectores para funções

� Em C, dentro de uma função, não é possível saber com quantos elementos foi declarado um vector que foi passado como argumento para essa função.

� Se for indicada qual a dimensão do vector no parâmetro da função, o número de parâmetro da função, o número de elementos do vector é ignorado pelo compilador. À função apenas interessa saber qual o tipo dos elementos. A dimensão a considerar é da exclusiva responsabilidade do programador.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 11

Definição de Constantes

� Uma constante é um nome que corresponde a um valor fixo. Estas devem, em principio, ser definidas fora de qualquer função de forma a serem visíveis ao longo de todo o programa.

� As constantes devem ser declaradas fora das funções, de forma a serem visíveis por todo o código do programa. Normalmente a sua definição é realizada imediatamente a seguir às linhas dos #includes.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 12

Page 7: 6-Modulo5

Definição de constantes

� Através da palavra reservada const:

const tipo símbolo = valor;

� Através da directiva de pré-processamento #define:#define:

#define símbolo valor

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 13

Diferenças entre const e #define

� Uma constante com const existe fisicamente numa determinada posição de memória.

� Uma constante definida com #define não existe fisicamente em memória, sendo o seu valor substituído ao longo do programa na fase de pré-processamento (ainda antes da fase de pré-processamento (ainda antes da compilação).

� A palavra const faz parte das palavras reservadas do C.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 14

Page 8: 6-Modulo5

� A palavra #define é uma directiva que indica ao pré-processador que o símbolo que se lhe segue, vai ficar com o valor que aparece a seguir ao símbolo. O pré-processador, antes de compilar o programa, substitui todas as ocorrências do Símbolo pelo valor com que este foi definido.

� Uma constante definida pela palavra const fica com o tipo que lhe foi colocado na definição.

Diferenças entre const e #define

� Uma constante definida pela palavra const fica com o tipo que lhe foi colocado na definição.

� O tipo associado a uma constante definida com #define é o tipo que resulta da expressão que aparece na componente valor.

� Uma vez que o símbolo #define não faz parte da linguagem C, esta linha não é seguida de ponto e vírgula.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 15

� As constantes definidas com o símbolo #define chamam-se Constantes SimbólicasConstantes Simbólicas.

� Embora não seja obrigatório, habitualmente os programadores de C colocam as constantes simbólicas em maiúsculas.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 16

Page 9: 6-Modulo5

Matrizes e vectores multidimensionais

� Até agora vimos como podíamos trabalhar com vectores com uma única dimensão. Vamos agora aprender como se podem usar vectores com mais do que uma dimensão.

� Não existe qualquer limite para ao número de dimensões que um vector pode conter.

A declaração de vectores unidimensionais não é � A declaração de vectores unidimensionais não é mais do que um caso particular da declaração de vectores com qualquer número de dimensões.

� A declaração de um vector com n dimensões é realizada através da seguinte sintaxe:

tipo vector [dim1] [dim2] […] [dimn]

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 17

Exemplo

� Vamos observar como poderíamos

implementar o “Jogo do Galo”

recorrendo a um vector como

tabuleiro do jogo.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 18

XX OO

XX

OO

Duas dimensões

Page 10: 6-Modulo5

Exemplo

� A declaração deverá ser realizada do seguinte modo:

#define DIM 3

char Galo [DIM] [DIM]char Galo [DIM] [DIM]

� No caso anterior o que declaramos foi um vector de 3 posições Galo[3], em que cada uma dessas posições é formada por um vector de 3 caracteres.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 19

Exemplo

� Assim:� Galo - É o vector de caracteres com duas

dimensões 3x3

� Galo[i] - É um vector de 3 caracteres

� Galo[i][j] - Caracter presente na linha i e coluna j do vector Galocoluna j do vector Galo

� Se declararmos um vector

int v[3] [4];

� v - É um vector com 3 elementos (cada elemento é um vector de 4 inteiros)

� v[i] - É um vector de 4 inteiros

� v[i][j] - É o inteiro que está colocado na posição i,j do vector v

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 20

Page 11: 6-Modulo5

Exercício

� Escreva um programa que coloque o tabuleiro do jogo do galo neste estado, depois de ter sido inicializado a espaços durante a declaração do mesmo.

� Em seguida mostre o tabuleiro no ecrã.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 21

XX OO

XX

OO

#include<stdio.h>

#define DIM 3

main( )

{

char Galo [DIM] [DIM] = {{´ ´, ´ ´, ´ ´} , {´ ´, ´ ´, ´ ´} , {´ ´, ´ ´, ´ ´}};

int i, j;

Galo[0][0]=’X’;

Galo[1][1]=´X´;

Galo[0][2]=´O´;

Galo[2][2]=´O´;

for (i=0; i<DIM; i++)

{

for(j=0; j<DIM; j++)

printf(”%c %c”, Galo[i][j], j==DIM-1 ? ’ ’ : ’ | ’);

if (i != DIM-1) printf (“\n--------\n”);

}

}

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 22

Page 12: 6-Modulo5

Strings e caracteres

� Uma stringstring é um conjunto de caracteres armazenados num vector.

� Em C, as strings são representadas utilizando aspas, enquanto os caracteres são representados por plicas.� “Luís”� “Luís”

� “Bolo de chocolate com 1.2 Kg de peso”

� “A”

� ‘L’

� ‘>’

� ‘A’

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 23

Strings

� Uma string não é mais do que um vector de caracteres. O inverso é falso, isto é, um vector de caracteres pode não ser uma string.

� A declaração de strings obedece à sintaxe da declaração de vectores.

� Há, no entanto um problema: se num vector � Há, no entanto um problema: se num vector com 100 elemento apenas estiver armazenada a palavra “Zé” como saber quantos dos 100 caracteres estão a ser utilizados?� A solução é colocar um marcador (um caracter)

que indique quando a string acaba.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 24

Page 13: 6-Modulo5

Strings

É este caracter que é universalmente

ZZ éé \\00 …… …… ……v[0] v[1] v[2] v[98] v[99]

terminador

� É este caracter que é universalmente utilizado para terminar as strings em C.

� O programador deve sempre ter em atenção que na declaração de uma string tem que contar com o espaço para o caracter terminador.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 25

Inicialização de strings

char nome[20] = ”André”;

char nome[20] = {’A’, ’n’, ’d’, ’r’, ’é’};

char nome[] = ”André”;

char *nome = ”André”;

� De notar que em qualquer dos casos anteriores sempre que se faz a inicialização o compilador coloca automaticamente o terminador ’\0’.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 26

Page 14: 6-Modulo5

Leitura e escrita de Strings

� A escrita de strings é realizada por duas funções: printfprintf e putsputs.

� A função printf recebe como formato uma string que pode ser escrita directamente.

� No entanto uma string pode ser escrita como qualquer outra variável utilizando um qualquer outra variável utilizando um formato próprio %s%s dentro da função printf.

char NomeProprio[100] = ”Carla Marina”;

char Apelido[50] = ”Silva”;

printf (”Nome: %s, %s \n”, Apelido, NomeProprio);

Nome: Silva, Carla Marina

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 27

Leitura e escrita de Strings

� A função puts permite, unicamente, a escrita de strings, sejam elas constantes ou armazenadas em variáveis. O único aspecto a ter em atenção é que, depois de escrita a string, a função puts faz uma mudança automática de linha.automática de linha.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 28

Page 15: 6-Modulo5

scanf

� A função scanf permite realizar a leitura de strings utilizando o formato %s. No entanto a variável que recebe a string NÃO É PRECEDIDA de um &&.

#include <stdio.h>#include <stdio.h>

main()

{

char Nome[50], Apelido[100];

printf(”Introduza o nome: ”); scanf(”%s”, Nome);

printf(”Introduza o apelido: ”); scanf(”%s”, Apelido);

printf(”Nome completo: %s, %s \n”, Apelido, Nome);

}

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 29

scanf

� A função scanf lê uma única palavra.

� A função lê todos os caracteres até encontrar um <ESPAÇO>, <TAB> OU <ENTER>. Quando isto acontece, termina a leitura e coloca isto acontece, termina a leitura e coloca todos os caracteres lidos até essa altura na variável que lhe foi passada. Em seguida coloca o caracter terminador.

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 30

Page 16: 6-Modulo5

gets

� Permite colocar, na variável que recebe por parâmetro, todos os caracteres introduzidos pelo utilizador.

#include <stdio.h>

main()main()

{

char Nome[50];

printf(”Introduza o nome completo: ”);

gets(Nome);

printf(”Nome completo: %s \n”, Nome);

}

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 31

string.h

strlen Devolve o comprimento de uma string

strcpy Copia uma string para outra

strcat Concatenação de strings

strcmp Comparação alfabética de strings

stricmp Comparação de strings com ignore case

strchr Procura um caracter numa string

strstr Procura uma string dentro de outra

strlwr Converte todos os caracteres de uma string para minúsculas

strupr Converte todos os caracteres de uma string para maiúsculas

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 32

Page 17: 6-Modulo5

Bibliografia

� Damas, Luís; LINGUAGEM C; FCA; 2ª edição; Lisboa; 1999

� Aguilar, Luis Joyanes; FUNDAMENTOS DE PROGRAMAÇÃO – Algoritmos, estruturas de dados e objetos; Mc Graw Hill; Tradução da 3ª edição; São Paulo; 2008

� Azul, Artur Augusto; BASES DE PROGRAMAÇÃO 10; Porto Editora; Porto

� Azul, Artur Augusto; BASES DE PROGRAMAÇÃO 10; Porto Editora; Porto

� http://www.eisnt.com/GPSI/programacao/Aula4C.pdf

� http://www.linhadecodigo.com.br/Artigo.aspx?id=425

� http://www.criarweb.com/artigos/825.php

� http://deei.fct.ualg.pt/PI_flobo/teorica7.html

� http://www.di.ubi.pt/~fsilva/prog/Prog_Cap4.pdf (em 10/11/2008)

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 33

Bibliografia

� Damas, Luís; LINGUAGEM C; FCA; 2ª edição; Lisboa; 1999

� Aguilar, Luis Joyanes; FUNDAMENTOS DE PROGRAMAÇÃO – Algoritmos, estruturas de dados e objetos; Mc Graw Hill; Tradução da 3ª edição; São Paulo; 2008

� Azul, Artur Augusto; BASES DE PROGRAMAÇÃO 10; Porto Editora; Porto

� Azul, Artur Augusto; BASES DE PROGRAMAÇÃO 10; Porto Editora; Porto

� Em 10/11/2008� http://www.eisnt.com/GPSI/programacao/Aula4C.pdf

� http://www.linhadecodigo.com.br/Artigo.aspx?id=425

� http://www.criarweb.com/artigos/825.php

� http://deei.fct.ualg.pt/PI_flobo/teorica7.html

� http://www.di.ubi.pt/~fsilva/prog/Prog_Cap4.pdf

Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5 34