Prévia do material em texto
Estruturas Compostas Homogêneas (Matrizes) Programação 2 Matrizes Vimos que vetores são utilizados para armazenar dados de uma única “fileira”. Porém, existem situações em que a natureza dos dados exige uma forma de armazenamento em mais de uma dimensão. Para estas situações, existem as matrizes, que podem ser vistas como vetores que possuem mais de uma dimensão (normalmente duas). Por ser bidimensional, uma matriz representa uma tabela de valores colocados em linhas e colunas. Para identificar um valor é necessário informar a linha e a coluna Conhecidas como tabelas, ou variáveis indexadas bidimensionais Um vetor pode ser visto como uma matriz com uma única linha. 3 Matrizes Sintaxe para declaração de uma matriz: Sintaxe para referenciação de uma posição: Exemplos: Declaração: Referenciação: <var> : vetor[<inicio1>..<fim1>,<inicio2>..<fim2>,...] de <tipo>; valor : vetor[1..3,1..4] de real; valor[1,1] <- 8.50; <nome_vetor>[<posicao1>,<posicao2>,...]; valor[2,3] <- 7.3; 4 Matrizes Exemplo Um distribuidor de refrigerantes vende seu produto em todo o país. Em cada trimestre do ano passado ele vendeu uma certa quantidade de garrafas em cada região do Brasil. Faça um algoritmo para ler as quantidades vendidas e escrever a quantidade total vendida em todo o país. Solução Pelo enunciado do problema, vimos que existem 20 dados de entrada, pois temos 4 trimestres no ano e cada trimestre teve uma venda para cada uma das cinco regiões do Brasil. O enunciado do problema também nos leva a concluir que devemos utilizar uma estrutura matricial ao invés de vetorial. Temos vendas para regiões por trimestre. 5 Matrizes Solução (cont.) A tabela abaixo mostra uma representação possível para os dados do problema: 150 1150 900 1500 400 180 980 1100 2300 650 140 1000 950 2100 500 210 1600 1400 2600 840 1 - Norte 2 - Nordeste 3 - Sul 4 - Sudeste 5 – Centro- Oeste 1º Trimestre 2º Trimestre 3º Trimestre 4º Trimestre 6 Matrizes Solução (cont.): Então o algoritmo fica assim: Variáveis quant : vetor[1..4,1..5] de inteiro; i, j, soma : inteiro; Início para i de 1 até 4 faça para j de 1 até 5 faça [[ escrever “Informe a quantidade do “, i, “º trimestre e “, j, “ª região: “; ler quant[i,j]; ]]; soma = 0; para i de 1 até 4 faça para j de 1 até 5 faça soma = soma + quant[i,j]; escrever “O total das quantidades vendidas é ”, soma; Fim. 7 Matrizes em VisuAlg Acessando os elementos de um array multidimensional: var i , j : inteiro a : vetor [1..3, 1..2] de inteiro inicio para i de 1 ate 3 faca para j de 1 ate 2 faca escrevaL(a[ i , j ] ) fimpara fimpara fimalgoritmo 8 Solução Exemplo em VisuAlg algoritmo "matriz_vendas" var quant : vetor [1..4, 1..5] de inteiro i , j , soma : inteiro inicio para i de 1 ate 4 faca para j de 1 ate 5 faca escreva("Informe a quantidade do ", i,"º trimestre e ", j, "ª região: ") leia(quant[ i , j ]) fimpara fimpara soma <- 0 para i de 1 ate 4 faca para j de 1 ate 5 faca soma <- soma + quant[ i , j ] fimpara fimpara escrevaL("O total das quantidades vendidas é ", soma) fimalgoritmo 9 Matrizes Exercício: Faça um programa que solicite ao usuário os dados de uma matriz com 3 linhas e 4 colunas de números inteiros. Em seguida, exiba a matriz digitada pelo usuário, colocando todos os elementos de cada linha em uma mesma linha da tela. 10 Solução (VisuAlg) algoritmo "matriz" var i , j : inteiro a : vetor [1..3, 1..4] de inteiro inicio para i de 1 ate 3 faca para j de 1 ate 4 faca escreva("digite o valor do elemento da ",i,"º linha e ",j,"º coluna: ") leia(a[ i , j ]) fimpara fimpara escrevaL("A matriz digitada foi:") para i de 1 ate 3 faca para j de 1 ate 4 faca escreva(a[ i , j ] ) fimpara escrevaL() fimpara fimalgoritmo 11 Matrizes em Java Criadas utilizando arrays multidimensionais. Arrays multidimensionais com duas dimensões costumam ser utilizados para representar tabelas de valores: Informações dispostas na forma de linhas e colunas. Chamados de arrays bidimensionais pois precisam de dois índices para identificação dos elementos. Java não suporta arrays multidimensionais diretamente. É necessário criar um array unidimensional e definir que seus elementos também são arrays unidimensionais; Praticamente possuem o mesmo efeito. 12 Matrizes em C/C++ Criadas utilizando arrays multidimensionais. Arrays multidimensionais com duas dimensões costumam ser utilizados para representar tabelas de valores: Informações dispostas na forma de linhas e colunas. Chamados de arrays bidimensionais pois precisam de dois índices para identificação dos elementos. 13 Arrays Multidimensionais Cada elemento do array é identificado por uma expressão de acesso da forma nomeArray [ linha ] [ coluna ]. a[ 0 ] [ 0 ] a[ 0 ] [ 1 ] a[ 0 ] [ 2 ] a[ 0 ] [ 3 ] a[ 1 ] [ 0 ] a[ 1 ] [ 1 ] a[ 1 ] [ 2 ] a[ 1 ] [ 3 ] a[ 2 ] [ 0 ] a[ 2 ] [ 1 ] a[ 2 ] [ 2 ] a[ 2 ] [ 3 ] 14 Arrays Multidimensionais Declaração (exemplos): int b[2][2] = { { 1, 2 }, { 3, 4 } }; ou int b[4][5]; 15 Arrays Multidimensionais Acessando os elementos de um array multidimensional: int a [ 3 ][ 2 ]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { printf(“%d\n”, a[ i ][ j ]); } } 16 Solução Exemplo em C/C++ int main { int quant [ 4 ][ 5 ]; int soma = 0, valor = 0; // lê os valores para cada região e cada trimestre for (int i = 0; i < 4 ; i++) { for (int j = 0; j < 5 ; j++) { printf("informe a quantidade do %dº trimestre e %dª região“, (i+1),(j+1)); scanf(“%d”, &quant[ i ][ j ] ); } } 17 Solução Exemplo em C/C++ // soma todos os valores armazenados na matriz for (int i = 0; i < 4 ; i++) { for (int j = 0; j < 5 ; j++) soma = soma + quant[ i ][ j ]; } printf("O total de quantidades vendidas é: %d" , soma); return 0; } 18 Solução Exemplo em Java public static void main(String[] args) { int[ ][ ] quant = new int[ 4 ][ 5 ]; int soma = 0, valor = 0; // lê os valores para cada região e cada trimestre for (int i = 0; i < quant.length; i++) { for (int j = 0; j < quant[ i ].length; j++) { System.out.println("informe a quantidade do "+(i+1)+"º trimestre e " +(j+1)+"ª região"); valor = leia(valor); quant[ i ][ j ] = valor; } } 19 Solução Exemplo em Java // soma todos os valores armazenados na matriz for (int i = 0; i < quant.length; i++) { for (int j = 0; j < quant[ i ].length; j++) soma = soma + quant[ i ][ j ]; } System.out.println("O total de quantidades vendidas é:" + soma); 20 Matrizes Exercício (1) Faça um programa que solicite ao usuário o tamanho em linhas e colunas de uma matriz, bem como os dados da mesma. Em seguida, exiba a matriz digitada pelo usuário, colocando todos os elementos de cada linha em uma mesma linha do console. 21 Solução (1) (C/C++) int main() { int num_linha=0, num_coluna=0; printf("Digite o número de linhas da matriz: "); scanf("%d", &num_linha); printf("Digite o número de colunas da matriz: "); scanf("%d", &num_coluna); int a[num_linha][num_coluna] ; for (int i = 0; i < num_linha; i++) { for (int j = 0; j < num_coluna; j++) { printf("Digite o elemento da %dº linha e %dº coluna: ", (i+1), (j+1)); scanf("%d", &a[i][j] ); } }22 Solução (1) (C/C++) printf("A matriz digitada foi: \n"); for (int i = 0; i < num_linha; i++) { for (int j = 0; j < num_coluna; j++) printf("%d ", a[i][j]); printf("\n"); } return 0; } 23 Solução (Java) public static void main(String[] args) { int num_linha=0, num_coluna=0, valor = 0; System.out.println("Digite o número de linhas da matriz"); num_linha = leia(num_linha); System.out.println("Digite o número de colunas da matriz"); num_coluna = leia(num_coluna); int[ ][ ] a = new int[ num_linha ][ num_coluna ]; for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[ i ].length; j++) { System.out.println("digite o valor do elemento da "+(i+1)+"º linha e " +(j+1)+"º coluna"); valor = leia(valor); a[ i ][ j ] = valor; } 24 Solução (Java) } System.out.println("A matriz digitada foi:"); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[ i ].length; j++) System.out.print(a[ i ][ j ]+ " "); System.out.println(); } } 25 Matrizes Exercícios (2 e 3) Faça um programa que leia uma matriz e exiba o menor valor, o maior valor e a média dos elementos presentes nesta matriz. Crie uma matriz 7x8 onde cada elemento é a soma dos índices de sua posição dentro da matriz. 26 Solução (2) (C/C++) int main() { // Leitura da matriz - solução (1) int menor, maior; float soma, media; menor = a[0][0]; maior = a[0][0]; soma = 0; for (int i = 0; i < num_linha; i++) for (int j = 0; j < num_coluna; j++){ if (a[i][j]>maior) maior = a[i][j]; if (a[i][j]<menor) menor = a[i][j]; soma = soma + a[i][j]; } media = soma / (num_linha*num_coluna); printf("Maior = %d \n", maior); printf("Menor = %d \n", menor); printf("Media = %f \n\n", media); } 27 Solução (3) (C/C++) int main() { // Leitura da matriz - solução (1) int m[7][8]; for (int i = 0; i < 7; i++) for (int j = 0; j < 8; j++) m[i][j] = i + j; printf("A matriz gerada foi: \n"); for (int i = 0; i < 7; i++) { for (int j = 0; j < 8; j++) printf("%d ", m[i][j]); printf("\n"); } return 0; } Dúvidas ?