Linguagem de programação Fortran 77

 
 

Parte III - Vetores e matrizes

Sumário:
  • Introdução
  • Vetores
  • Matrizes bidimensionais
  • Exercícios
 

Introdução

Vetores e matrizes são estruturas de dados homogêneas conhecidas como Arrays, matrizes, variáveis indexadas, variáveis subscritas ou tabelas em memória, são conjunto de elementos
de mesma natureza identificados por um índice. As estruturas homogêneas ou arrays são divididas em  unidimensionais  e multidimensionais. Geralmente, as estruturas unidimensionais são chamadas de vetores e as multidimensionais são chamadas de matrizes. Um vetor também pode ser considerado uma matriz, variando apenas numa dimensão.

 
 

Vetores

São variáveis do mesmo tipo declaradas com o mesmo identificador e referenciadas por um índice para determinar sua localização dentro da estrutura.

Ilustração de um vetor:
dom seg ter qua qui sex sab
1 2 3 4 5 6 7
<-- diasSem (nome do vetor)
<-- índice
Operações básicas:
Declaração:   character*3 diasSem(7)
Inicialização:   data diasSem /'dom','seg','ter','qua','qui','sex','sab'/
Atribuição:   diasSem(4) = 'wen'
Escrita:   print *, diasSem( 4)

O vetor acima também poderia ter sido declarado da seguinte forma: character diasSem(7)*3. O número 3 em ambas declarações indica que cada elemento do vetor tem 3 posições ou um comprimento de 3 caracteres. Se nenhum comprimento for declarado, assume-se que a variável tem comprimento de 1 caractere.
Na linha Inicialização, vê-se o comando data que é um comando que inicializa variáveis que, neste exemplo, inicializa o vetor diasSem com os dias da semana. Na linha seguinte, é mostrado um exemplo de atribuição no qual a palavra 'wen' é atribuída ao quarto elemento do vetor discriminado pelo índice entre parênteses. E, em escrita, têm-se um exemplo de impressão ( print *, diasSem(4)) do conteúdo de um elemento do vetor, indexado pelo índice de número 4.

Exemplo:

Calcular a média aritmética das notas de uma classe com dez alunos, apresentar a média da turma e as notas que estão acima dessa média. O Usuário deve entrar com as notas, pressionando enter para cada nota informada.

A declaração acima, na linha 3, informa ao compilador que a variável notas é um vetor com 10 elementos com índices de 1 a 10 para referências. Este vetor, também, poderia ser declarado como real notas(0:9) e o compilador entenderia que esta variável é um vetor de 10 elementos, sendo o limite inferior igual a 0 e superior igual a 9 para referências.
O vetor é sempre referenciado por um índice do tipo inteiro entre parênteses que acompanha o nome dado a ele. No programa acima, aparecem exemplos nas linhas 10, 18 e 19 onde o vetor é codificado como notas(i).

 
 

Matrizes bidimensionais

Uma matriz consiste de um conjunto retangular de elementos, todos do mesmo tipo ou é um grupo de posições na memória do computador as quais são acessadas por intermédio de um único nome, fazendo-se uso dos subscritos da matriz. Os índices de cada subscrito da matriz são constantes ou variáveis inteiras e, por convenção, elas começam em 1, exceto quando um intervalo distinto de valores é especificado, através do fornecimento de um limite inferior e um limite superior.

Exemplo de uma matriz com quatro linhas e três colunas contendo nome, cidade e estado:

 Ana  Blumenau  SC
 José  Curitiba  PR
 Antônio  Lages  SC
 Maria  Torres  RS
Operações básicas:
Declaração:   character mat(4,3)*8
Inicialização:   data mat /'ana','Jose','Antonio','Maria','Blumenau','Lages',
+'Curitiba','Torres','SC','PR','SC','RS'/
Atribuição:   mat(3,1)='João'
Escrita:   print *, mat(3,1)

A matriz é usualmente representada por duas dimensões, embora ela possa descrever até sete dimensões. No exemplo de declaração acima, a matriz de caracteres possui 12 elementos (4 x 3) cada qual contendo 8 caracteres, sendo inicializada através do comando data. Tanto para atribuir valores à matriz como para escrever o conteúdo de um elemento deve ser utilizado dois índices do tipo inteiro entre parênteses separados por vírgula, o primeiro referência à linha e o segundo, à coluna.

Exemplo:

Elaborar um algoritmo para carregar uma matriz 5 x 3 com valores das vendas de uma empresa, em que cada linha represente as vendas de um vendedor e cada coluna um mês de vendas.   Apresentar o valor médio de vendas e escrever o código do vendedor e o valor das vendas daqueles que venderam acima da média. O usuário informará os valores de vendas por mês de cada vendedor.

Esquema de armazenamento:

Vendedor
10
20
30
40
50
1
2
3   <-- Mês
3800,00 4200,00 2460,00
4150,00 3940,00 5120,00
3870,00 4060,00 4310,00
3600,00 3500,00 4600,00
5270,00 4520,00 4090,00

 
 
Na linha 3, a matriz bidimensional do tipo real é declarada como real venda(5,3), 5 linhas por 3 colunas, totalizando 15 elementos cada qual com uma tamanho de 4 bytes. Qualquer referência à matriz, os índices entre parênteses sempre acompanham o nome identificador da matriz como nos exemplos das linhas 10, 11 e 19: venda(i,j).

Exercícios

  1. Fazer um programa que leia dez números inteiros, armazená-los em um vetor e escrevê-los na ordem inversa de sua leitura.

  2. Fazer um programa que receba as notas da primeira e da segunda prova de dez alunos. Armazenar as notas da primeira prova e da segunda prova em vetores distintos. Calcular e escrever a média de cada aluno

  3. Numa pesquisa realizada com um grupo de pessoas pretende-se relacionar as pessoas que têm altura acima da média das pessoas pesquisadas. Assim sendo, pede-se para elaborar um programa para armazenar os nomes e as alturas das pessoas em vetores distintos e exibir a altura média e os nomes das pessoas com altura maior do que a altura média.
    Obs.: Encerrar a entrada de dados ao detectar a expressão “fim” como nome da pessoa. Cada vetor pode ter no máximo 100 ocorrências

  4. Deseja-se identificar os alunos que estão cursando simultaneamente as disciplinas “Informática Aplicada à Engenharia” e “Álgebra Linear”. Para cada disciplina deve-se alimentar um vetor com o número de matrícula (de 3 algarismos) dos alunos cursando. Encerrar a entrada de cada conjunto de matrícula dos alunos de uma disciplina ao detectar o número de matrícula 999. (Cada vetor pode ter no máximo 100 ocorrências). E, a partir daí, escrever o número de matrícula do aluno que se encontra cursando ambas disciplinas.

  5. Dado um conjunto de n registros (n <= 50), cada registro contendo o nome e a idade de uma pessoa, desenvolva um programa que guarde esses dados na memória e escreva:
    • O nome da pessoa de maior idade e o nome da pessoa de menor idade.
    • Os nomes das pessoas que tem a idade maior que a idade média;
    (Digitar “fim” em lugar do nome para encerrar a entrada de dados)

  6. Dado um vetor contendo dez nomes de pessoas, efetuar uma pesquisa sequencial sobre o vetor para encontrar o nome informado pelo usuário. Se encontrá-lo, escrever nome e posição de armazenamento no vetor.  Caso contrário, informar da inexistência do mesmo.