Programação I
Arrays com duas dimensões (matrizes)
Seção 10.7
Muitos problemas são mais facilmente representados por matrizes
| Nota 1 | Nota 2 | Nota 3 | Nota 4 |
João | 5.5 | 6.0 | 4.0 | 2.0 |
Julia | 7.3 | 4.0 | 5.0 | 8.0 |
Maria | 9.1 | 9.0 | 8.5 | 10.0 |
Ambrósio | 3.2 | 10.0 | 10.0 | 9.5 |
Taíse | 9.1 | 8.0 | 7.5 | 10.0 |
Se usarmos array com uma dimensão
Mas e se a turma tivesse muitos alunos???
float joao[4];
float julia[4];
float maria[4];
float ambrosio[4];
float taise[4];
Array bidimensional
<tipo de dado> <identificador>[<linhas>][<colunas>];
Exemplo:
float notas[5][4];
| 0 | 1 | 2 | 3 |
0 |
|
|
|
|
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
Atribuindo
notas[0][0] = 5.5;
| 0 | 1 | 2 | 3 |
0 | 5.5 |
|
|
|
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
Segunda nota da Taíse
notas[4][1] = 8.0;
| 0 | 1 | 2 | 3 |
0 | 5.5 |
|
|
|
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
| 8.0 |
|
|
Ou toda a matriz
scanf na matriz
notas[0][0] = 5.5 ; //atribuição fixa no código
scanf(“%f”,¬as[0][0]); // leitura do teclado
Percorrendo uma matriz linha por linha (livro 10.8)
Leia as notas dos alunos usando o teclado. Linha por linha. Ou seja, primeiro as 4 notas do primeiro aluno, depois as 4 notas do segundo aluno .. e assim por diante
| 0 | 1 | 2 | 3 |
0 | 5.5 | 6.0 | 4.0 | 2.0 |
1 |
|
|
|
|
2 |
|
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
| 0 | 1 | 2 | 3 |
0 | 5.5 | 6.0 | 4.0 | 2.0 |
1 | 7.3 | 4.0 | 5.0 | 8.0 |
2 | |
|
|
|
3 |
|
|
|
|
4 |
|
|
|
|
Solução
Quantas vezes o scanf foi executado?
Exercícios (livro 10.9)
No código anterior, lemos os elementos da matriz a partir do teclado. Depois de ler os valores, percorra a matriz e imprima-os, linha por linha.
Imprima todos os valores da matriz anterior só que agora coluna por coluna.
Imprima todos os valores de baixo pra cima, linha a linha, da direita pra esquerda.
Imprima todos os valores de baixo pra cima, linha a linha, da esquerda para a direita.
Imprima todos os valores da direita para a esquerda, linha a linha.
Exercício :: fazendo juntos (livro 10.10)
Adição de matrizes
Exercício :: fazendo juntos
Vamos fazer um programa que lê duas matrizes de inteiros e preenche uma terceira matriz com o resultado da soma das duas. As matrizes possuem dimensões N x M, onde N e M serão dados pelo usuário. Sabe-se que 1 <= N,M <=100.
Solução
Matriz transposta (livro 10.11)
Faça um programa que receba as dimensões e os elementos de uma matriz e gere a sua transposta.
Fazendo juntos
Vamos tentar identificar o padrão de atribuição
Solução
Exercício (livro 10.12)
int main()
{
int quadrado[5][5] = {0};
int tabela[5][6] = {{1, 2, 3, 4, 5},
{2, 4, 6, 8, 10},
{20, 10, 5, 3, 1},
{3, 6, 9, 12, 15} };
return 0;
}
a) Complete o código ao lado(mas não altere a inicialização das variáveis) para que o conteúdo do array “quadrado” fique como mostrado a seguir. Use os comandos de repetição para isso.
Exercício (livro 10.12)
int main()
{
int quadrado[5][5] = {0};
int tabela[5][6] = {{1, 2, 3, 4, 5},
{2, 4, 6, 8, 10},
{20, 10, 5, 3, 1},
{3, 6, 9, 12, 15} };
return 0;
}
b) Complete o código ao lado para que o conteúdo do array “quadrado” fique como mostrado a seguir.
Exercício (livro 10.12)
int main()
{
int quadrado[5][5] = {0};
int tabela[5][6] = {{1, 2, 3, 4, 5},
{2, 4, 6, 8, 10},
{20, 10, 5, 3, 1},
{3, 6, 9, 12, 15} };
return 0;
}
c) Complete o código ao lado para que o conteúdo do array “quadrado” fique como mostrado a seguir.
Exercício (livro 10.12)
int main()
{
int quadrado[5][5] = {0};
int tabela[5][6] = {{1, 2, 3, 4, 5},
{2, 4, 6, 8, 10},
{20, 10, 5, 3, 1},
{3, 6, 9, 12, 15} };
return 0;
}
d) O array “tabela” foi parcialmente inicializado. Deixamos a última linha e a última coluna sem valores definidos. Escreva um programa para preencher a última linha com a soma de cada uma das colunas e a última coluna com a soma de cada uma das linhas. Na última posição (última linha e última coluna), calcule a armazene a soma de todas as células pré-preenchidas.