Curso Profissional de Informática de Gestão
Módulo 5: Tipo Estruturado - Tabelas
LINGUAGENS DE PROGRAMAÇÃO
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
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 vector (array array) 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: tipo nome_variável[ [nº de elementos] ] tipo – corresponde ao tipo de dados de cada um dos elementos do vector. nome_variável – indica o nome pelo qual este vector será conhecido. 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
Exemplos: int g[20]; /* g é um vector com 20 inteiros */
float renda[100]; /* renda é um vector com 100 reais*/
5
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 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 índice), que indique qual a númer0 (índice sua posição no vector. Os elementos de um vector são armazenados em posições consecutivas da memória, iniciando os índices em zero.
nota[20] nota[0]
13
nota[1]
12
nota[2]
9
nota[3]
17 …
nota[19]
0 ?
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
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 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
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 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
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 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
Definição de constantes Através da palavra reservada const:
const tipo símbolo = valor; Através da directiva de pré-processamento
#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 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
Diferenças entre const e #define 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. 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
Simbólicas #define chamam-se Constantes 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
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 é 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. Duas dimensões
X
O X O
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5
18
Exemplo A declaração deverá ser realizada do seguinte
modo: #define DIM 3 … 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 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
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. X
O X O
Em seguida mostre o tabuleiro no ecrã. Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5
21
#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
Strings e caracteres Uma string é 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” “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 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
Strings terminador
Z
é
\0
v[0]
v[1]
v[2]
…
…
…
v[98]
v[99]
É 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 char char char
nome[20] = ”André”; nome[20] = {’A’, ’n’, ’d’, ’r’, ’é’}; nome[] = ”André”; *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
Leitura e escrita de Strings A escrita de strings é realizada por duas
funções: printf e puts puts. 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 formato próprio %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.
Curso Profissional de Informática de Gestão - 2008/2011 - Módulo 5
28
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> 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 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
gets Permite colocar, na variável que recebe por
parâmetro, todos os caracteres introduzidos pelo utilizador. #include <stdio.h> 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
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 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 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