Você está na página 1de 9

Algoritmos e Estruturas de Dados

Captulo 06 Arrays

Filipe Marques

Escola Superior de Tecnologia e Gesto Instituto Politcnico de Viana do Castelo

Algoritmos e Estruturas de Dados

Arrays

Introduo
Um array um conjunto de elementos consecutivos do mesmo tipo, que podem ser acedidos individualmente a partir de um nico nome. Por exemplo, se desejarmos armazenar o volume de vendas efectuado em cada ms de uma determinada empresa, podemos declarar um array de 12 posies. Cada posio vai conter o volume mensal, correspondendo a primeira posio ao volume de vendas de Janeiro, a Segunda posio ao volume de vendas de Fevereiro, etc. Desta forma, evitamos que tenham de ser declaradas 12 variveis, sendo colocada toda a informao numa s varivel.

Declarao de Arrays
A declarao de um array com uma nica dimenso obedece seguinte sintaxe:

tipo nome_variavel [n de elementos]


O tipo corresponde ao tipo de dados de cada um dos elementos do array. O nome_variavel indica o nome pelo qual este array vai ser conhecido. O n de elementos um valor constante que indica quantos elementos tem o array. Um array pode conter elementos de qualquer tipo de dados, mas todos os elementos tm de ser do mesmo tipo definido na declarao. Por exemplo, para declarar um array de 30 inteiros:

int dados[30];
Para declarar um array de 50 reais:

float vencimentos[50];
Para identificar cada elemento do array necessrio um ndice que indique qual a sua posio no array. Assim, vencimentos[i] indica aquilo que est na posio i do array vencimentos. Por exemplo, se pretendermos declarar um array de 6 inteiros denominado comissoes:

Pgina 2

Filipe Marques

Algoritmos e Estruturas de Dados

Arrays

int comissoes[6];
comissoes[0] comissoes[1] comissoes[2] comissoes[3] comissoes[4] Comissoes[5]

Em C todos os ndices de um array com n elementos varia entre 0 e n-1, sendo cada elemento acedido atravs dos parntesis rectos. Por exemplo, colocar o valor 230 na primeira posio do array:

comissoes[0] = 230;
230
comissoes[0] comissoes[1] comissoes[2] comissoes[3] comissoes[4] Comissoes[5]

Por exemplo, para colocar na ltima posio o triplo do valor do primeiro elemento:

comissoes[5] = comissoes[0]*3;
230 690
comissoes[0] comissoes[1] comissoes[2] comissoes[3] comissoes[4] Comissoes[5]

Para colocar no terceiro elemento a soma do primeiro com o ltimo elemento:

comissoes[2] = comissoes[0] + comissoes{5];


230 920 690
comissoes[0] comissoes[1] comissoes[2] comissoes[3] comissoes[4] Comissoes[5]

Dado que os arrays comeam em 0, o n-simo elemento est sempre na posio (ou ndice) n-1. O seguinte extracto de cdigo coloca em cada posio do array o ndice respectivo.

for (i=0; i<6; i++) comissoes[i]=i;


0 1 2 3 4 5
comissoes[0] comissoes[1] comissoes[2] comissoes[3] comissoes[4] Comissoes[5]

Pgina 3

Filipe Marques

Algoritmos e Estruturas de Dados

Arrays

Inicializao Automtica de Arrays


Os arrays, tal como as variveis bsicas, quando so criados contm valores aleatrios em cada uma das suas posies. possvel inicializar automaticamente todos os elementos de um array, tal como mostrado no seguinte exemplo:

char vogal[5] = {a, e, i, o, u};


Evitando de escrever o seguinte cdigo:

char vogal[5]; vogal[0] = a; vogal[1] = e; vogal[2] = i; vogal[3] = o; vogal[4] = u;


O seguinte programa l os salrios pagos a um trabalhador durante 1 ano, guardando-os num array. De seguida mostra os valores mensais e o total anual.

#include <stdio.h> main() { float sal[12]; float total; int i; /* Leitura dos valores*/ for (i=0; i<12 ; i++) { printf("Introd. o salrio do mes %d:",i+1); scanf("%f",&sal[i]); } /* Mostrar os valores Mensais e calcular o total */ puts(" Mes Valor "); for (i=0, total=0.0 ; i<12 ; i++) { printf(" %3d %9.2f\n",i+1,sal[i]);
Pgina 4 Filipe Marques

Algoritmos e Estruturas de Dados

Arrays

total+=sal[i]; } printf("Total Anual: %9.2f\n",total); }


De salientar que quando solicitado o ms 1 temos que o armazenar na posio 0. A declarao e inicializao de um array pode ser efectuada sem indicar o nmero de elementos do array, sendo criado neste caso um array com tantos elementos quantas as inicializaes.

int v[] = {10,20,30};

Constantes
Os programas devem ser escritos de forma que se for pretendida uma pequena alterao no seja necessrio efectuar grandes alteraes no cdigo dos programas. Suponhamos o seguinte programa:

#include <stdio.h> main() { int v[10], i; for(i=0;i<10;i++) v[i]=0; for(i=0;i<10;i++) v[i]=i; for(i=10-1;i>=0;i--) printf("%d\n",v[i]); }
Este programa funciona para um array de 10 elementos, no entanto, se for necessrio alter-lo de forma a utilizar um array de 25 elementos tem de ser feita alterao em quatro locais especficos do programa. Agora imagine que em vez deste programa tinha um programa com milhares de linhas de cdigo ...
Pgina 5 Filipe Marques

Algoritmos e Estruturas de Dados

Arrays

Para resolvermos este tipo de problemas devemos utilizar constantes. Normalmente a definio das constantes deve ser feita imediatamente a seguir aos includes, podendo ser realizada de duas formas diferentes. Imaginemos que pretendemos definir a constante NUM com o valor fixo de 10. const int NUM = 10; #define NUM 10 Se efectussemos esta definio no programa anterior apenas necessitvamos de efectuar uma alterao no cdigo do programa. Enquanto que uma constante definida com const existe fisicamente numa determinada posio de memria, a constante definida com #define apenas uma forma de substituio de todas as ocorrncias na fase de prprocessamento, isto , antes da fase de compilao. O tipo definido em #define o tipo que resulta da expresso que aparece na componente do valor. Dado que o #define no faz parte da linguagem C, no seguida de ponto e vrgula.

Arrays Multi-Dimensionais
At agora, apenas usamos arrays de uma dimenso. Mas, por exemplo, para implementar o famoso jogo do galo precisamos de um array de 2 dimenses, ou mais vulgarmente conhecido como matriz. Como cada quadrcula pode conter um X, um 0 ou um espao em branco, teremos de considerar um array de caracteres. Assim, poderamos definir da seguinte forma um array de 3 linhas e 3 colunas.

#define DIM 3 char galo[DIM][DIM];


Desta forma, galo[i][j] representa o caractere presente na linha i e coluna j do array galo. galo[0][0] galo[1][0] galo[2][0] galo[0][1] galo[1][1] galo[2][1] galo[0][2] galo[1][2] galo[2][2]

Pgina 6

Filipe Marques

Algoritmos e Estruturas de Dados

Arrays

Exerccios
Escreva um programa que declare um array com 10 nmeros inteiros e coloque posteriormente em cada uma das posies o valor do seu ndice. Dever posteriormente imprimir os valores do array. #include <stdio.h> #define N 10 main() { int v[N],i; for (i=0;i<N;i++) v[i] = i;

for (i=0;i<N;i++) printf("%d\n",v[i]); } Escreva um programa que apresente o maior nmero de um array de 10 nmeros reais. #include <stdio.h> #define N 10 main() { float x[] = {60.0,20.0,15.0,50.0,27.0,12.0,3.0,30.0,55.0,62.0}; int i; float maior = x[0]; for (i=1; i<N; i++) if (x[i] > maior) maior = x[i]; printf("Maior elemento = %f\n",maior); }
Pgina 7 Filipe Marques

Algoritmos e Estruturas de Dados

Arrays

Escreva um programa que coloque nas n primeiras posies de um array de 5 caracteres um determinado caractere. Dever posteriormente imprimir os valores do array. #include<stdio.h> main() { char s[5]={'a','b','c','d','e'}; int i,num,car; printf("Quantos quer escrever? "); scanf("%d",&num); printf("O que quer escrever? "); scanf(" %c",&car); for(i=0; i<num; i++) s[i] = car; for(i=0; i<5; i++) printf("%c\n",s[i]); } Escreva um programa que verifique se os primeiros n elementos de dois arrays de 5 inteiros so iguais ou no. #include<stdio.h> main() { int s1[5]={1,2,3,4,5}; int s2[5]={1,2,3,4,6}; int i,num; printf("Quantos quer comparar? "); scanf("%d",&num); for(i=0; i<num; i++) if (s1[i] != s2[i]) {
Pgina 8 Filipe Marques

Algoritmos e Estruturas de Dados

Arrays

printf("\nArrays Diferentes...\n"); return 0; } printf("\nArrays Iguais\n"); }

Pgina 9

Filipe Marques

Você também pode gostar