MATRIZES Luís Charneca [email protected] Matrizes - Vectores (1) Vectores nada mais são que matrizes unidimensionais. É importante notar que vectores, matrizes bidimensionais e matrizes de qualquer dimensão são caracterizadas por terem todos os elementos pertencentes ao mesmo tipo de dados. Lembre-se das strings que nada mais são que cadeias de caracteres, ou seja vectores do tipo carácter. Para se declarar um vector utiliza-se a seguinte forma geral: tipo_da_variável nome_da_variável [tamanho]; Por exemplo: int exemplo[20]; Matrizes - Vectores (2) Na linguagem C a numeração começa sempre em zero. Isto significa que, no exemplo acima, os dados serão indexados de 0 a 19. Para aceder a um dos elementos: exemplo[0] exemplo[1] … exemplo[19] Nunca ultrapasse o limite do índice que colocou na declaração do vector, caso o faça corre sérios riscos de o programa não funcionar correctamente. Matrizes - Vectores (3) Exercício Reescreva o exemplo, realizando a cada leitura um teste para ver se a dimensão do vector não foi ultrapassada. Caso o utilizador entre com 100 números, o programa deverá abortar o ciclo de leitura automaticamente. O uso da Flag (999) não deve ser retirado. Matrizes - Bidimensionais (1) Já foi visto como se declaram matrizes unidimensionais (vectores). A forma geral da declaração de uma matriz bidimensional é muito parecida com a declaração de um vector: tipo_da_variável nome_da_variável [linhas],[colunas]; Não se esqueça que, na linguagem C, os índices variam de zero ao valor declarado, menos um. Matrizes - Bidimensionais (2) Exemplo do uso de uma matriz: #include <stdio.h> int main () { int mtrx [10][20]; int i,j,count; count=1; for (i=0;i<10;i++) for (j=0;j<20;j++) { mtrx[i][j]=count; count++; } return(0); } Matrizes - Bidimensionais (3) Preenchimento da matriz depois de executado o programa. Matrizes – de Strings (1) Matrizes de strings são matrizes bidimensionais porque uma string é um vector. Forma geral de uma matriz de strings como sendo: char nome_da_variável [num_de_strings],[compr_das_strings]; No próximo diapositivo um exemplo de um programa que lê 5 strings e as exibe no ecrã. Matrizes – de Strings (2) #include <stdio.h> int main () { char strings [5][100]; int count; for (count=0;count<5;count++) { printf ("\n\nDigite uma string: "); gets (strings[count]); } printf ("\n\n\nAs strings digitadas foram:\n\n"); for (count=0;count<5;count++) printf ("%s\n",strings[count]); return(0); } Matrizes – Multidimensionais (1) O uso de matrizes multidimensionais na linguagem C é simples. A sua forma geral é: tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN]; Uma matriz N-dimensional qualquer outro tipo de matriz. funciona basicamente como Matrizes – Multidimensionais (2) Por exemplo, a declaração seguinte cria uma matriz de 2x3x10 do tipo inteiro: int multi[2][3][10]; De qualquer forma, é muito raro usar matrizes com mais de 2 dimensões, em virtude da memória necessária para guardar todos os elementos da matriz. Por exemplo uma matriz de 4 dimensões do tipo caracter com 10x6x9x4 irá ocupar 2160 bytes na memória (10x6x9x4). Se por acaso cada vector for incrementado em 10 (passa a 100x60x90x40) o que daria 21.6000.000 bytes. Resumindo, uma matriz com mais de duas dimensões pode rapidamente ficar “out of memory”. Matrizes – Resumo (1) Podem-se inicializar matrizes, assim como se inicializam variáveis. A lista de valores é composta por valores (do mesmo tipo da variável) separados por vírgula. Os valores devem ser dados na ordem em que serão colocados na matriz. Exemplos de inicializações de matrizes: float vect [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 }; Inicialização de um vector com 6 elementos Matrizes – Resumo (2) Inicialização de uma matriz multidimensional onde matrx é inicializada com 1,2,3,4 na 1ª linha, 5,6,7,8 na 2ª e 9,10,11,12 na 3ª linha. char str [10] = { 'J', 'o', 'a', 'o', '\0' }; char str [10] = "João"; Duas formas diferentes de inicializar uma string int matrx [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; char str_vect [3][10] = { "João", "Maria", "José" }; Inicializar um vector de strings Matrizes – Resumo (3) Pode-se, em alguns casos, inicializar matrizes das quais não sabemos o tamanho a priori. É muito útil, por exemplo, quando se inicializa uma string e não se pretende contar quantos caracteres serão necessários. char mess [] = "Linguagem C: flexibilidade e poder."; int matrx [][2] = { 1,2,2,4,3,6,4,8,5,10 }; No primeiro exemplo, a string mess terá tamanho 36. No segundo exemplo o valor não especificado será 5.