Vimos que vetores são úteis para armazenar \(n\) variáveis do mesmo tipo.
O armazenamento dessas informações é um meio de combinação de C++.
O grande volume de dados pode tornar inviável o armazenamento de valores do mesmo tipo em vetores.
Construa um programa que recebe as porcentagens de notas de cinco provas dos alunos de uma turma de trinta pessoas. Calcule a média final para cada aluno e exiba a média final da sala.
Precisaríamos armazenar cinco porcentagens para cada aluno.
Uma alternativa: armazenar todas as notas sequencialmente. Assim, os dados de cada aluno apareceriam a cada cinco posições no vetor.
Podemos também pensar em algum tipo de tabela para armazenar estas notas.
Distribuindo alunos como linhas e notas como colunas.
P1 | P2 | P3 | P4 | P5 | |
---|---|---|---|---|---|
A1 | 35 | 58 | 92 | 27 | 84 |
A2 | 22 | 28 | 91 | 76 | 86 |
A3 | 5 | 4 | 19 | 24 | 13 |
… | … | … | … | … | … |
A30 | 68 | 85 | 83 | 37 | 40 |
Podemos representar apenas a parte relevante desta tabela, matematicamente.
Esta construção é chamada de matriz bidimensional, e também é um outro meio de combinação da linguagem C++.
Podemos entender matrizes como:
Uma matriz de trinta linhas e cinco colunas:
int A[30][5];
Acessando a quarta nota do décimo-sexto aluno:
std::cout << A[15][3] << std::endl;
Atribuindo um valor:
A[15][3] = 50;
Lembrando que uma matriz pode ser entendida como um vetor de sub-vetores, podemos usar os sub-vetores como vetores individuais.
A seguir, leremos dois nomes digitados pelo usuário, com um máximo de oitenta caracteres.
char infos[2][80];
std::cin >> std::ws;
std::cin.getline(infos[0], 80);
std::cin >> std::ws;
std::cin.getline(infos[1], 80);
std::cout << "Nome: " << infos[0] << std::endl
<< "Sobrenome: " << infos[1] << std::endl;
Inicializando uma matriz \(2 \times 2\):
int A[2][2] = { {1, 2}, {3, 4} };
Podemos omitir apenas a quantidade de linhas:
int A[][2] = { {1, 2}, {3, 4} };
Também é possível inicializar a matriz com zeros:
int A[][2] = { {}, {} };
Podemos ter matrizes de mais dimensões.
Podemos, por exemplo, falar em matrizes tridimensionais.
#define TURMAS 6
#define ALUNOS 30
#define NOTAS 5
int boletim[TURMAS][ALUNOS][NOTAS];
/* inicialização viria aqui */
std::cout << boletim[3][1][2] << std::endl;
Extremamente similar a percorrer vetores. Pode ser enxergado desta forma:
Percorremos o vetor de vetores, onde cada elemento é um sub-vetor;
Para cada sub-vetor, percorremos seus elementos.
int A[4][5] = {
{91, 67, 49, 74, 14},
{63, 37, 13, 41, 16},
{45, 3, 71, 42, 30},
{85, 95, 64, 80, 10},
};
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 5; j++) {
std::cout << std::setw(2) << A[i][j] << ' ';
}
std::cout << std::endl;
}
Suponha uma matriz \(2 \times 2\), como a matriz abaixo:
O cálculo da determinante de uma matriz \(A\) é dado por:
\[ det(A) = (a_{11} \times a_{22}) - (a_{21} \times a_{12}) \]
Crie um programa que lê uma matriz \(2 \times 2\) digitada pelo usuário, e então calcula sua determinante.
Construa um programa que recebe as porcentagens de notas de 5 provas dos alunos de uma turma de 30 pessoas. Calcule a média final para cada aluno e exiba a média final da sala.