
Em programação, as matrizes (vetores ou arrays) são estrutura de dados n-dimensionais: variáveis compostas homogêneas. Possuem o mesmo conceito da matemática e são usadas para gerar e manipular tabelas diretamente na memória RAM. Especificamente na linguagem C, as matrizes são tratadas ligeiramente diferentes, pois, como já sabemos, os índices iniciam em zero.
O mais comum é trabalhar com matrizes bi-dimensionais, mas podemos criar matrizes com quaisquer dimensão. Uma matriz bi-dimensional é uma tabela (linha X coluna), tri-dimensional é um cubo (linha X coluna X profundidade), na quadri-dimensional tem-se a dimensão temporal, e assim por diante.
DECLARAÇÃO DE MATRIZES:
/* matriz de nomes de até 50 caracteres,
* para uma turma de 30 alunos.
*/
char alunos[30][51];
/* matriz de notas para uma turma de
* 30 alunos. Cada aluno possui 5 notas.
*/
float notas[30][5];
LEITURA DE MATRIZES:
No caso de uma matriz de strings, não definimos em qual coluna iremos ler, pois os nomes serão armazenados no início da matriz e não sabemos quantos caracteres o nome possui. Portanto, indicamos apenas a linha.
Vejamos:
int i, j; //os índices para linha e coluna
for(i = 0; i < 30; i++) {
printf("Digite o nome do aluno %d:", i + 1);
scanf("%s", &alunos[i][]);
}
Normalmente iremos realizar essa tarefa, repetindo tantas vezes quanto for necessário e, precisamos percorrer todos os elementos da matriz.
No caso de uma matriz de números, precisaremos de uma estrutura de repetição para percorrer as linhas e uma outra estrutura de repetição, subordinada à primeira, para percorrer as colunas.
Vejamos:
int i, j; //os índices para linha e coluna
for(i = 0; i < 30; i++) {
for(j = 0; j < 5; j++) {
printf("Digite a nota %d", i + );
printf(" do aluno %s: ",alunos[i][]);
scanf("%f", ¬as[i][j]);
}
EXIBIÇÃO DE MATRIZES:
Nada de novo. São as mesmas estruturas de repetição. O que muda é o que já abordei aí em cima: para exibir um nome, precisamos apenas localizar a linha aonde esse nome se encontra e, no caso de números, precisamos saber a linha e a coluna.
Vejamos:
for(i = 0; i < 30; i++) {
printf("\nNotas do aluno %s: ", alunos[i][]);
for(j = 0; j < 5; j++) {
printf("\n Nota %d: %.2f", i + 1, notas[i][j]);
}
}
O ideal em um programa é definir constantes para linha e coluna, pois assim teremos maior organização e facilidade na manutenção. Procure sempre usar constantes nestes casos.
#define LIN 30
#define COL 5
PASSAGEM DE PARÂMETROS:
Ao enviar uma matriz para uma função, sabemos que a passagem será por referência e, deste modo, qualquer alteração no parâmetro formal, implicará em alteração na matriz original. Vejamos que, ao definir uma função para receber uma matriz, não especificamos o número de linhas, mas sim o de colunas e, ao enviarmos a matriz para a função, passamos apenas seu nome, sem os colchetes. Coisas da linguagem C... ;-)
Protótipos:
void leMatriz(int m[][COL]);
void imprimeMatrizes(int m1[][COL], char m2[][COL]);
Chamando as funções:
leMatriz(notas);
imprimeMatrizes(notas, alunos);
exemplos para você testar
Gente, isso é o básico. Agora é hora de fazer os exercícios da aula 10.
Ir para a próxima aula.
Retornar ao índice do curso.
2 comentários:
Oi, Eu estou estudando estruturas de dados e me ajudou muito.
Opa, valeu pelo incentivo.
Postar um comentário