Aula 17: Array |
|
Var name: array[startindex .. endindex] of type; |
name
é o identificador (nome) do array, da mesma forma dos nomes
paras
as outras variáveis.
startindex
e endindex
definem os limites dos índices do array. Nota que, em PASCAL, o
começo do array não é necessariamente igual a 0.
Em
vez disso, o array pode começar à vontade. Isto é
simpático, porque pessoas normalmente gostam de trabalhar com
índices
começando com 1 em vez de 0. Al«em disso, o array pode
começar
com qualquer outro índice (13, 100, -100,
tanto faz).
type
é qualquer tipo da variável que nós já
conhecemos,
por exemplo real ou integer, mas pode também ser um outro array.
Exemplos:
Var account: array[1..100] of
real;
Isto podia guardar a informação de 100 contas
bancárias.
Var prime: array[1..10] of
longint;
Isto podia guardar os primeiros 10 números primos.
Var propinas:
array[1000..2000]
of boolean;
Isto podia guardar alguma informação (do tipo boolean)
sobre a condição dos alunos com números entre 1000
e 2000, por exemplo se eles pagáram propinas este ano. Com
certeza,
a nossa universidade tem um array deste tipo no algum sítio.
Usar um array
name[index] retornerá o valor do elemento index
do array name. A declaração do array determine
o
tipo de valor do cada elemento
account[20]
prime[8]
propinas[1055]
Podemos também usar uma variável para o índice do array. Evidentemente, esta variável deve ser de um tipo inteiro, porque o ídice é alguma coisa contável; índice 3.4981 não faz sentido. Índice 3 faz, enderecerá o terceiro elemento do array. O código a seguir mostrará o conteúdo do array account (20 elementos): for i := 1 to 20 do
|
Var name: array[startindex1 .. endindex1, startindex2 .. endindex2] of type; |
Na verdade, é também possível declarar este array assim:
Var name: array[startindex1..endindex1] of array[startindex2..endindex2] of type;
o que mostra bem o que é um array de duas dimensões, nomeademente um array de arrays. Neste maneira o computador arranja os arrays. Por outro lado, o primeiro método de declarar um array de duas dimensões é mais lógico para as pessoas. Por isso, este modo de declaração é preferido.
O uso do um array de duas dimensões é parecido com o
uso
de um array de uma dimensão. Temos de seperar os índices
com uma virgula ou com parênteses quadradras:
name[index1, index2] |
name[index1][index2] |
Um exemplo: para mostrar a matriz aqui ao lado esquerde o
código
a seguir pode ser usado. Nota que o array consiste de 9 (3x3) elementos
do tipo integer.
PROGRAM ShowMatrix; Var matrix: array[1..3, 1..3] of integer; begin
|
Aviso |
Com os arrays temos de haver sempre cuidade de usar
índices
válidos. Isto significa usar índices no gama especificado
na altura de declaração. O computador só vai
reservar
espaço na memória suficiente para guardar esses
variáveis.
nada mais e nada menos. Se usamos um ídice 'out of bounds' (fora
da gama) o resultado do programa pode tornar-se muito estranho.
Para esclarecer isto num exemplo: O programa a seguir declara um array de 4 integers r[1..4] e uma variável normal do mesmo tipo (integer) a. A figura ao lado mostra como a memória está organizada depois desta declaração. Agora, o que vai acontecer na linha onde vai atribuir um valor a r[5]? Se r[5]existeria, este r[5] ficaria no lugar que agora está ocupado por a. A maioria das linguagens de programação não preocupam-se com isso e vão escrever neste lugar, e vamos perder o valor de a. PROGRAM Test; Var r: array[1..4] of integer;
begin
O output do programa provavelmente será a=0
Há lingaugens de programação que deixam nos especificar que nós queremos que o programa vai sempre verificar se os índices são válidos. Por exemplo o Turbo PASCAL. Mas, o Dev-PASCAL não tem este opção. Com este verificação o programa fica mais lente e ocupa mais espaço na memória e no disco, mas pode ajudar nos em eliminar erros do nosso programa. A verificação do índices chama-se range-checking (verificação do gama) e se o programa encontra um índice inválido vai gerar um 'range-check error' (erro na verificação do gama). |