Você está na página 1de 13

Compreendendo as Matrizes

Muitas vezes em programas, é necessário que uma variável contenha muitos


valores. Por exemplo, a variável nota pode controlar as notas obtidas por 100 alunos em
um exame. Da mesma maneira, a variável salários poderia controlar os salários de cada
funcionário em uma companhia. Uma matriz é uma estrutura de dados que pode
armazenar múltiplos valores do mesmo tipo. Por exemplo, pode-se criar uma matriz que
possa conter 100 valores do tipo int e uma Segunda matriz com 25 valores do tipo float.
Todo valor que você atribui a uma matriz precisa ser do mesmo tipo que o tipo
da matriz.

Definição de Matrizes em Linguagem C

As matrizes em geral são caracterizadas por se tratarem de uma única variável de um


determinado tamanho que guarda varias informações do mesmo tipo. Essas informações
são gravadas na memória seqüencialmente e são referenciadas através de índices. As
matrizes podem ser tanto unidimensionais (vetores) como multidimensionais.

Matrizes unidimensionais

São matrizes de uma única dimensão. Essas matrizes também são chamadas de
vetores. A declaração de vetores em C deve obedecer a seguinte sintaxe:

Tipo nome_vetor[tamanho];

O tipo deve ser especificado conforme a tabela 2 do primeiro artigo. E o


tamanho representa a quantidade de elementos que esta matriz irá conter. É importante
dizer que na linguagem c as matrizes começam pelo índice 0 que guarda o primeiro
elemento da matriz. Para entender melhor, considere que seja necessário declarar um
vetor do tipo inteiro que contenha 10 elementos. Isto é feito da seguinte forma:

int vetor_exemplo[9];

Isso por que a matriz “vetor_exemplo” vai de 0 a 9, ou seja, contém 10


elementos. Também é possível inicializar o vetor no momento de sua declaração. Para
isso veja a sintaxe abaixo:
 

Tipo nome_vetor[tamanho]={lista_de_valores};

Sendo que todos os elementos da lista de valores devem ser separados por
virgula e serem todas do mesmo tipo de dados especificado. A seguir temos a
declaração do “vetor_exemplo” com os valores atribuídos.

int vetor_exemplo[9]={0,1,2,3,4,5,6,7,8,9};

Exemplo de um programa completo utilizando vetores e outros conceitos


estudados até o momento.

#include<stdio.h>

void main()

int vet1[5]={1,2,3,4,5}; /*declaração e inicialização do vetor vet1*/

int vet2[5]={6,1,2,2,5}; /*declaração e inicialização do vetor vet2*/

int vetSoma[5]; /*declaração do vetor vetSoma que vai guardar o resutado da


soma dos dois vetores(vet1 e vet2).*/

int x;

printf("Este programa soma os dois vetores abaixo:\n");

printf("vet1={1,2,3,4,5}\n");

printf("vet2={6,1,2,2,5}\n");

printf("\n");

printf("vetor resultante da soma:\n");

 
for(x=0; x<5; x++)

  vetSoma[x]=vet1[x]+vet2[x]; /*soma os valores*/

  printf("vetSoma[%d]:%d\n",x,vetSoma[x]); /*exibe na tela*/

} /*fim do for*/

} /*fim do programa*/

O programa acima soma dois vetores (vet1 e vet2) e exibe sua resposta na tela.
O objetivo deste exemplo é mostrar como declarar e inicializar um vetor. Veja a seguir a
saída do programa:

Este programa soma os dois vetores abaixo:

vet1={1,2,3,4,5}

vet2={6,1,2,2,5}

vetor resultante da soma:

vetSoma[0]:7

vetSoma[1]:3

vetSoma[2]:5

vetSoma[3]:6

vetSoma[4]:10

Os vetores são muito usados para criar uma string de caracteres, pois em C não
existe nenhum tipo de dados para definir uma string.A declaração de um vetor contendo
uma string sempre deve ser maior que o número de caracteres, pois o compilador
acrescenta automaticamente no final da string um espaço nulo que indica o seu término.
Este segundo exemplo é muito simples, mostra apenas como podem ser feitas a
declaração e inicialização de um vetor de string.
 

#include<stdio.h>

void main()

char c1 = 'a';

char vet1[30]="Aprendendo a mexer com string\n";

/*Imprimindo os dados na tela*/

printf("O tipo de dado char guarda apenas um caractere\n");

printf("A variavel c1 do tipo char contem o caractere: %c\n",c1);

printf("\n");

printf("Para trabalhar com uma string deve ser declarado um vetor do tipo
char");

printf("\nO vetor do tipo char contem a string: %s",vet1);

} /*fim do programa*/

Saída do programa:

O tipo de dado char guarda apenas um caractere

A variavel c1 do tipo char contem o caractere: a

Para trabalhar com uma string deve ser declarado um vetor do tipo char

O vetor do tipo char contem a string: Aprendendo a mexer com string

Matrizes Bidimensionais
 

São matrizes linha-coluna, onde o primeiro índice indica a linha e o segundo a coluna.
Esse tipo de matriz é considerado o caso mais simples de matrizes multidimensionais.
Veja o programa abaixo:

#include<stdio.h>

void main()

int mat[2][2];

float det;

int x,y;

printf("Este programa calcula a determinante de uma matriz quadrada de ordem 2");

printf("\n\nEntre com os valores a da matriz:\n");

for(x=0;x<2;x++)

for(y=0;y<2;y++)

printf("mat[%d][%d]=",x+1,y+1);

scanf("%d",&mat[x][y]);

} /*fim do for*/

} /*fim do for*/

det=mat[0][0]*mat[1][1]-mat[1][0]*mat[0][1]; /*formula para calcular a determinante


*/

printf("Determinante da matriz = %f\n",det);


 

} /*fim do programa*/

Esse exemplo calcula a determinante de uma matriz de ordem 2 e através dele podemos
ver como deve ser feita a declaração de uma matriz bidimensional.

int mat[2][2];

Que a forma geral é:

tipo nome_matriz[numero_linhas][numero_colunas];

Observe na formula que calcula a determinante que os valores são acessados através de
seus índices (linhas e colunas). A seguir são apresentadas as saídas do programa,
lembrando que os valores das matrizes são definidos pelo usuário através da função
scanf que será explicada mais adiante.

Este programa calcula a determinante de uma matriz quadrada de ordem 2

Entre com os valores a da matriz:

Mat[1][1]=4

Mat[1][2]=-3

Mat[2][1]=6

Mat[2][2]=-1

Determinante da matriz = 14.0000

Matrizes multidimensionais
 

A linguagem c permite também utilizar matriz de três ou mais dimensões, porém não é
freqüentemente usada, pois requer uma quantidade grande de memória e os acessos aos
seus elementos são mais lentos. Por esses motivos este tipo de matrizes não serão
abordados com detalhes

Declaração de matrizes multidimensionais:

Tipo nome [tamanho1][tamanho2][tamanho3]....[tamanho n]

Tratando as Matrizes Multidimensionais Como Uma Dimensão


Quando for necessário trabalhar com os elementos de uma matriz
multidimensional, mas sem precisar acessar os elementos em suas posições de linha ou
coluna, as funções poderão tratar a matriz multidimensional como se ela tivesse uma
dimensão. O programa a seguir retorna a soma dos valores em uma matriz
bidimensional:
#include <stdio.h>

long soma_matriz(int matriz[], int elementos)

long soma = 0;

int i;

for (i = 0; i < elementos; i++)

soma += matriz[i];

return(soma);

void main(void)

{
int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

int b[2][10]={{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},

{11, 12, 13, 14, 15, 16, 17, 18, 19,20}};

int c[3][10]={{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},

{11, 12, 13, 14, 15, 16, 17, 18, 19, 20},

{21, 22, 23, 24, 25, 26, 27, 28, 29,30}};

printf("Soma dos elementos da primeira matriz %d\n",

soma_matriz(a, 10));

printf("Soma dos elementos da segunda matriz %d\n",

soma_matriz(b, 20));

printf("Soma dos elementos da terceira matriz %d\n",

soma_matriz(c, 30));

Matrizes multidimensionais

O uso de matrizes multidimensionais na linguagem C é simples. Sua forma geral é:

 tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN];

 Uma matriz N-dimensional funciona basicamente como outros tipos de matrizes. Basta
lembrar que o índice que varia mais rapidamente é o índice mais à direita.

Matrizes não-dimensionadas
 

As matrizes não-dimensionais são aquelas cujo tamanho não é especificado. Nesse caso
o compilador cria uma matriz grande para conter todos os seus elementos. As
declarações de matrizes unidimensionais com essa característica podem ser vista no
programa abaixo:

#include<stdio.h>

void main()

char vet1[37]="Estou aprendendo a programar em C!!!";

char vet2[]="Estou aprendendo a programar em C!!!"; /*vetor não-dimensionado*/

printf("O vetor abaixo foi declarado com o seu tamanho especificado\n");

printf("%s\n",vet1);

printf("\n");

printf("E este outro foi declarado com o seu tamanho nao especificado\n");

printf("%s\n",vet2);

Observe na saída abaixo que os vetores (vet1 e vet2) declarados de forma diferentes
obtiveram os mesmo efeitos. A diferença é que no vetor vet2 não foi especificado a
quantidades de caracteres (vetor não-dimensionado).

O vetor abaixo foi declarado com o seu tamanho especificado

Estou aprendendo a programar em C!!!

 
E este outro foi declarado com o seu tamanho nao especificado

Estou aprendendo a programar em C!!!

As matrizes multidimensionais não-dimensionadas devem ter apenas seu primeiro


índice não especificado, os outros devem ser indicados para que o compilador possa
indexar de forma correta as matrizes. Desta forma pode-se criar tabelas com diversos
tamanhos, sem a necessidade de mudar as dimensões da matriz.

#include<stdio.h>

void main()

int mat1[2][2]={4,5,-2,1};

int mat2[][2]={4,5,-2,1}; /*Matriz não-dimensionada*/

int x,y;

printf("Imprimindo a matriz mat1 cujo o tamanho foi especificado:\n");

for(x=0;x<2;x++)

for(y=0;y<2;y++)

printf("mat1[%d][%d]=%d",x,y,mat1[x][y]);

printf("\n");

} /*fim do for*/

} /*fim do for*/

printf("\n");
printf("Imprimindo a matriz mat2 cujo o tamanho nao foi especificado:\n");

for(x=0;x<2;x++)

for(y=0;y<2;y++)

printf("mat2[%d][%d]=%d",x,y,mat2[x][y]);

printf("\n");

} /*fim do for*/

} *fim do for*/ /

} /*fim do programa*/

Do mesmo modo verifica-se através da saída abaixo que tanto a matriz mat1 como a
matriz mat2, obtiveram os mesmos resultados embora tenham sido declaradas de
maneira diferente.

Imprimindo a matriz mat1 cujo o tamanho foi especificado:

mat1[0][0]=4

mat1[0][1]=5

mat1[1][0]=-2

mat1[1][1]=1

Imprimindo a matriz mat2 cujo o tamanho nao foi especificado:

mat2[0][0]=4

mat2[0][1]=5
mat2[1][0]=-2

mat2[1][1]=1

Inicialização

Podemos inicializar matrizes, assim como podemos inicializar variáveis. A forma geral
de uma matriz como inicialização é:

 tipo_da_variável nome_da_variável [tam1][tam2] ... [tamN] = {lista_de_valores};

 A lista de valores é composta por valores (do mesmo tipo da variável) separados por
vírgula. Os valores devem ser dados na ordem em que serão colocados na matriz.
Abaixo vemos alguns exemplos de inicializações de matrizes:

        float vect [6] = { 1.3, 4.5, 2.7, 4.1, 0.0, 100.1 };
        int matrx [3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
        char str [10] = { 'J', 'o', 'a', 'o', '\0' };
        char str [10] = "Joao";
        char str_vect [3][10] = { "Joao", "Maria", "Jose" };

O primeiro demonstra inicialização de vetores. O segundo exemplo demonstra a


inicialização de matrizes multidimensionais, onde matrx está sendo inicializada com 1,
2, 3 e 4 em sua primeira linha, 5, 6, 7 e 8 na segunda linha e 9, 10, 11 e 12 na última
linha. No terceiro exemplo vemos como inicializar uma string e, no quarto exemplo, um
modo mais compacto de inicializar uma string. O quinto exemplo combina as duas
técnicas para inicializar um vetor de strings. Repare que devemos incluir o ; no final da
inicialização.

Inicialização sem especificação de tamanho

Podemos, em alguns casos, inicializar matrizes das quais não sabemos o tamanho a
priori. O compilador C vai, neste caso verificar o tamanho do que você declarou e
considerar como sendo o tamanho da matriz. Isto ocorre na hora da compilação e não
poderá mais ser mudado durante o programa, sendo muito útil, por exemplo, quando
vamos inicializar uma string e não queremos contar quantos caracteres serão
necessários. Alguns exemplos:  

                char mess [] = "Linguagem C: flexibilidade e poder.";


                int matrx [][2] = { 1,2,2,4,3,6,4,8,5,10 };
No primeiro exemplo, a string mess terá tamanho 36. Repare que o artifício para realizar
a inicialização sem especificação de tamanho é não especificar o tamanho! No segundo
exemplo o valor não especificado será 5.

Você também pode gostar