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.

 

Voltar para o Índice