Matrizes
Introdução
Enquanto vetores possuem apenas uma dimensão, matrizes são estruturas que possuem duas ou mais dimensões. Por exemplo, a figura abaixo representa uma matriz 2X4 de temperaturas médias para 4 semanas ao longo de 2 meses.
Declarando Matrizes
Abra o Dev C++ e faça os passos abaixo:
- Acrescente as bibliotecas padrão e a função principal;
- Salve o arquivo com nome "exemplo1_matrizes"
- Faça os passos abaixo:
Para declarar uma matriz como a da introdução, ao invés de declarar apenas uma dimensão, como nos vetores, declaramos duas dimensões:
#include <stdio.h>
int main()
{
float matrizTemp[2][4]; //declara uma Matriz 2X4 de floats
return 0;
}
Inicialize os valores da matriz com o seguinte o código na declaração:
#include <stdio.h>
int main()
{
float matrizTemp[2][4] = {30.0, 32.0, 25.4, 27.12, 32.3, 31.0, 23.6, 15.4}; //declara e inicializa uma Matriz 2X4 de floats
return 0;
}
Acessando Posições em Matrizes
Para acessar os valores de uma matriz precisamos de dois índices, um para a linha e outro para a coluna usando o seguinte padrão:
matriz[i][j]
Onde matriz é o nome da variável tipo matriz, i é o índice da linha e j é o índice da coluna. Vamos imprimir cada posição da matriz acima:
Acrescente as linhas abaixo após a declaração da matriz:
printf("-----------TEMPERATURAS REGISTRADAS EM JANEIRO E FEVEREIRO---------------\n");
printf("-----JANEIRO-----\n");
printf("Semana 1 de Janeiro: %.2f\n", matrizTemp[0][0]);
printf("Semana 2 de Janeiro: %.2f\n", matrizTemp[0][1]);
printf("Semana 3 de Janeiro: %.2f\n", matrizTemp[0][2]);
printf("Semana 4 de Janeiro: %.2f\n", matrizTemp[0][3]);
printf("------FEVEREIRO------\n");
printf("Semana 1 de Fevereiro: %.2f\n", matrizTemp[1][0]);
printf("Semana 2 de Fevereiro: %.2f\n", matrizTemp[1][1]);
printf("Semana 3 de Fevereiro: %.2f\n", matrizTemp[1][2]);
printf("Semana 4 de Fevereiro: %.2f\n", matrizTemp[1][3]);
Como as temperaturas das semanas de Janeiro estão na primeira linha da matriz, utilizamos o índice 0 na posição da linha e variamos as posições da coluna de 0 até 3. Do mesmo modo acessamos as posições das temperaturas de Fevereiro.
Usando Estruturas de Repetição
Repare que no código acima, o conando printf se repete mudando apenas os índices da matriz que serão acessados. Podemos reduzir a quantidade de printf usando um laço For. Faça os passos abaixo:
- Declare duas variáveis inteiras, uma referente ao índice da linha e outra referente ao índice da coluna:
int i, j;
- Começando pela coluna, substitua as linhas que contém os printf pelo código abaixo e execute:
printf("-----------TEMPERATURAS REGISTRADAS EM JANEIRO E FEVEREIRO---------------\n");
printf("-----JANEIRO-----\n");
for (j = 0; j < 4; j++)
{
printf("Semana %d de Janeiro: %.2f\n", j, matrizTemp[0][j]);
}
printf("------FEVEREIRO------\n");
for (j = 0; j < 4; j++)
{
printf("Semana 1 de Janeiro: %.2f\n", j, matrizTemp[1][j]);
}
Repare que substuímos 4 printf para cada mês por apenas 1 utilizando um laço for e a variável j para servir como índice das colunas:
matriz[0][j] e matriz[1][j]
Repare também que o laço For se repete duas vezes. Existe um For para cada linha da matriz. Desse modo podemos colocar o For que controla as colunas dentro outro For que irá controlar as linhas. Substitua o código acima pelo seguinte código:
printf("-----------TEMPERATURAS REGISTRADAS EM JANEIRO E FEVEREIRO---------------\n");
for (i = 0; i< 2; i++){
for (j = 0; j < 4; j++)
{
printf("Semana %d do mês %d: %.2f\n", j + 1, i + 1, matrizTemp[i][j]);
}
}
Podemos traduzir o código acima na seguinte frase:
Repare que o For mais externo controla movimentação nas linhas da matriz e o For mais interno controla a movimentação das colunas. A figura abaixo ilustra as partes do código acima.
Entrada de Dados
Para fazer a entrada de dados, utilizamos uma estrutura parecida com a que usamos para imprimir o conteúdo da matriz. Adicione o código abaixo logo após a declaração das variáveis:
for (i = 0; i< 2; i++){
printf("Temperaturas do més %d: \n", i + 1); //Apresenta o índice do mês na tela
for (j = 0; j < 4; j++)
{
printf(" Informe a temperatura média da semana %d: ", j + 1); // mostra a semana
scanf("%f", &matrizTemp[i][j]); //armazena a informação na matriz posição i,j
}
}
Remova os valores da inicialização da variável matrizTemp e execute o código.