21 de outubro de 2010

Algoritmo e Programação: Matrizes

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 sequencialmente 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.


Continue lendo...

#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]

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


0 comentários:

Postar um comentário

 
Design by @cleidimarviana | Bloggerized by Cleidimar Viana - Diário de Sistema