6
- AGREGADOS DE VALORES HOMOGÊNEOS
6.1.
O TIPO ARRAY
É um fato bastante comum a necessidade de
processar grupos de dados com iguais características (homogêneos). Quando estes
dados devem por alguma razão permanecer armazenados simultaneamente na memória,
eles podem ser armazenados em uma variável do tipo array (arranjo).
A declaração de uma variável do tipo array em PASCAL é feita de maneira análoga à
dos outros tipos de variáveis, sendo que onde deve ser especificado o tipo
aparece a construção:
ARRAY [limites_dos_índices] OF tipo.
Neste caso, limites_dos_índices são faixas de
valores que especificam os limites de variações dos índices e podem ser algo do
tipo 1..50 ou 1..10, 1..10. A primeira faixa indica que o array possuirá 50 elementos que serão identificados escrevendo-se o nome
do array seguido de um índice (de 1 a 50,
inclusive) entre colchetes. A segunda faixa indica que o array possuirá 100 elementos que
serão identificados escrevendo-se o nome do array seguido de dois índices entre colchetes e separados um do outro
por vírgula. Em PASCAL, portanto, são permitidos arrays unidimensionais e
multidimensionais.
Suponha que necessitamos escrever um programa
em PASCAL para ler um grupo de 20 valores reais, imprimir os valores na
seqüência em que foram lidos e na seqüência inversa à de leitura. Uma solução
seria:
PROGRAM INVERTIDO;
/* IMPRIME 20 VALORES NA SEQÜÊNCIA INVERTIDA */
VAR
GRUPO: ARRAY [1..20] OF INTEGER; /* UM ARRAY C/ 20 INTEIROS */
K : INTEGER; /* UMA
VARIÁVEL AUXILIAR PARA O FOR */
BEGIN
FOR K := 1 TO 20 DO
/* LEITURA DOS 20 VALORES */
BEGIN
WRITELN('INFORME UM VALOR INTEIRO');
READLN(GRUPO[K]) /* LEITURA DO K-ÉSIMO VALOR */
END;
FOR K := 1 TO 20 DO
/*IMPRESSÃO NA SEQÜÊNCIA DE LEITURA */
WRITELN('VALOR', K: 3, '=', GRUPO[K]: 5);
FOR K := 20 DOWNTO 1 DO /* IMPRESSÃO NA SEQÜÊNCIA
INVERTIDA */
WRITELN('VALOR', K: 3, '=', GRUPO[K]: 5)
END.
Com arrays bidimensionais podemos
simular operações com matrizes facilmente: o primeiro índice representará as
linhas e o segundo índice as colunas. O programa DIAGONAL exemplifica a
utilização de arrays bidimensionais: ele lê e imprime uma matriz 4x4 de
números inteiros e identifica os elementos da diagonal principal:
PROGRAM DIAGONAL; /* IDENTIFICA OS ELEMENTOS DA DIAG.
PRINCIPAL*/
VAR
MATRIZ: ARRAY [1..4, 1..4] OF INTEGER; /* A MATRIZ 4x4 */
L, C: INTEGER;
/* OS INDICES DE LINHAS E COLUNAS */
BEGIN /* LEITURA, POR LINHA, DOS ELEMENTOS DA
MATRIZ */
FOR L := 1 TO 4 DO /*VARIANDO AS LINHAS */
BEGIN
WRITELN('INFORME OS VALORES DA LINHA', L:
2);
FOR C := 1 TO 4 DO /*..E AS COL. P/ CADA LINHA*/ READ(MATRIZ[L,
C]);
READLN /*PARA AVANÇAR DE LINHA*/
END;
WRITELN('MATRIZ LIDA');
FOR L := 1 TO 4 DO /*
IMPRESSÃO, POR LINHA, DOS ELEMENTOS
BEGIN MATRIZ */
FOR C
:= 1 TO 4 DO
WRITE(MATRIZ[L,
C]: 5);
WRITELN
END
/* IMPRESSÃO DOS ELEMENTOS
DA DIAGONAL PRINCIPAL */
WRITELN('ELEMENTOS DA DIAGONAL PRINCIPAL');
FOR L := 1 TO 4 DO
WRITE(MATRIZ[L, L]: 5);
END.
6.2.
EXERCICIOS PROPOSTOS
1. Escreva um programa em PASCAL para ler um grupo de 50 valores
reais. O programa deve imprimir o maior valor, o menor valor e os valores
lidos, nesta ordem.
2. Escreva um programa em PASCAL para ler um grupo de 40 valores
reais, imprimir os valores lidos e determinar o menor valor existente entre os
20 primeiros e o maior valor existente entre os 20 últimos.
3. Escreva um programa em PASCAL que leia dois vetores A e B de 10
componentes inteiros cada um, escreva os vetores lidos e substitua A e B pelos
vetores A + B e A - B, respectivamente. O programa deve utilizar apenas dois arrays
e imprimir os valores calculados para A e B.
4. Escreva um programa em PASCAL para ler dois vetores de 15
componentes inteiros cada e determinar o conjunto união para os conjuntos
lidos.
5. Escreva um programa em PASCAL para ler dois vetores de 15
componentes inteiros distintos cada e determinar o conjunto interseção para os
conjuntos lidos.
6. Escreva um programa em PASCAL para ler dois vetores de 15
componentes inteiros distintos cada e determinar o conjunto diferença para os
conjuntos lidos.
7. Escreva um programa em PASCAL para ler um vetor com 20
componentes reais, imprimir o vetor lido e determinar o maior e o menor componente
do vetor e suas respectivas posições de entrada.
8. Considerando um vetor de 15 componentes inteiros, escreva
trechos de programa em PASCAL para: - imprimir o conteúdo das posições pares do
vetor; - atribuir a cada componente o valor da sua posição no vetor; - atribuir
a cada componente o valor do componente seguinte e o valor do primeiro
componente ao último componente.
9. Escreva um programa em PASCAL para ler um grupo de 30 valores
reais, imprimir os valores lidos e imprimir o grupo de valores em ordem
numérica crescente.
10. Escreva um programa em PASCAL
para ler um grupo de 100 valores inteiros, imprimir os valores lidos e imprimir
os valores pares em ordem numérica crescente.
11. Escreva um programa em PASCAL
para ler uma matriz 10 x 10 de números reais, imprimir a matriz lida e
determinar a soma e a média aritmética dos componentes da matriz.
12. Escreva um programa em PASCAL
para ler um vetor com 100 componentes reais e transferir estes componentes para
uma matriz 10 x 10 onde a i-ésima linha é formada pelos elementos cujas
posições no conjunto terminam por i. Imprimir o vetor e a matriz.
13. Escreva um programa em PASCAL
para ler uma matriz 10 x 10 de números reais, imprimir a matriz como foi lida e
também com os componentes das colunas classificados em ordem decrescente para
cada coluna isoladamente.
14. Escreva um programa em PASCAL
para ler uma matriz 10 x 10 de componentes reais e transferir estes
componentes, na seqüência das linhas, para um vetor de 100 componentes. O
programa deve imprimir a matriz lida e o vetor obtido com a transferência.
15. Escreva um programa em PASCAL
para ler uma matriz de ordem 8 de números reais, imprimir a matriz lida e
imprimir a matriz com todos os componentes classificados, na seqüência das
linhas, em ordem crescente.
16. Escreva um programa em PASCAL
para ler uma matriz de ordem 8 de números reais, imprimir a matriz lida e
imprimir a matriz com os componentes de cada uma das linhas classificados em
ordem crescente.
17. Escreva um programa em PASCAL
para ler uma matriz 10 x 10 de números inteiros e determinar o maior componente
em cada coluna da matriz.
18. Escreva um programa em PASCAL
para ler uma matriz 10 x 10 de números inteiros e determinar o menor componente
em cada linha da matriz.
19. Escreva um programa em PASCAL
para ler duas matrizes de ordem 4 de números inteiros, imprimir as matrizes
lidas e determinar a matriz soma correspondente.
20. Escreva um programa em PASCAL
para ler duas matrizes de ordem 4 de números inteiros, imprimir as matrizes lidas
e determinar a matriz produto da primeira pela segunda.
21. Escreva um programa em PASCAL
para ler uma matriz de ordem 6 de números inteiros, imprimir a matriz lida e
determinar a matriz transposta correspondente. Restrição: o programa deve
utilizar uma única área para armazenar a matriz lida e sua transposta.
22. Escreva um programa em PASCAL
para gerar e imprimir uma matriz de ordem 15 onde todos os elementos acima da
diagonal principal são iguais a 1 e os demais são iguais a zero.
23. Escreva um programa em PASCAL
para gerar e imprimir uma matriz de ordem 15 onde todos os elementos acima da
diagonal secundária são iguais a 1 e os demais são iguais a zero.
24. Escreva um programa em PASCAL
para ler uma matriz de ordem 3 de números reais, imprimir a matriz lida e
calcular e imprimir seu determinante.