Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
c
c
c
c
c
c
c
p
Linguagem de Programação
³Matrizes e Vetores´
Salvador/Bahia
2010
c
c
c
u a
u Ñ
c
c
Ô c
c
u a
São matrizes de uma única dimensão. Essas matrizes também são chamadas de vetores.
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:
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.
vetor_exemplo[9]={0,1,2,3,4,5,6,7,8,9};
#include<stdio.h>
main() {
vetSoma[5]; /*declaração do vetor vetSoma que vai guardar o resutado da soma dos dois
vetores(vet1 e vet2).*/
x;
printf("vet1={1,2,3,4,5}\n");
printf("vet2={6,1,2,2,5}\n");
printf("\n");
}/*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}
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>
main() {
c1 = 'a';
printf("\n");
printf("Para trabalhar com uma string deve ser declarado um vetor do tipo char");
}/*fim do programa*/
Saída do programa:
a
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
programaabaixo:
#include<stdio.h>
main() {
mat[2][2];
det;
x,y;
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*/
}/*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.
mat[2][2];
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
Mat[1][1]=4
Mat[1][2]=-3
Mat[2][1]=6
Mat[2][2]=-1
a
A linguagem c permite também utilizar matriz de três ou mais dimensões, porém não é
frequentemente usada, pois requer uma quantidade grande de memória e os acessos aos
seus elementos são mais lentos.
a
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>
main() {
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).
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>
main() {
mat1[2][2]={4,5,-2,1};
x,y;
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");
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
mat2[0][0]=4
mat2[0][1]=5
mat2[1][0]=-2
mat2[1][1]=1
p
Conclui-se que as matrizes podem ser desde unidimensionais até multidimensionais e que
seus tamanhos não necessitam serem obrigatoriamente especificados.
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
c
cc
Em muitas aplicações queremos trabalhar com conjuntos de dados que são semelhantes em
tipo. Por exemplo, o conjunto das alturas dos alunos de uma turma, ou um conjunto de seus
nomes. Nestes casos, seria conveniente poder colocar estas informações sob um mesmo
conjunto, e poder referenciar cada dado individual deste conjunto por um número índice. Em
programação, este tipo de estrutura de dados é chamado de vetor (ou array, em inglês) ou,
de maneira mais formal estruturas de dados homogêneas.
nnota
08.4
16.9
24.5
34.6
47.2
Esta não é a única maneira de estruturar conjunto de dados. Também podemos organizar
dados sob forma de tabelas. Neste caso, cada dado é referenciado por dois índices e dizemos
que se trata de um vetor bidimensional (ou matriz).
O
tipo nome[tam];
onde:
tam é o tamanho do vetor, isto é, o número de elementos que o vetor pode armazenar.
Exemplo: Veja as declarações seguintes:
Cada elemento do vetor é referenciado pelo nome do vetor seguido de um índice inteiro. O
primeiro elemento do vetor tem índice 0 e o último tem índice tam-1. O índice de um vetor
deve ser inteiro.
#define MAX 5
int i = 7;
valor[1] = 6.645;
valor[MAX] = 3.867;
valor[i] = 7.645;
valor[random(MAX)] = 2.768;
Assim como podemos inicializar variáveis (por exemplo: int j = 3;), podemos inicializar
vetores.
lista de valores é uma lista, separada por vírgulas, dos valores de cada elemento do vetor.
Exemplo: Veja as inicializações seguintes. Observe que a inicialização de nota gera o vetor
do exemplo do início desta seção.
intcor_menu[4] = {BLUE,YELLOW,GREEN,GRAY};ou
intcor_menu[4];
cor_menu[0] = BLUE;
cor_menu[1] = YELLOW;
cor_menu[2] = GREEN;
cor_menu[3] = GRAY;
ü
Observe que acessar um segmento fora do espaço destinado a um vetor pode destruir
informações reservadas de outras variáveis. Estes erros são difíceis de detectar, pois o
compilador não gera nenhuma mensagem de erro... A solução mais adequada é sempre
avaliar os limites de um vetor antes de manipulá-lo.
A princípio este fato poderia parecer um defeito da linguagem, mas na verdade trata-se de
um recurso muito poderoso do C. Poder manipular sem restrições todos os segmentos de
memória é uma flexibilidade apreciada pelos programadores.
Programa Exemplo: O arquivo e0702.cpp contém um programa que mostra o acesso de
elementos dentro e fora de um vetor. Note que o compilador não acusa nenhum erro de
sintaxe!
Tamanho parametrizado
Na linguagem C não é possível, usando a sintaxe descrita acima, declarar um vetor com
tamanho variável.
...
int num;
puts("Quantos números?");
scanf("%d´, &num);
float valor[num]; // declaração de vetor (errado!)...
Mas é possível declarar um vetor com tamanho parametrizado: usando uma constante
simbólica. Declaramos uma constante simbólica (parâmetro) com a diretiva #define no
cabeçalho do programa e depois declaramos o vetor com esta constante simbólica como
tamanho do vetor.
Deste modo podemos alterar o número de elementos do vetor antes de qualquer compilação
do programa. Esta é uma maneira simples de administrar o espaço de memória usado pelo
programa, e também testar os limites de um vetor.
Vetores, assim como variáveis, podem ser usados como argumentos de funções. Vejamos
como se declara uma função que recebe um vetor e como se passa um vetor para uma
função.
nome_da_função(nome_do_vetor)
onde:
tipo_funçãonome_função(tipo_vetornome_vetor[]){...
onde:
tipo_função é o tipo de retorno da função.
nome_vetor é o nome do vetor. Observe que depois do nome do vetor temos um índice vazio
[] para indicar que estamos recebendo um vetor.
Na declaração da função:
Na chamada da função:
voidmain(){
Atenção: Ao contrário das variáveis comuns, o conteúdo de um vetor pode ser modificado
pela função chamada. Isto significa que podemos passar um vetor para uma função e alterar
os valores de seus elementos. Isto ocorre porque a passagem de vetores para funções é feita
de modo especial dito Passagem por endereço. Portanto devemos ter cuidado ao
manipularmos os elementos de um vetor dentro de uma função para não modificá-los por
descuido.
a
Vetores podem ter mais de uma dimensão, isto é, mais de um índice de referência. Podemos
ter vetores de duas, três, ou mais dimensões. Podemos entender um vetor de duas
dimensões (por exemplo) associando-o aos dados de uma tabela.
Exemplo: Um vetor bidimensional pode ser visualizado através de uma tabela.
Nota 0 1 2
tipo nome[tam_1][tam_2]...[tam_N]={{lista},{lista},...{lista}};
onde:
Neste exemplo, nota é um vetor duas dimensões ([][]). Este vetor é composto de 5 vetores
de 3 elementos cada. tabela é vetor de três dimensões ([][][]). Este vetor é composto de 2
vetores de 3 sub-vetores de 2 elementos cada.
Observe que depois do nome do vetor temos os índices com contendo os tamanhos de cada
dimensão do vetor.
Na declaração da função:
Na chamada da função:
voidmain(){
Do mesmo modo que vetores unidimensionais, os vetores multidimensionais podem ter seus
elementos modificados pela função chamada.
Embora uma tabela não seja a única maneira de visualizar um vetor bidimensional, podemos
entender o primeiro índice do vetor como o índice de linhas da tabela e o segundo índice do
vetor como índice das colunas.