aula 19: matrizes - introdução a programação · 2018-10-16 · dada uma coleção de n números...
Post on 11-Feb-2019
217 Views
Preview:
TRANSCRIPT
Aula 19: MatrizesIntrodução a Programação
Túlio Toffolo & Puca Huachihttp://www.toffolo.com.br
BCC201 – 2018/2Departamento de Computação – UFOP
Aula anterior
Vetores
2 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Aula de hoje
1 Exercício da última aula
2 Introdução
3 Definição
4 Exemplos e exercícios
5 Próxima aula
2 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Aula de hoje
1 Exercício da última aula
2 Introdução
3 Definição
4 Exemplos e exercícios
5 Próxima aula
2 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício da última aula
Ordenação
Dada uma coleção de N números inteiros, implemente uma função paracolocá-los em ordem crescente.
Uma possível solução é trocar valores adjacentes até que nenhuma trocaseja necessária.
Para cada posição 0 ≤ i < N - 1, verificamos se vetor[i] é maiorque vetor[i+1].
Se for, trocamos!
Repetimos para todas as posições 0 ≤ i < N - 1 até nenhuma trocaser necessária.
Como implementar esta função?
3 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício da última aula
Passo 1:
Determinar o algoritmo para resolver o problema!
Em outras palavras: como ordenar um array?
Imagine um array com 4 elementos...
Agora aplique seu algoritmo sobre este “mini-array”.
4 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício da última aula
Passo 2:
Agora sim, vamos implementar o código.
Criaremos uma função para trocar elementos.
E outra para fazer todas as trocas necessárias para colocar o array emordem crescente.
5 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício da última aula
Função que troca dois números inteiros:
1 void troca(int &a, int &b)2 {3 int aux = a;4 a = b;5 b = aux;6 }
6 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício da última aula
Função que troca elementos até o array ficar ordenado:
1 void ordena(int array[], int tamanho)2 {3 bool trocou;4 do {5 trocou = false;6 for (int i = 0; i < tamanho - 1; i++) {7 if (array[i] > array[i+1]) {8 troca(array[i], array[i+1]);9 trocou = true;
10 }11 }12 } while (trocou);13 }
Esta função é “quase” um bubblesort(é um “bubblesort piorado”, pois poderia ser menos ineficiente)
7 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
1 #include <iostrea>2 using namespace std;34 #define N 1556 void troca(int&, int&);7 void ordena(int[], int);89 int main()
10 {11 int data[N] = { 0, 9, 8, 21, 33, 1, -1, 10, 7, 11, 6, 2, 5, 4, 3 };12 ordena(data, N);1314 for (int i = 0; i < N; i++)15 cout << data[i] << " ";16 cout << endl;1718 return 0;19 }
Resultado/saída:
1 -1 0 1 2 3 4 5 6 7 8 9 10 11 21 33
8 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Aula de hoje
1 Exercício da última aula
2 Introdução
3 Definição
4 Exemplos e exercícios
5 Próxima aula
8 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exemplo
Fazer um programa para ler as notas de 4 provas para 50 alunos de umaturma e calcular a média do aluno e média da turma.
Solução: criar 4 vetores de 50 posições, sendo um para cada nota:
1 double nota1[50], nota2[50], nota3[50], nota4[50];
9 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Introdução
E se tivermos que armazenar 100 notas?
Criaremos 100 vetores com 100 nomes diferentes?
11 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Introdução
Uma solução mais eficaz para resolver o problema é o uso de matrizes:
12 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Aula de hoje
1 Exercício da última aula
2 Introdução
3 Definição
4 Exemplos e exercícios
5 Próxima aula
12 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Variáveis Compostas Homogêneas – Matrizes
As variáveis compostas homogêneas correspondem a um conjunto deelementos de mesmo tipo e que compartilham um mesmo nome;
Cada um dos elementos é unicamente identificado por um númerointeiro (índice) que especifica a sua localização dentro da estrutura;
Estas variáveis podem ser unidimensionais (vetores) oumultidimensionais (matrizes);
A definição da variável composta homogênea pode ser feita da mesmaforma que definição de variáveis simples.
13 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Variáveis Compostas Homogêneas – Matrizes
Matriz é uma variável composta homogênea com duas ou maisdimensões;
A definição da variável pode ser feita da mesma forma que a definiçãodo vetor, porém deve ser especificado o número de elementos paracada dimensão da matriz;
A referência a cada elemento deve ser feita com a utilização de umíndice para cada dimensão;
Matrizes podem ser consideradas “vetores de vetores”.
14 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Introdução
Por exemplo, uma matriz bi-dimensional pode ser vista como uma tabelade m linhas e n colunas.
15 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Declaração de Matrizes
<tipo> <identificador> [<linhas>] [<colunas>];
<tipo>: tipo dos dados que serão armazenados no vetor (int, char,float, etc);
<identificador>: nome dado à variável vetor;
<linhas>: número de elementos da primeira dimensão;
<colunas>: número de elementos da segunda dimensão;
As linhas e colunas são numeradas de 0 até tamanho− 1.
16 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Declaração de Matrizes
Exemplo:
1 //matriz com 100 linhas e 50 colunas2 double notas[100][50];
17 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Acessando os elementos
Forma de ter acesso ao elemento de uma matriz:<variável>[<indice_linha>][<indice_coluna>]
Exemplos:
1 //imprimir o elemento da linha 3 e coluna 10 da matriz notas2 cout << notas[3][10];34 //multiplica a posição (i, j) da matriz mat por 5;5 mat[i][j] = mat[i][j] * 5;
18 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Observação
C/C++ não verifica o limite das dimensões das variáveis compostas;
Se uma instrução for feita com índices além do limite, não haverá errode execução do programa e outros valores serão sobrepostos namemória;
Assim, dados e/ou programas serão sobrepostos;
É responsabilidade do programador providenciar a verificação doslimites das dimensões das variáveis compostas;
19 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exemplo
Faça um programa que leia e imprima uma matriz 4×3 (4 linhas e 3colunas).
20 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Declaração da matriz
Matriz (M x N)
1 #define M 42 #define N 334 int matriz[M][N]; // note que M e N são constantes
21 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Leitura dos dados da matriz
Matriz (M x N)
1 // capturando dados2 for (int i = 0; i < M; i++) { //para as linhas3 for (int j = 0; j < N; j++) { //para as colunas4 cin >> matriz[i][j];5 }6 }
22 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Impressão da matriz
Matriz (M x N)
1 // imprimindo o conteúdo da matriz2 for (int i = 0; i < M; i++) { //para as linhas3 for (int j = 0; j < N; j++) { //para as colunas4 cout << matriz[i][j] << " ";5 }6 cout << endl; //salta uma linha7 }
23 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
1 int main()2 {3 int matriz[4][3];45 // capturando dados6 for (int i = 0; i < 4; i++) { // para as linhas7 for (int j = 0; j < 3; j++) { // para as colunas8 cout << "matriz[" << i << "][" << j << "] = ";9 cin >> matriz[i][j];
10 }11 }1213 // imprimindo o conteudo da matriz14 for (int i = 0; i < 4; i++) { // para as linhas15 for (int j = 0; j < 3; j++) { // para as colunas16 cout << setw(4) << matriz[i][j] << " ";17 }18 cout << endl;19 }20 return 0;21 }
24 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Inicialização de Matrizes I
Inicializando cada elemento da matriz (m x n) com o valor 0.
1 for (int i = 0; i < M; i++) //para as linhas2 for (int j = 0; j < N; j++) //para as colunas3 matriz[i][j] = 0;
25 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Inicialização de Matrizes II
Inicializando na declaração. Processo semelhante à inicialização devetores.
1 int matriz[3][4] = { {10, 20, 30, 40},2 {50, 60, 70, 80},3 {90, 11, 22, 33} };
26 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exemplo
Dada uma matriz (4×5), calcular a soma de todos os elementos damatriz. Calcular também o somatório dos elementos de cada linha damatriz, armazenando o somatório em um vetor.
27 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exemplo
1 int main()2 {3 // declaração das variáveis4 float mat[4][5], somaLinha[4], total;56 // total se inicia com zero7 total = 0;89 for (int i = 0; i < 4; i++) {
10 // a soma da cada linha é inicializada com zero11 somaLinha[i] = 0;1213 // somando os valores da linha em somaLinha[i]14 for (j = 0; j < 5; j++)15 somaLinha[i] += mat[i][j];1617 // somando o total de cada linha18 total += somaLinha[i];19 }20 }
28 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Matriz vs array
Matrizes bidimensionais se comportam como arrays de array...
1 int matriz[4][5] = { {11, 12, 13, 14, 15},2 {21, 22, 23, 24, 25},3 {31, 32, 33, 34, 35},4 {41, 42, 43, 44, 45} };
Logo, uma matriz bidimensional pode ser imaginada como um arrayunidimensional de 4 elementos do tipo int[] onde cada um dos 4elementos é um array de 5 elementos do tipo int:
1 matriz[0] ---> {11, 12, 13, 14, 15}2 matriz[1] ---> {21, 22, 23, 24, 25}3 matriz[2] ---> {31, 32, 33, 34, 35}4 matriz[3] ---> {41, 42, 43, 44, 45}
29 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Aula de hoje
1 Exercício da última aula
2 Introdução
3 Definição
4 Exemplos e exercícios
5 Próxima aula
29 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício 1
Faça um programa em C++ que calcule a soma de duas matrizes:
Cm×n = Am×n +Bm×n
onde
ci,j = ai,j + bi,j ∀i ∈ {1 . . .m} e j ∈ {1 . . . n}
30 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
1 #define M 42 #define N 334 int main()5 {6 int a[M][N] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} };7 int b[M][N] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12} };89 int c[M][N]; // c não precisa ser inicializada neste momento...
1011 // calculando o valor de cada célula da matriz c12 for (int i = 0; i < M; i++)13 for (int j = 0; j < N; j++)14 c[i][j] = a[i][j] + b[i][j];1516 // imprimindo matriz c17 for (int i = 0; i < M; i++) {18 for (int j = 0; j < N; j++)19 cout << c[i][j] << " ";20 cout << endl;21 }2223 return 0;24 }
31 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício 2
Escrever um programa que leia uma matriz, seus elementos e suadimensão (m,n ≤ 100). Em seguida, o programa deve:
1 solicitar ao usuário o índice de uma linha (`) e um valor constante (c);2 multiplicar todos elementos da linha ` por c;3 imprimir a matriz resultante;
32 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício 2
Lendo a matriz:
1 int matriz[100][100];23 // lendo as dimensões da matriz4 cout << "Digite as dimensões m e n da matriz: ";5 cin >> m >> n;67 // lendo os elementos da matriz8 for (int i = 0; i < m; i++) {9 for (int j = 0; j < n; j++) {
10 cout << "Digite o valor de matriz[" << i << "][" << j << "] ";11 cin >> matriz[i][j];12 }13 }
33 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Solicitando o índice da linha ` e o valor de c para, em seguida, multiplicaros elementos da linha ` por c e imprimir a matriz resultante:
1 int linha, constante;2 cout << "Digite o índice da linha a alterar: ";3 cin >> linha;4 cout << "Digite o valor da constante: ";5 cin >> constante;67 // multiplicando valores da linha *linha* por *constante*8 for (int j = 0; j < n; j++)9 matriz[linha][j] = matriz[linha][j] * constante;
1011 // imprimindo a matriz resultante12 for (int i = 0; i < m; i++) {13 for (int j = 0; j < n; j++)14 cout << matriz[i][j] << " ";15 cout << endl;16 }
34 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício 3
Escreva um programa que declare uma matriz (5×5) e inicialize cadaposição com o valor 0. Em seguida, o usuário deve digitar o índice dalinha e da coluna e o valor da posição.
A leitura será feita enquanto os índices forem não negativos.
Após a leitura o programa deve imprimir a matriz na tela.
35 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
1 int matriz[5][5];2 int linha, coluna, valor;34 for (int i = 0; i < 5; i++)5 for (int j = 0; j < 5; j++)6 matriz[i][j] = 0;78 do {9 cout << "Usuário, digite linha, coluna e valor: ";
10 cin >> linha >> coluna >> valor;1112 if (linha >= 0 && coluna >= 0)13 matriz[linha][coluna] = valor;1415 } while (linha >= 0 && coluna >= 0);1617 for (int i = 0; i < 5; i++) {18 for (int j = 0; j < 5; j++)19 cout << matriz[i][j] << " ";20 cout << endl;21 }
36 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício 4
Escreva um programa que declare e preencha uma matriz (10× 10) comvalores fornecidos pelo usuário.
O programa deve imprimir o maior valor da matriz e em qual posição(linha e coluna) este valor está.
37 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Exercício 5
Escreva um programa que crie uma matriz quadrada e mostre oselementos da diagonal principal e da diagonal secundária.
38 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Aula de hoje
1 Exercício da última aula
2 Introdução
3 Definição
4 Exemplos e exercícios
5 Próxima aula
38 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
Próxima Aula
Aula prática: vetores e matrizes
Mais sobre matrizes...
Spoiler: podemos ter uma matriz com mais de duas dimensões?
1 // que tal a matriz abaixo?2 int matriz_3_dimensoes[10][10][10];34 // utilizaríamos assim?5 matriz_3_dimensoes[0][0][0] = 10;6 cout << matriz_3_dimensoes[0][0][0] << endl;
39 / 39 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 19: Matrizes
top related