Aula 13: Arrays |
scanf("%d", &n);
switch (n)
{
case 1: average
= a1;
break;
case 2: average
= (a1 + a2) / 2.0;
break;
case 3: average
= (a1 + a2 + a3) / 3.0;
break;
|
case 10: average
= (a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10) / 10.0;
}
É para estes casos que existem os arrays. Um array permite
definir
um conjunto de variáveis do mesmo tipo com uma forma
fácil
de acesso, nomeadamente com um índice. Tal como na
matemática,
ai
é o i-éssimo elemento de um vector ou
série
a,
a[i] fornece o i-éssimo elemento do array a.
|
tipo nome[numelementos] ; |
nome
é o identificador do array, como um nome para as outras
variáveis.
numelementos
define o número de elementos do array. Os elementos vão
de
0 a numelementos-1. Isto pode ser um pouco confuso para os
programadores
iniciantes, que estão acostumados a índices de 1 a n.
tipo
é qualquer tipo de variável, por exemplo float ou int.
Exemplos:
float account[100];
Este array poderá ser usado para armazenar
informação
de 100 contas bancárias.
long int prime[10];
Poderá ser utilizado para armazenar os 10 primeiros
números
primos.
int propinas[2000];
Poderá ser utilizado para armazenar informação
sobre o pagamento de propinas dos alunos com números entre 0 e
1999.
Utilização de um array
nome[índice] irá retornar o valor do elemento com número índice do array nome. Este será um valor do tipo descrito na declaração do array. Exemplos de arrays declarados na secção anterior: account[20]
prime[8]
propinas[1055]
Podemos também utilizar uma variável para o índice que indica um elemento único do array. Naturalmente, esta variável tem que ser do tipo inteiro, porque o índice é algo contável. O índice 3.4981 não faz qualquer sentido. O índice 3 já faz sentido, irá aceder o terceiro elemento do array. O código seguinte irá mostrar o array completo de 20 contas bancárias: for (i=0; i<20; i++)
|
tipo nome[numíndice1][numíndice2]; |
A utilização de um array duplo é similar
à
utilização de um array simples. Separamos os
índices
com uma vírgula, ou colocando-os em parêntesis rectos
separados:
nome[índice1][índice2] |
Por exemplo: Para escrever a matriz da figura da esquerda
podemos fazer
o programa seguinte. De notar que o array consiste de 9 (3x3) elementos
do tipo inteiro.
void main()
matrix[0][0] = 1;
|
Cuidado |
Quando estamos a utilizar um array temos que ter cuidado para
não
usar um índice fora do limite. Isto significa que temos sempre
que
usar um índice que seja menor do que o número total de
elementos
do array. Se utilizarmos um índice demasiado grande, os
resultados
do nosso programa podem ser muito estranhos. Um exemplo é a
melhor
forma de ilustrar esta situação. O programa que se segue
define um array r de 4 inteiros que vão de r[0]
a r[3], e um inteiro normal a. A figura da esquerda
mostrar
como as variáveis poderiam estar colocadas na memória. O
que irá acontecer se o programa atribui um valor a
r[4]?
Se r[4] existisse, teria ocupado o lugar que está
agora
a ser utilizado por a, e uma atribuição a r[4]
iria colocar um valor na caixa que é agora ocupada por a.
A maioria das linguagens não se preocupam e colocam o valor de r[4]
de qualquer forma, e assim o valor de a será eliminado
(substituido por o de r[4]).
main()
a = 0;
O output do programa será provavelmente a=0
Algumas linguagens de programação podem fazer a verificação do índice na altura em que o programa está a correr (em "run time"). Isto é chamado de "range-checking" e quando o programa tenta utilizar um índice errado, uma mensagem de erro do tipo "range-check error" ou "array index out of bounds" será mostrada. A desvantagem de fazer isto é que o programa fica mais lento e o programa compilado irá ocupar mais espaço em memória ou em disco. |
Nota: isto depende da implementação exacta da
linguagem/compilador.
Em algumas linguagens, irá escrever por cima da variável
declarada antes do array como no exemplo anterior, enquanto em
outras
linguagens irá escrever por cima da variável depois
do array. Podemos ficar a saber declarando as variáveis
int a;
int r[4];
int b;
e ver se r[4] escreve por cima
de a ou b.