aula 20: matrizes (parte 2) - introdução a programação · aula de hoje 1 exercícios da aula...
TRANSCRIPT
Aula 20: Matrizes (Parte 2)Introdução a Programação
Túlio Toffolo & Puca Huachihttp://www.toffolo.com.br
BCC201 – 2018/2Departamento de Computação – UFOP
Aulas anteriores
Vetores
Matrizes
2 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Aula de hoje
1 Exercícios da aula prática
2 Mais sobre matrizes
3 Erros comuns
4 Exercícios
2 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Aula de hoje
1 Exercícios da aula prática
2 Mais sobre matrizes
3 Erros comuns
4 Exercícios
2 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Exercícios da aula prática
Exercício 1
Faça um programa que leia 2 vetores, A e B, de no máximo 15 posiçõesde caracteres. Em seguida, calcule um terceiro vetor C que seja adiferença entre eles.
Exemplo:
A = {a, f, b, h, y}B = {e, t, y, q, f}
O resultado será:
C = A\B ∴ C = {a, b, h}
3 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Exercícios da aula prática
Exercício 2Escreva um programa que leia os elementos de um vetor (vet1) deinteiros, dado seu tamanho n (n ≤ 100) e um segundo vetor (vet2) detamanho m (m ≤ 100), também de inteiros. Em seguida, gere um terceirovetor (vet3) que receba os dois primeiros intercalados. O programa deveimprimir o vetor intercalado.
Exemplo:
n = 5, vet1 = {1, 3, 5, 7, 9}m = 7, vet2 = {2, 4, 6, 8, 19, 11, 12, 13}
O resultado será:
vet3 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13}
4 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Exercícios da aula prática
Exercício 3
Seja uma matriz dados de alunos, onde na 1a coluna é armazenado amatrícula do aluno no curso; na 2a o sexo (0 para feminino e 1 paramasculino); na 3a o código do curso, e na 4a, o CR (Coeficiente deRendimento). Suponha 10 alunos e todos os dados do tipo inteiro.
Faça um programa que armazene esses dados sabendo-se que:
Os dados lidos são: a matrícula, o sexo, o CR e o código do curso;
Um grupo empresarial resolveu premiar a aluna com o maior CR deum curso. O programa deve portanto imprimir a matrícula e o CRdessa aluna.
5 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Aula de hoje
1 Exercícios da aula prática
2 Mais sobre matrizes
3 Erros comuns
4 Exercícios
5 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Inicialização de matrizes
Uma matriz pode ser inicializada assim como um vetor...
Mas na prática existem duas de fazê-lo:
Separando as linhas em grupos, usando chaves;
1 // separando as linhas (notação mais clara)...2 int matriz[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
Ou sequencialmente, sem nenhuma separação.
1 // sem nenhuma separação2 int matriz[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
6 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Inicialização de matrizes
Note que o mesmo vale para matrizes com mais de duas dimensões:
1 // separando as linhas (notação mais clara)...2 int matriz[2][2][2] = { { {1, 2}, {3, 4} }, { {5, 6}, {7, 8} } };34 // exemplo de uso (o que será impresso?)5 cout << matriz[1][0][1] << endl;6 cout << matriz[1][1][1] << endl;
Podemos, portanto, re-escrever o código acima como:
1 // sem separação...2 int matriz[2][2][2] = { 1, 2, 3, 4, 5, 6, 7, 8 };34 // exemplo de uso (o que será impresso?)5 cout << matriz[0][1][1] << endl;6 cout << matriz[0][0][0] << endl;
7 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Passando matrizes por parâmetro
Em C/C++ você precisa indicar o tamanho de todas as dimensões de umamatriz passada por parâmetro, exceto a dimensão mais à esquerda.
Exemplo com todas as dimensões da matriz:
1 void imprimirMatriz(int matriz[3][3], int n, int m)2 {3 for (int i = 0; i < n; ++i) {4 for (int j = 0; j < m; ++j)5 cout << matriz[i][j] << " ";6 cout << endl;7 }8 }
8 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Passando matrizes por parâmetro
Em C/C++ você precisa indicar o tamanho de todas as dimensões de umamatriz passada por parâmetro, exceto a dimensão mais à esquerda.
Exemplo sem a dimensão mais a esquerda:
1 void imprimirMatriz2(int matriz[][3], int n, int m)2 {3 for (int i = 0; i < n; ++i) {4 for (int j = 0; j < m; ++j)5 cout << matriz[i][j] << " ";6 cout << endl;7 }8 }
9 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Passando matrizes por parâmetro
Mas... porquê todas as dimensões menos a mais à esquerda??
Por conta da forma como matrizes são representadas na memória!
As linhas são colocadas sequencialmente em um vetorzão.
Exemplo: seja a matriz 3×3 a seguir
1 matriz[3][3] = { { 10, 20, 30 },2 { 40, 50, 60 },3 { 70, 80, 90 }, };
Ela será representada na memória como um vetor de tamanho 9:
1 i ---> 0 0 0 1 1 1 2 2 22 j ---> 0 1 2 0 1 2 0 1 23 M[i][j] ---> { 10, 20, 30, 40, 50, 60, 70, 80, 90 }
10 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Passando matrizes por parâmetro
Logo, quando acessamos o campo [i][j] da matriz 3×3:
C/C++ acessa o campo 3× i+ j do “vetorzão”.
Para tal, o compilador deve saber quantas colunas há em cada linha
Ou seria impossível multiplicar por “3” neste exemplo.
Se você não quiser definir as dimensões da sua matriz em tempo decompilação, há algumas alternativas...
que aprenderemos em breve...
(quando falarmos sobre alocação dinâmica)
11 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Passando matrizes por parâmetro
Agora faz mais sentido inicializar uma matriz sem separação?
1 // inicializando uma matriz sem separação entre linhas/colunas2 int matriz[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
12 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Aula de hoje
1 Exercícios da aula prática
2 Mais sobre matrizes
3 Erros comuns
4 Exercícios
12 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Passando matrizes por parâmetro
O que está errado no código acima???
Erro comum
1 void imprimirMatriz2(int matriz[][], int n, int m)2 {3 for (int i = 0; i < n; ++i) {4 for (int j = 0; j < m; ++j)5 cout << matriz[i][j] << " ";6 cout << endl;7 }8 }
13 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Aula de hoje
1 Exercícios da aula prática
2 Mais sobre matrizes
3 Erros comuns
4 Exercícios
13 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Exercícios
Exercício 1Crie uma função que recebe duas matrizes de caracteres comoparâmetro, A e B, e suas dimensões (note que A e B devem terdimensões idênticas m ≤ 100 e n ≤ 100):
A função atribui a B o valor de A invertendo as linhas, por exemplo:
A = {{a, f}, {b, h}}B = {{b, h}, {a, f}}
Escreva também o método main que cria duas pequenas matrizes efaz uma chamada a esta função.
14 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)
Exercícios
Exercício 2Crie uma função que recebe uma matriz m× n (m,n ≤ 100) de inteirospor parâmetro e retorna o número de ocorrências do valor zero nestamatriz.
Escreva também o método main que cria uma pequena matriz e fazuma chamada a esta função.
15 / 15 Túlio Toffolo & Puca Huachi – Introdução a Programação – Aula 20: Matrizes (Parte 2)