Matrizes (Vectores Bidimensionais) ► Até agora apenas operávamos com vectores unidimensionais 0 1 2 3 4 A partir de agora vamos também operar com vectores bidimensionais ou MATRIZES 1 Matrizes (Vectores Bidimensionais) ► As Matrizes não são mais do que Arrays bidimensionais, ou seja, arrays com duas dimensões. A sua representação esquemática é a seguinte: 0 1 2 3 0 1 2 3 2 Matrizes (Vectores Bidimensionais) 0 1 2 3 0 1 2 3 ►O esquema representa uma matriz de 4 linhas e 4 colunas. 3 Matrizes (Vectores Bidimensionais) ► Declaração de uma Matriz em C: tipo nome_variavel[nr_de_linhas][nr_de_colunas]; Onde: ► tipo: representa o tipo de dados dos elementos da matriz; ► nome_variavel: representa o nome da matriz; ► nr_de_linhas: representa o nrº de linhas da matriz (tem de ser um valor inteiro) ► nr_de_colunas: representa o nrº de counas da matriz (tem de ser um valor inteiro) 4 Matrizes (Vectores Bidimensionais) ► Exemplo da declaração de uma matriz: int matriz_Exemplo[2][4]; ► int: tipo de cada elemento da matriz; ► Matriz_Exemplo: nome da matriz; ► 2: número de linhas da matriz; ► 4: número de colunas da matriz; 0 1 2 3 0 1 5 Matrizes (Vectores Bidimensionais) ► Como podemos aceder a cada um dos elementos de uma Matriz? ►Resposta: Através dos seus índices. int matriz_Exemplo[2][4]; 0 1 2 3 matriz_Exemplo[0][2]=33; 0 12 20 33 50 matriz_Exemplo[1][0]=14; 1 14 matriz_Exemplo[1][3]=80; 3 21 80 matriz_Exemplo[1][4]= ERRO!!! 6 Matrizes (Vectores Bidimensionais) ► Os índices da matriz começam sempre por 0 (zero) Os índices de uma matriz com x linhas e y colunas variam sempre entre 0 e x-1 e 0 e y-1 , respectivamente. ► Exemplo - matriz com 2 linhas e 4 colunas: ► int matriz_Exemplo[2][4]; 0 Índice das linhas 0 1 2 3 Índice das colunas 1 7 Matrizes (Vectores Bidimensionais) int matriz_Teste[3][4]; 0 5 0 2 3 0 40 1 2 1 50 15 matriz_Teste[2][3]=15; matriz_Teste[1][1]=40; matriz_Teste[2][0]=matriz_Teste[1][1]+10; matriz_Teste[0][3]=0; matriz_Teste[ matriz_Teste[0][3] ] [ 1 ] = 5; 8 Matrizes (Vectores Bidimensionais) ► Inicialização de matrizes Uma matriz pode ser inicializada com um conjunto de valores: int matriz_X[3][2]={{1,2},{3,4},{5,6}}; 1 3 5 2 4 6 9 Matrizes (Vectores Bidimensionais) ► Leitura de valores para uma matriz (em ciclo): #include<stdio.h> #include<stdlib.h> Inicialização da matriz. # define LINHAS 3 não # define COLUNAS 2 main() { int matriz_Teste[LINHAS][COLUNAS]={{0,0},{0,0},{0,0}}; int i,j; é obrigatório. for(i=0;i<LINHAS;i++) { for(j=0;j<COLUNAS;j++) { printf("Introduza o valor para a linha %d e coluna %d: ", i, j); scanf("%d",&matriz_Teste[i][j]); } } } 10 Matrizes (Vectores Bidimensionais) ► Impressão dos valores de uma Matriz: … for(i=0;i<LINHAS;i++) { for(j=0;j<COLUNAS;j++) { printf("%d\t",matriz_Teste[i][j]); } puts("\n"); } … 11 Matrizes (Vectores Bidimensionais) ► Vantagens na utilização de matrizes: Permitem manter os valores em memória; Reduzem a quantidade de variáveis; ► Cuidado: Quer durante a compilação, quer durante a execução, não é verificado se os índices usados estão de acordo com a dimensão declarada da matriz. É por isso possível declarar uma matriz com, por exemplo, 3 linhas e 3 colunas, e tentar depois aceder à coluna 4 da linha 7, o que levará a que ocorram problemas de acesso à memória. 12 #include<stdio.h> #include<stdlib.h> # define LINHAS 3 # define COLUNAS 2 main() { /* declaração e inicilaização da matriz */ int matriz_Teste[LINHAS][COLUNAS]={{0,0},{0,0},{0,0}}; /* declaração de variáveis que vão percorrer os índices da matriz*/ int i,j; /* ciclo para a leitura de dados para a matriz*/ for(i=0;i<LINHAS;i++) { for(j=0;j<COLUNAS;j++) { printf("Introduza o valor para a linha %d e coluna %d: ", i, j); scanf("%d",&matriz_Teste[i][j]); } } /* ciclo para a impressão dos dados da matriz*/ for(i=0;i<LINHAS;i++) { for(j=0;j<COLUNAS;j++) { printf("%d\t",matriz_Teste[i][j]); } puts("\n"); } system("pause"); } 13