16

Click here to load reader

Matrizes Em Linguagem C

Embed Size (px)

Citation preview

Page 1: Matrizes Em Linguagem C

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:

Page 2: Matrizes Em Linguagem C

 

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");

 

Page 3: Matrizes Em Linguagem C

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.

Page 4: Matrizes Em Linguagem C

 

#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

Page 5: Matrizes Em Linguagem C

 

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);

Page 6: Matrizes Em Linguagem C

 

} /*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

Page 7: Matrizes Em Linguagem C

 

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)

{

Page 8: Matrizes Em Linguagem C

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

Page 9: Matrizes Em Linguagem C

 

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!!!

 

Page 10: Matrizes Em Linguagem 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");

Page 11: Matrizes Em Linguagem C

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

Page 12: Matrizes Em Linguagem C

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 };

Page 13: Matrizes Em Linguagem C

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.