Vetores multidimensionais, ou Matrizes: o que são e para quê servem
Nos exemplos passados, sobre vetores, o portal CProgressivo vinha usando somente um tipo de vetor: vetores unidimensionais.
Nossos vetores, ou arrays, tinham uma linha e várias
colunas.
Seja ‘n’ o número de colunas, nossos vetores eram
matrizes 1 x n.
Sim, uma linha de elementos também é uma matriz.
Vamos agora aprender para que servem e como trabalhar com vetores
de mais de uma linha.
Para isso, vamos voltar ao exemplo do colégio, onde declaramos um
vetor para armazenar as notas de um aluno.
Na escola, esse aluno tem várias matérias:
Matemáticas, Física, Química, Biologia etc.
Vamos supor que existam 5 provas ao longo do ano,
para cada matéria.
Poderíamos representar as notas de cada aluno da
seguinte maneira:
float notasMatematica[5];
float notasFisica[5];
float notasQuimica[5];
Como declarar e trabalhar com Matrizes em C
Existe, porém, uma maneira bem mais fácil, lógica e
organizada de trabalhar com vários vetores. Quando nós falarmos de vetor, lembre
de uma linha com vários elementos.
Pois bem, uma maneira melhor de ver esses vetores
de notas, seria na forma de uma tabela.
Uma linha tem as notas de Matemática, na outra as
notas de Física e assim vai.
Cada coluna representa as provas feitas: prova 1,
prova 2, ... etc.
Vamos fazer isso!
Por exemplo, vamos supor que ele tirou as seguintes
notas em Matemática (é uma matriz 1x5):
8.0
|
7.5
|
8.5
|
9.0
|
8.0
|
Agora vamos representar as notas em Física, abaixo
das de Matemática. Teremos uma matriz 2x5, ou seja, uma matriz de duas linhas e
5 colunas:
8.0
|
7.5
|
8.5
|
9.0
|
8.0
|
8.9
|
9.0
|
8.6
|
8.4
|
8.0
|
Agora vamos representar as notas de Química, abaixo
das notas de Física.
Teremos uma matriz 3x5, ou seja, uma matriz de três
linhas e 5 colunas:
8.0
|
7.5
|
8.5
|
9.0
|
8.0
|
8.9
|
9.0
|
8.6
|
8.4
|
8.0
|
6.8
|
7.1
|
7.0
|
7.6
|
6.5
|
Ok, agora vamos partir para a programação e ver
como declarar e passar isso pra linguagem C.
Para declarar a matriz 2x5, fazemos:
float notas[2][5];
Note que temos duas linhas: notas[0][] e
notas[1][], e em cada linha dessa temos 5 elementos.
Ou seja, é uma matriz de duas linhas e cinco
colunas.
Sempre o primeiro número é a linha e o segundo é a coluna.
Para declarar matrizes e inicializar, devemos
colocar cada linha entre chaves {}, e separar elas por vírgulas, veja:
float notas[2][5]
= { {8.0, 7.5, 8.5, 9.0, 8.0 }, {8.9, 9.0, 8.6, 8.4, 8.0 } };
Uma maneira mais simples de ver essas linhas e
colunas, como tabela, é da seguinte maneira:
float notas[2][5]
= { {8.0, 7.5, 8.5, 9.0, 8.0 },
{8.9, 9.0,
8.6, 8.4, 8.0 } };
Para declarar a matriz 3x5, fazemos::
float notas[3][5];
Veja como fica nossa matriz, ou tabela, declarada e
inicializada:
float notas[3][5] = { {8.0, 7.5, 8.5, 9.0, 8.0
}, {8.9, 9.0, 8.6, 8.4, 8.0 }, {6.8, 7.1, 7.0, 7.6, 6.5 } };
De uma maneira mais fácil de entender:
float notas[3][5] = { {8.0, 7.5, 8.5, 9.0, 8.0
},
{8.9, 9.0, 8.6, 8.4, 8.0 },
{6.8, 7.1, 7.0,
7.6, 6.5 } };
Note que notas[0] se refere ao vetor de notas de
Matemática.
Note que notas[1] se refere ao vetor de notas de
Física.
Note que notas[2] se refere ao vetor de notas de
Química.
Por exemplo: qual foi a quarta nota de Física do
aluno?
Ora, o vetor de Física é notas[1], e a quarta nota
é o elemento [3] desse vetor.
Então a quarta nota de Física do aluno está armazenada
em: notas[1][3], que é 8.4
Generalizando, para declarar uma matriz de ‘linha’
linhas e de ‘coluna’ colunas, fazemos:
tipo nome[linha][coluna];
Para acessar o elemento da i-ésima linha e de
j-ésima coluna, acessamos pela variável:
nome[i][j];
É uma variável como outra qualquer em linguagem de
programação C.
Podemos somar, incrementar, zerar etc.
Bom, agora a apostila C Progressivo sai da teoria para, como de
costume, ir para a prática com exemplos resolvidos e comentados.
Exemplo de código C: Criar e exibir uma matriz 3x3
Crie um aplicativo em C que peça ao usuário para preencher uma matriz
3x3 com valores inteiros e depois exiba essa matriz.
A grande novidade, e importância, nesse tipo de aplicativo são os laços
for aninhados, ou seja, um dentro do outro, e do uso do #define, para tratar da constante DIM, que representa a dimensão da matriz.
É importante, como foi explicado no artigo passado, você usar #define ou const para trabalhar com constantes em C.
Primeiro criamos um laço que vai percorrer todas as linhas da matriz.
Podemos, e devemos, ver cada linha como um vetor de 3 elementos.
Dentro de cada linha, temos que percorrer cada elemento do do vetor e
fornecer seu valor. Fazemos isso através de outro laço for, que ficará
responsável pelas 'colunas', formando nossos laços aninhados.
Para imprimir, o esquema é exatamente o mesmo. Imprimimos linha por
linha, e em cada linha, imprimimos coluna por coluna.
#include <stdio.h> #define DIM 3 // Curso C Progressivo: www.cprogessivo.net // O melhor curso de C! Online e gratuito! // Artigos, apostilas, tutoriais e
// vídeo-aulas sobre a linguagem de programação C! int main() { int matriz[DIM][DIM]; int linha, coluna; //escrevendo na Matriz for(linha = 0 ; linha < DIM ; linha++) for(coluna = 0 ; coluna < DIM ; coluna++) { printf("Elemento [%d][%d]: ", linha+1, coluna+1); scanf("%d", &matriz[linha][coluna]); } // imprimindo a matriz na tela for(linha = 0 ; linha < DIM ; linha++) { for(coluna = 0 ; coluna < DIM ; coluna++) printf("%3d", matriz[linha][coluna]); printf("\n"); //após cada linha ser impressa, um salto de linha } }
Exemplo 2: Como calcular o traço de uma matriz em C
Use o programa feito no exemplo anterior para calcular o traço de
uma matriz.
Lembrando que o traço de uma matriz é a soma dos elementos da
diagonal principal.
Os elementos das diagonal principal são os que tem índice da linha igual ao índice da coluna:
matriz[0][0], matriz[1][1] e matriz[2][2].
Aproveitamos o laço for das linhas para calcular a soma desses elementos:
matriz[linha][linha]
Visto que a variável 'linha', assim como a 'coluna', vão de 0 até 2.
Logo, nosso código C fica:
#include <stdio.h> #define DIM 3 // Curso C Progressivo: www.cprogessivo.net // O melhor curso de C, online e gratuito // Artigos, apostilas, tutoriais e // vídeo-aulas sobre a linguagem de programação C int main() { int matriz[DIM][DIM]; int linha, coluna, traco = 0; //escrevendo na Matriz for(linha = 0 ; linha < DIM ; linha++) for(coluna = 0 ; coluna < DIM ; coluna++) { printf("Elemento [%d][%d]: ", linha+1, coluna+1); scanf("%d", &matriz[linha][coluna]); } // imprimindo a matriz na tela for(linha = 0 ; linha < DIM ; linha++) { for(coluna = 0 ; coluna < DIM ; coluna++) printf("%3d", matriz[linha][coluna]); traco += matriz[linha][linha]; printf("\n"); //após cada linha ser impressa, um salto de linha } printf("\nTraco da matriz: %d\n", traco); }
24 comentários:
Meu nome é Aléx, sou estudante de sistemas, e esse tutorial me ajudou esclarecer muitas dúvidas, fico muito grato a todos os responsáveis por esse projeto.
Sucesso.
Excelente tutorial!!!!
Eu tinha certas duvidas quanto a como fazer a matriz aparecer ao usuario......... vlw!!!!
Parabéns pela iniciativa.
Obrigado.
Olá, gostei do tutorial e queria Parabenizar pela iniciativa. Só que a gente esta aprendendo a fazer exercícios com matriz sem usar constante ou define... Entao na hora de declarar a matriz a gente tem que colocar int matriz[3][3] por exemplo, e pra mostrar uma matriz preenchida desse modo, o que colocar no lugar do elemento "%3d" que foi colocado nesse exemplo?
Olá Gisa,
Como assim mostrar uma matriz preenchida?
O código mostrado exibe toda a matriz.
É preciso exibir elemento por elemento da matriz.
Como ela é uma matriz de inteiros, usamos o %d pra exibir esses números.
Colocamos %3d para que cada número ocupe o espaço de 3 casas, deixando a exibição da matriz bem alinhada.
Muitos Parabéns pelo excelente site.
Sou estudante universitário e é uma grande ajuda
esta sendo optmo fazer parte desta turma
Fiquei com uma dúvida, e se na matriz ao invés de números, eu quisesse que fossem inseridas palavras? o que deveria mudar no código?
ola meu nome é salim e sou muito grato ao pessoal k desemvolveu esse site , assim como eu muitos apaixonados pela informatica tem tirado um bom proveito desse site, tudo que ja aprende foi graças ao C PRGSSV.
Dessa forma deixo o meu contributo publicando um dos exercicios ja feitos mas com alguns detales acrescentado ....
#include
#include
#define TRES 3
int main() {
int numero[TRES][TRES];
int i,j;
for(i=0;i<TRES;i++){
for(j=0;j<TRES;j++){
printf("posicoes [%d][%d]\n",i+1,j+1);
scanf("%d",&numero[i][j]);
}
}
for(i=0;i<TRES;i++){
for(j=0;j<TRES;j++)
printf("linha%d=%d\t coluna%d=%d\t",i+1,numero[i][j],j+1,numero[i][j]);
}
system("pause");
}
Boa noite a todos, em primeiro lugar gostaria de parabenizar pelo excelente site e pelas maravilhosas aulas, tenho aprendido muito no site.
Tenho uma pergunta que me deixou confuso no código, quando entramos nos laços for() e efetuamos a soma da variável int traco, notei que ela estava efetuando a mesma somas três vezes na mesma posição da matriz, queria saber se ficaria correto efetuarmos um novo laço for() para com a variavel linha para que a variável int traco possa ser preenchida corretamente com a soma apenas uma vez de cada posição da matriz. Ex.:
for(linha=0;linha<DIM;linha++)
{
traco+=matriz[linha][linha];
}
printf("%d",traco);
Na Linha de adicionar a matriz , está sendo adicionado no primeiro elemento da la linha posterior o mesmo da última coluna da primeira linha
ex:
v[0][1] = 5
e v[1][0] = 5 , também , alguém poderia me dizer o por que?
Elabore um programa, em C, que leia uma frase e conte o número de vogais existentes,
tanto maiúsculas como minúsculas
ajudem me
Não entendi o que faz o operador "+=" no calculo da soma da linha diagonal principal. Em "traco += matriz[linha][coluna];". Nunca vi dessa forma... Alguém pode me explicar?
Me ajudem por favor: Criar um programa para apresentar em tela uma tabela trigonométrica contendo o seno, cosseno e tangente dos ângulos: 30º, 45º e 60º
Tem um erro na nota... Esta [1] [3], e seria [1] [4].
Cara, toda essa apostila está me ajudando muito! Sou estudando de Eng. Elétrica e programação estava sendo muito difícil pra mim, mas depois que comecei a estudar pelo site, melhorou muito. Parabéns pelo trabalho excelente!
Olá,sou estudante de Engenharia Elétrica, e esse material estar me ajudando muito! Obrigado!!!!
Muito bom!
//Exemplo 2: Como calcular o traço de uma matriz em C
//Use o programa feito no exemplo anterior para calcular o traço de uma matriz.
//Lembrando que o traço de uma matriz é a soma dos elementos da diagonal principal.
#include
#include
int main()
{
setlocale(LC_ALL, "Portuguese");
int row = 1, width = 1, counter_row, counter_width, traco = 0,
matrix[row][width];
printf("\t Entre com as dimensoes da matrix: [ ][ ]");
printf("\n\t Quantidade de linhas: ");
scanf("%d", &row);
printf("\t Quantidade de colunas: ");
scanf("%d", &width);
for(counter_row = 0; counter_row < row; counter_row++)
{
printf("\n");
for (counter_width = 0; counter_width < width; counter_width++)
{
printf("Entre com o elemento [%d][%d]: ", counter_row + 1, counter_width + 1 );
scanf("%d", &matrix[counter_row][counter_width]);
}
}
for(counter_row = 0; counter_row < row; counter_row++)
{
printf("\n\t");
for (counter_width = 0; counter_width < width; counter_width++)
printf("%4d ", matrix[counter_row][counter_width]);
}
printf("\n");
for(counter_row = 0; counter_row < row; counter_row++)
for (counter_width = 0; counter_width < width; counter_width++)
{
if(counter_row == counter_width)
traco += matrix[counter_row][counter_width];
}
printf("\n \tO traço da Matrix é: %4d \n", traco);
}l.
//Exemplo 2: Como calcular o traço de uma matriz em C
//Use o programa feito no exemplo anterior para calcular o traço de uma matriz.
//Lembrando que o traço de uma matriz é a soma dos elementos da diagonal principal.
//http://www.cprogressivo.net/2013/03/Vetores-multidimensionais-Matrizes-em-C--vetor-de-vetores.html
#include
#include
int main()
{
setlocale(LC_ALL, "Portuguese");
int row, width, counter_row, counter_width, traco = 0;
printf("\t Entre com as dimensoes da matrix: [ ][ ]");
printf("\n\t Quantidade de linhas: ");
scanf("%d", &row);
printf("\t Quantidade de colunas: ");
scanf("%d", &width);
int matrix[row][width];
for(counter_row = 0; counter_row < row; counter_row++)
{
printf("\n");
for (counter_width = 0; counter_width < width; counter_width++)
{
printf("Entre com o elemento [%d][%d]: ", counter_row + 1, counter_width + 1 );
scanf("%d", &matrix[counter_row][counter_width]);
}
}
for(counter_row = 0; counter_row < row; counter_row++)
{
printf("\n\t");
traco += matrix[counter_row][counter_row];
for (counter_width = 0; counter_width < width; counter_width++)
printf("%4d ", matrix[counter_row][counter_width]);
}
printf("\n");
// for(counter_row = 0; counter_row < row; counter_row++)
// for (counter_width = 0; counter_width < width; counter_width++)
// {
// if(counter_row == counter_width)
// traco += matrix[counter_row][counter_width];
//
// }
printf("\n \tO traço da Matrix é: %4d \n", traco);
}
podem me ajudar com esses:Desenvolva um programa em linguagem C para resolver os seguintes problemas com matrizes
quadradas de dimensão “DIM” (constante):
1) Preencher os dados de uma matriz;
2) Modificar a Matriz de forma que os dados fiquem de cabeça para baixo. Exemplo (3x3).
3)4) Rotacione a Matriz para a esquerda. Exemplo (3x3)
Obrigado do fundo do meu coração pois entendi perfeitamente como funciona e abriu minha mente para diversas aplicações no qual matriz pode ser utilizada!! Excelente trabalho!
Parabéns pela iniciativa. Seus tutoriais são muito bons, muito didáticos e diretos, muito obrigado por disponibilizar este conteúdo.
Muito obrigado pelo tutorial!
Postar um comentário