Baixe o app para aproveitar ainda mais
Prévia do material em texto
ECT1203 Linguagem de Programação 2012.1 Prof. Luiz Eduardo Cunha Leite Aula 10 – Matrizes Universidade Federal do Rio Grande do Norte Escola de Ciências e Tecnologia Hora de silenciar o celular • Manter o celular sempre desligado/silencioso quando estiver em sala de aula • Nunca atender o celular em sala de aula Objetivo da aula Apresentar matrizes em C++: Motivação para utilização de matrizes Declaração de matrizes Exemplos de utilização de matrizes Matrizes • Em C++, as matrizes podem ser: • Unidimensionais (vetores) • Multidimensionais (duas ou mais dimensões) int m[4][3]; Declaração de uma matriz de duas dimensões com 4 linhas e 3 colunas Matrizes bidimensionais m[0][0] m[1][2] Acessa o elemento da primeira linha e primeira coluna Acessa o elemento da segunda linha e terceira coluna • Matrizes de duas dimensões podem ser vistas como vetores em que os elementos são outros vetores. • Os elementos de uma matriz bidimensional são acessados com indexação dupla: o primeiro índice acessa a linha e o segundo acessa a coluna. Memória Modelo abstrato int dados[3][3]; Organização da Memória do Computador 01 02 03 04 05 06 07 08 09 •As matrizes são armazenadas de forma linear na memória do computador Armazenamento de uma matriz int m[4][3] = {{ 5,10,15}, {20,25,30}, {35,40,45}, {50,55,60}}; 5 10 15 20 25 30 35 40 45 50 55 60 lin h a s colunas Endereço Valor 100 ... 104 5 108 10 112 15 116 20 120 25 124 30 128 35 132 40 136 45 140 50 144 55 148 60 152 ... m[0][0] m[0][1] m[0][2] m[1][0] m[1][1] m[1][2] m[2][0] m[2][1] m[2][2] m[3][0] m[3][1] m[3][2] Matrizes e estruturas de repetição • Matrizes ▫ int i,j,dados[3][5]; for(i=0; i<3 ;i++){ for(j=0; j<5 ; j++){ cin>>[i][j]; } } • O for mais externo (que utiliza a variável i) indexa as linhas da matriz. • O for mais interno (que utiliza a variável j) indexa colunas da matriz. Para acessar todos os elementos de uma matriz frequentemente são utilizados dois laços de repetição aninhados. int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 0 j = 0 dados[0][0] int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 0 j = 0 dados[0][0] 5 int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 0 j = 1 dados[0][1] 5 8 int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 0 j = 2 dados[0][2] 5 8 11 int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 1 j = 0 dados[1][0] 5 8 11 34 int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 1 j = 1 dados[1][1] 5 8 11 34 12 int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 1 j = 2 dados[1][2] 5 8 11 34 12 2 int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 2 j = 0 dados[2][0] 5 8 11 34 12 2 26 int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 2 j = 1 dados[2][1] 5 8 11 34 12 2 26 77 int i,j,dados[3][3]; for(i=0; i<3; i++){ for(j=0; j<3 ; j++){ cin>>dados[i][j]; } } i = 2 j = 2 dados[2][2] 5 8 11 34 12 2 26 77 54 int main(){ int m[3][4], i, j; for(i=0; i<3; i++) for(j=0; j<4; j++) m[i][j] = (i*4)+j+1; for(i=0; i<3; i++) { for(j=0; j<4; j++) cout << m[i][j] << “ ”; cout << endl; } return 0; } O que imprime o programa ao lado? int main(){ int m[3][4], i, j; for(i=0; i<3; i++) for(j=0; j<4; j++) m[i][j] = (i*4)+j+1; for(i=0; i<3; i++) { for(j=0; j<4; j++) cout << m[i][j] << “ ”; cout << endl; } return 0; } O que imprime o programa ao lado? Inicialização de matrizes int m[4][3] = {{1,2,3}, {4,5,6}, {7,8,9}, {10,11,12}}; int m[4][3] = {1,2,3,4,5,6,7,8,9,10,11,12}; int m[ ][3] = {1,2,3,4,5,6,7,8,9,10,11,12}; • As três formas a seguir podem ser usadas: O número de colunas deve ser sempre fornecido. Espaço ocupado por uma matriz bidimensional int m[4][3]; número de bytes = tamanho da 1ª dimensão * tamanho da 2ª dimensão * sizeof(tipo) A matriz m ocupa 48 bytes na memória. Matrizes multidimensionais int m[4][3][6][5]; A matriz m ocupa 1440 bytes. • O número máximo de dimensões depende do compilador. • A forma geral da declaração é: tipo nome[tamanho1][tamanho2]...[tamanhoN]; Usando matrizes de 3 dimensões int tres[3][2][4] = { { {1,2,3,4}, {5,6,7,8} }, { {7,9,3,2}, {4,6,8,3} }, { {7,2,6,3}, {0,1,9,4} } }; Como acessar o único valor zero armazenado na matriz acima? Usando matrizes de 3 dimensões int tres[3][2][4] = { { {1,2,3,4}, {5,6,7,8} }, { {7,9,3,2}, {4,6,8,3} }, { {7,2,6,3}, {0,1,9,4} } }; terceiro grupo (elemento) tres[2][1][0] primeiro dos 4 números segundo elemento do terceiro grupo Exercício 1 Escreva um programa que receba do usuário uma matriz bidimensional de dimensão MxN, calcular e imprimir a matriz transposta. O usuário deve fornecer os tamanhos da matriz e, em seguida, os elementos da matriz. Observação: • M, N <= 30 • M e N devem ser lidos. Exercício 2 Determinar se uma matriz NxN é uma matriz de permutação. Uma matriz quadrada é chamada de matriz de permutação se seus elementos são apenas 0’s e 1’s e se em cada linha e coluna da matriz existe apenas um único valor 1. Exemplo: A matriz ao lado é uma matriz de permutação. Observação: • N <= 30 • N deve ser lido. 1 0 0 0 0 0 0 1 0 0 1 0 0 1 0 0 Exercício 3 Dadas duas matrizes A (M x N) e B (N x O) reais, encontrar e escrever uma matriz C (M x O) onde C é obtida pelo produto de A por B (C = A x B). Ex.: 𝑎00 𝑎01 𝑎02 𝑎10 𝑎11 𝑎12 × 𝑏00 𝑏01 𝑏10 𝑏11 𝑏20 𝑏21 = 𝑎00 ∗ 𝑏00 + 𝑎01 ∗ 𝑏10 + 𝑎02 ∗ 𝑏20 𝑎00 ∗ 𝑏01 + 𝑎01 ∗ 𝑏11 + 𝑎02 ∗ 𝑏21 𝑎10 ∗ 𝑏00 + 𝑎11 ∗ 𝑏10 + 𝑎12 ∗ 𝑏20 𝑎10 ∗ 𝑏01 + 𝑎11 ∗ 𝑏11 + 𝑎12 ∗ 𝑏21 𝑎𝑖,𝑗 = 𝑎𝑖,𝑘 ∗ 𝑏𝑘,𝑗 𝑛−1 𝑘=0 Exercício 4 Dizemos que uma matriz quadrada inteira é um quadrado mágico se a soma dos elementos de cada linha, a soma dos elementos de cada coluna e a soma dos elementos das diagonais principal e secundária são todas iguais. Dada uma matriz quadrada Anxn , verificar se A é um quadrado mágico é um quadrado mágico Exercício 5 (POLI 94) Os elementos aij de uma matriz inteira Anxn representamos custos de transporte da cidade i para a cidade j. Dados uma matriz de custos Anxn e n (n <= 100) itinerários, cada um com k (k <= 30) cidades, calcular o custo total para cada itinerário. • Exemplo: O custo do itinerário 0 3 1 3 3 2 1 0 é a03+a31+a13+a33+a32+a21+a10= 3 + 1 + 400 + 5 + 2 + 1 + 5 = 417
Compartilhar