Você está na página 1de 3

Faculdade de Computao Programao Procedimental Aula Prtica: Vetores e Matrizes

1) Vetores
Um vetor um conjunto finito e ordenado de elementos homogneos. O conjunto ordenado pois os elementos so organizados de forma que exista um elemento zero, um primeiro elemento, um segundo e assim por diante. A declarao em C especifica um vetor de 100 inteiros:
int a[100];

As duas operaes bsicas para acesso aos elementos de um vetor so a extrao e o armazenamento, e ambas utilizam um ndice para localizar uma posio no vetor. O trecho de programa abaixo declara, inicializa um vetor com 0 em todas as posies, e imprime o vetor:
#include <stdio.h> int main(){ int i, a[100]; for (i=0;i<100;a[i++]=0); for (i=0;i<100;i++) printf("%d ",a[i]); } // inicializao do vetor // impresso do vetor

Um vetor unidimensional normalmente utilizado para manter uma grande quantidade de itens na memria, e para referenciar todos os itens de maneira uniforme. No exemplo acima, a declarao a[100] indica que so reservadas 100 posies sucessivas de memria, cada uma com tamanho tam para armazenar um nmero inteiro. O endereo da primeira dessas posies chamado endereo_base. Assim, uma referncia posio a[i] devolve o elemento em endereo_base + (tam * i). 2) Vetores como parmetros Todo parmetro de uma funo em C necessita ser declarado dentro da funo. Considerando os vetores na linguagem C, a faixa de parmetros de um vetor especificada somente no programa chamador. Isso acontece porque no h nova alocao de memria para um parmetro vetor. Em vez disso, o parmetro refere-se ao vetor original do programa chamador. Como exemplo, seja a funo para o clculo da mdia dos elementos de um vetor:
float media(float a[], int tam){ int i; float soma=0; for (i=0;i<tam;i++){ soma += a[i]; } return (soma/tam); } int main(){ float a[100]; ... printf(Media = %f, media(a,100)); }

Como um vetor em C implementado como um ponteiro, os parmetros vetores so passados por referncia em vez de por valor. Assim, o contedo de um vetor no necessita ser copiado quando passado como parmetro, apenas passado o endereo base do vetor. A passagem de um vetor por referncia mais eficiente em termos de tempo e espao, pois o tempo necessrio para copiar um vetor em outro, ao chamar uma funo eliminado. De forma similar, o espao na memria para copiar um segundo vetor reduzido uma nica varivel ponteiro.

2) Matrizes
O tipo de componentes de um vetor pode ser outro vetor. Por exemplo, podemos definir:
float a[4][3];

para representar a matriz:

Um elemento dessa matriz pode ser obtido usando-se dois ndices: um nmero de linha e um nmero de coluna. -----------------------------------------------------------------------------------------

Exerccios em linguagem C:
1) Faa um programa para gerar um vetor de inteiros randmicos com tamanho M. Implemente as seguintes funes para: exibir os valores do vetor; encontrar o maior valor deste vetor; encontrar os dois maiores valores do vetor, com apenas uma passagem; calcular a media dos valores do vetor; verificar se existem dois valores iguais no vetor retornando verdadeiro ou falso. 2) Faa uma funo para trocar de posio dois elementos de um vetor usando uma varivel auxiliar. 3) Faa um programa para preencher uma matriz 5x5, em que cada elemento seja a soma dos ndices da linha com a coluna. Faa uma funo para imprimir a matriz e outra funo para exibir a localizao (linha e a coluna) do elemento de maior valor. 4) Faa um programa para preencher aleatoriamente com valores entre 0 e 50 duas matrizes 4 x 4. Crie uma terceira matriz 4 x 4 com os maiores elementos entre as duas primeiras. 5) Faa um programa que preencha uma matriz 10 x 10 e busque um determinado elemento na matriz, imprimindo as posies em que o elemento foi encontrado. 6) Faa uma funo que recebe uma matriz NxN de float, e devolva a matriz transposta (trocando linhas por colunas) a partir do uso de uma varivel auxiliar.

/* Soluo do Exerccio 5 Buscar um determinado elemento numa matriz 10x10 */ #include <stdio.h> #include <stdlib.h> #include <time.h> void preenche(float mat[10][10]); void imprime(float mat[10][10]); void busca(float mat[][3], float v); int main(){ float m[10][10]; float v; preenche(m); imprime(m); printf("\nDigite o valor a ser procurado: "); scanf("%f",&v); busca(m,v); printf("\n\n"); system("pause"); } void preenche(float mat[10][10]){ int i,j; srand(time(NULL)); for (i=0;i<10;i++){ for (j=0;j<10;j++){ mat[i][j]=(float)(rand()%11); } } } void imprime(float mat[10][10]){ int i,j; for (i=0;i<10;i++){ for (j=0;j<10;j++){ printf("\t%f",mat[i][j]); } printf("\n"); } } void busca(float mat[10][10], float v){ int i,j; for (i=0;i<10;i++){ for (j=0;j<10;j++){ if (mat[i][j] == v) printf("\nLinha=%d, Coluna=%d, Valor=%f",i,j,mat[i][j]); } } }