Linguagem de programação Fortran 77

 
 

Parte I - Fundamentos

Sumário:
  • Introdução
  • Tipos de dados
  • Conversão de tipos de dados
  • Declaração de variáveis
  • Denominação de variáveis
  • Constantes
  • Comando de atribuição
  • Operadores aritméticos
  • Operadores relacionais
  • Operadores lógicos
  • Precedência dos operadores
  • Exercícios
  • Comandos de entrada e saída
  • Códigos do comando format
  • Formato de impressão
  • Regras de posição de colunas
  • Codificação de um programa (Ambiente de programação Force)
  • Exercícios
 

Introdução

O Fortran é uma linguagem de programação de finalidade geral, desenvolvida principalmente para projetos da área de engenharia.  Fortran é um acrônimo de FORmula TRANslation. Foi a primeira linguagem de programação de alto-nível, criada pela IBM em 1957.  Convencionalmente, a versão da linguagem Fortran é conhecida pelos dois últimos algarismos do ano em que foi introduzida e mais recentemente pelos algarismos completos do ano.  As últimas versões distribuídas são: Fortran 66, Fortran 77, Fortran 90, Fortran 95 e Fortran 2003.

 
 

Tipos de dados

A linguagem de programação Fortran apresenta os tipos de dados numéricos (inteiros, reais e complexos) e não numéricos (cadeias de caracteres e lógicos):

   Característica    Tipo
  Número inteiro positivo, negativo ou nulo   integer
  Número real positivo, negativo ou nulo   real / double precision
  Número complexo, que possui uma parte       inteira e uma imaginária   complex
  Conjunto de carateres alfanuméricos,       literais, string ou cadeia de caracteres   character
  Valores booleanos (verdadeiro e falso)   logical

O tipo de uma variável determina o modo de armazenamento e a quantidade de memória que ela ocupará, em número de bytes:

Tipo Tam. em bytes Escala de valores
  integer 4   -2147483648 a -2147483647
  real  4   3.4E-38 a 3.4E+38
  double precision  8   1.7E-308 a 1.7E+308
  character  1 B por caract.  
  logical  1   .true. / .false.

A declaração do tipo integer, por padrão, ocupa 4 bytes de memória que também poderia ser definido como integer*4. Pode-se optar por reservar 2 bytes declarando como integer*2 ou apenas 1 byte definindo o tipo como integer*1 que, neste caso, a escala de valores fica bastante reduzida: de -128 a 127.
De maneira semelhante, o tipo real também pode ser declarado como real ou como real*4. A declaração do tipo double precision é equivalente a real*8.

A variável do tipo character pode armazernar conjuntos de caracteres também conhecidos como strings ou cadeia de caracteres. Um caractere é uma letra, digito ou símbolo especial do conjunto de caracteres da linguagem Fortran. Uma cadeia de caracteres é uma seqüência de um ou mais caracteres.
A declaração character*9 , por exemplo, pode armazenar até 9 caracteres. O tipo logical reserva apenas 1 byte cujo conteúdo só pode ser .true. ou .false..
Não será abordado, neste trabalho, o tipo de dado complex por ser de pouco uso.

As variáveis e constantes inteiras (ponto fixo) são representadas sem casas decimais, ao passo que, as reais (ponto flutuante) possuem vírgula ou ponto decimal. As constantes reais podem ser escritas como nos exemplos que seguem:

Notação comum Notação científica
 123.456   1.23456E+2
 -0.0291  -2.91E-2
 8.  8E0

Na notação científica, o número é representado por um produto de dois fatores: fração ou mantissa e base e expoente, sendo que a base está subentendida na declaração. O valor pode ser obtido multiplicando-se o número que antecede a letra E por 10 elevado ao número que segue a letra E. Assim, a notação 2.3E6 equivale a dois milhões e trezentos mil.
Os exemplos de notação científica acima são para números reais de precisão simples. Para os de precisão dupla basta substituir a letra E por D.

 
 

Conversão de tipos de dados

Algumas funções intrínsicas que permitem fazer a transformação de um tipo de dado para outro:

Conversão Sintaxe Exemplo
  inteiro para real   real real(integer)   real(12) ou float(12)
  real para inteiro truncado   integer int(real)   int(12.3) ou ifix(12.3)
  real para dupla precisão   real dble(real)   dble(3.235)
  caractere para inteiro   integer ichar(character)   ichar('a')
  inteiro para caractere   character char(integer)   char(97)

 
 

Declaração de variáveis

Uma variável é uma área na memória referenciada por um identificador, onde pode ser armazenado um valor de certo tipo e alterado a qualquer momento.
Exemplos:
integer soma
real saldo, valor
character nome, sexo
logical resposta

Um identificador nomeia a informação. O nome de variável, constante, função, etc. é considerado um identificador. Um nome de identificador deve começar por uma letra, ser único dentro de seu escopo e é vedado o uso de caracteres especiais, exceto o caractere de sublinhado (_) colocado entre palavras. Ter no máximo 31 caracteres e não pode ser igual a uma palavra chave reservada para linguagem. O Fortran não distingüe entre letras maiúsculas e minúsculas.

As variáveis podem receber valores iniciais através do comando data, após terem sido declaradas, ou mesmo no momento de sua declaração colocando-se os valores entre barras comuns (/).

Exemplos:
  integer a, b, c
  data a,b,c /1,2,3/
  character nome, sexo
  data nome/'Maria'/, sexo/'F'/
  real x /4./, y /5.2/
  logical resp /.true./
Exercício:
Quais dos seguintes nomes são válidos para a declaração de variáveis em Fortran 77?

 a) a123 b) 31dezembro c) nome_aluno
 d) valor+1 e) 2aFase f) nome do aluno
 g) FIM h) t1 i) valor-Bruto
 j) funcionarioNovo k) _linha1 l) versao/77
 m) $1 n) i o) maiorNro.
os itens de nomes considerados válidos.
 
 

Denominação de variáveis

Recomenda-se para a declaração de variáveis a utilização de letras minúsculas. Caso o nome seja composto por mais de uma palavra, as demais podem ser iniciadas com letras maiúsculas ou colocar o símbolo sublinhado entre elas.
Exemplos:
total contador valorMedio
segunda_fase somaValorReal contaLinhaRel2

Dica: Utilize nomes significativos na denominação de variáveis. Dê um nome que represente o mais precisamente possível o propósito desta variável.  Evite nomes sem significado ou abreviaturas não usuais.
 
 

Constantes

Uma constante é representada por um valor fixo que não pode ser alterado ao longo da execução do programa. Tanto as contantes como as variáveis devem der declaradas antes do primeiro comando executável.
Exemplos:
Expressão usual
Fortran
  PI = 3,14159
  parameter (pi = 3.1419)
  Mês: janeiro
  Parameter (mes = 'janeiro')

Notar que antes de aplicar o comando parameter à variavel, tornando-a constante, ela deve ser declarada como uma variável normal.

 
 

Comando de atribuição

Utilizado para atribuir ou fornecer um valor a uma determinada variável. O operador de atribuição é representado por = (sinal de igualdade).
Exemplos:
Expressão usual Declaração Atribuição
 salario = 508,50  real salario  salario = 508.50
 resto = 120 – 49  integer resto  resto = 120 – 49
 cidade: Blumenau  character cidade*8  cidade = 'Blumenau'

Após a execução dos comandos de atribuição Fortran, o local da mémória RAM de endereço denominado salario passa a armazenar o valor 508.50, o local de endereço de nome resto, 71 e o de nome cidade, Blumenau.
Notar que o valor a ser atribuído à declaração do tipo character deve ser informado entre apóstrofos (') ou aspas (").

 
 

Operadores aritméticos

As variáveis e constantes numéricas podem ser utilizadas em cálculos matemáticos, utilizando funções matemáticas ou aplicando os seguintes operadores:

Operador usual Função Fortran
      *, x ou .
 Multiplicação
*
      / ou :
 Divisão
/
      +
 Adição
+
      -
 Subtração
-
      Potência
 Potenciação
**

Deve-se tomar especial cuidado ao usar o operador de divisão, que tem significado diferente para valores inteiros e reais.
Se os operandos forem ambos inteiros, será realizada uma divisão inteira, caso contrário terá efeito uma divisão de aritmética real.

Exemplos:  3/2 = 1;    3./2. = 1.5;    3/2. = 1.5.

Algumas funções matemáticas intrínsecas:
Operação
Sintaxe
Exemplo
Resultado
raiz quadrada
real sqrt(real)
 sqrt (9)
      3
resto da divisão
integer mod(integer D, integer d)
 mod (9,4)
      1
resto da divisão
real amod(real D, real d)
 amod(9.5,2.0)
      1.5
valor absoluto
integer iabs(integer)
 iabs(-5)
      5
valor absoluto
real abs(real)
 abs(-8.3)
      8.3

D = dividendo; d = divisor.

 
 

Operadores relacionais

Operadores relacionais fazem comparações, ou seja, verificam a relação de magnitude e igualdade entre dois valores. Indicam a comparação a ser realizada por uma expressão lógica.
São seis os operadores relacionais:
Operador usual Operação Fortran
=
  Igual a
== ou .EQ.
>
  Maior que
> ou .GT.
<
  Menor que
< ou .LT.
<>
  Diferente de
/= ou .NE.
>=
  Maior ou igual a
>= ou .GE.
<=
  Menor ou igual a
<= ou .LE.

 
 

Operadores lógicos

Utilizados em expressões lógicas compostas ou para inverter o estado lógico de uma condição. Retornam o valor verdadeiro ou falso.

Expressão usual
Operação
Fortran
e
Conjunção
.and.
ou
Disjunção
.or.
não
Negação
.not.

Os operadores .and. e .or. são binários e o operador .not. é unário.
Estes operadores avaliam os operandos como lógicos (0 ou 1), sendo o valor lógico 0 considerado falso (.false.) e o valor lógico 1, verdadeiro (.true.).

As tabelas-verdade, a seguir, expressam operações lógicas:

conjunção (.and.)
disjunção (.or.)
negação (.not.)
V e V = V
V ou V = V
não V = F
V e F = F
V ou F = V
não F = V
F e V = F
F ou V = V
 
F e F = F
F ou F = F
 

V = verdadeiro; F = falso.
 
 

Precedência dos operadores

A precedência é o critério que especifica a ordem de avaliação dos operadores de uma expressão qualquer. O Fortran prioriza as operações de acordo com a ordem das categorias listadas abaixo. Os operadores entre parênteses possuem a mesma prioridade e são executados na ordem em que são escritos na instrução da esquerda para direita:

Categorias e operadores:

1. Aritméticos: **, (*, /), (+, -)
2. Relacionais:(>, >=, <, <=), (==, /=)
3. Lógicos: not, and e or
(Parênteses podem ser utilizados para determinar uma forma específica de avaliação de uma expressão.)
 
 

Exercícios  (Para obter as respostas posicione o cursor sobre a letra da expressão)

a = (2 + 1) * 6
b = 20 / (-2) / 5
c = (5 + 1) / 2 * 3
d = 2 + 6 / 4 * 8
e = 110 – 10 ** 2
          
f = 50 > 5 .and. 20 == 10
g = 50 > 5 .or. 20 .eq. 10
h = .not. 12 > 30
i = 5 < 8 .and. 2 > 4
j = 8 /= 18 .or. 12 > 4 * 5
          
integer x/0/, y/1/, z/2/

integer ano /2012/ (Verifica se o ano 2012 é bissexto)
u=((mod(ano,4)==0).and.(mod(ano,100)>0).or.(mod(ano,400)==0))

 
 

Comandos de entrada e saída

São comandos que permitem obter dados do ambiente exterior para a memória do computador e fornecer dados do computador ao mundo exterior.
Exemplos:
Expressão usual Fortran
 ler nota  read(*,*) nota
 read *, nota
 escrever resultado  write(*,*) resultado
 print *, resultado
Estrututa dos comandos:
read (unidade, formato) lista de varáveis
read formato, lista de varáveis
write (unidade,formato) lista de varáveis
print formato, lista de varáveis

A unidade representa o equipamento (um número de 1 a 99) de onde os dados serão lidos ou onde serão impressos. O número 5 e o símbolo * são definidos como unidade de teclado para o comando read e o número 6 e o * são considerados como a tela do computador para o comando write. O segundo comando read sempre lê os dados inseridos a partir do teclado e o print sempre mostra o resultado na tela do computador.

O formato pode conter uma lista de caracteres de controle, apresentada na próxima seção, um rótulo ou label que referencie um comando format ou o símbolo * que indica saída ou leitura de dados de forma livre.

A lista de variáveis representa os dados que serão lidos ou impressos separados por virgula.

Nota sobre o tipo de dados character: Para entrar via teclado com uma cadeia de caracteres que contenha espaços entre si é necessário delimitar a string com apóstrofos (') ou aspas ("). Por exemplo, para o comando read capturar integralmente o nome Maria da Silva é necessário digitar também os delimitadores, assim: 'Maria da Silva'.

 
 

Códigos do comando Format

Utilizados para controle de páginas e exibição de códigos especiais. Algumas seqüências de controle:
Caractere de controle
Significado
A  texto
D  números de dupla precisão, notação de expoente
E  números reais, notação de expoente
F
 números reais, formato de ponto fixo
I  Inteiros
X  espaços horizontais
/  nova linha
$  inibe o avanço de linha

Codificação dos formatos mais comuns:

Fw.d (para números reais - códigos F, D, e E)
Iw (para números inteiros)
Aw (para string de caracteres)
     w é a largura do campo (constante inteira)
     d é a quantidade de casas decimais (constante inteira)

 
 

Formato de impressão

O tamanho de um campo de dado pode ser definido no comando Format para permitir o alinhamento na apresentação dos dados. O comando Format é usado tanto para entrada como para saída de dados.
Exemplo:

As colunas 1 a 5 (1 a 6 é espaço total entre a coluna numerada e a linha vertical à direita, justaposta às instruções) recebem o rótulo ou label, conforme descrito mais adiante em Regras de posição de colunas, para que outros comandos possam identificar aquela linha. Neste exemplo, o format está sendo apontado pela instrução write, pois esta contém o mesmo número de rótulo da linha do comando format. Os números de rótulos nas colunas 1 a 5 são determinados pelo programador e devem ser números inteiros e não podem ser repetidos.

O programa acima apresenta o seguinte resultado:

Modo alternativo de codificar o formato para obter o mesmo resultado exibido acima:

Aqui os códigos de formato foram inseridos entre parênteses e aspas no lugar do label da instrução write que referenciava o comando format.

 
 

Regras de posição de colunas

O Fortran 77 não é uma linguagem de formato livre, pois impõem certas restrições para a escrita do código fonte:
Coluna Conteúdo
1 Comentários. Indicar com o caractere * ou ! para digitar um comentário nesta linha. O símbolo ! pode iniciar um comentário em qualquer posição ou coluna do editor.
1 a 5 Rótulo ou label. Deve ser número inteiro e único nestas colunas em relação às linhas do programa.
6 Continuação da linha anterior. Para indicar esta condição, escreve-se qualquer caractere diferente de 0.
7 a 72 Comandos ou comentários. Considera-se comentário quando identificado como tal na coluna 1 ou antecedido pelo ponto de exclamação.
73 a 80 Número de seqüência. Atualmente, sem uso.

 
 

Codificação de um programa

Ambiente de programação FORCE - Editor e Compilador de Fortran:
O FORCE é um sistema de desenvolvimento de programas em Fotran, de domínio público, que inclui um editor e ferramentas de compilação para a plataforma Microsoft Windows. Para praticar a linguagem de programação Fortran faça download e instale o sistema Force em seu computador, o que pode ser feito a partir do site Force Project: http://www.lepsch.com.

Abra o editor do Force, digite a codificação mostrada abaixo, compile e execute o programa e, em seguida, examine atentamente seu conteúdo e resultado.

Enunciado do problema

Calcular a média aritmética de três notas fornecidas pelo usuário e imprimir o resultado.

Implementação em Fortran

A primeira linha do editor contém a palavra program seguida do nome do programa determinado pelo programador. Essa denominação segue a mesma regra utilizada para a definição dos nomes das variaveis. Embora a codificação do nome do programa seja opcional, recomenda-se nomeá-lo para fins de documentação.

A linha 2 mostra a instrução implicit none. Esta instrução exige que todas as variáveis sejam declaradas explicitamente. Na ausência desta instrução, o compilador não requer que as variáveis sejam declaradas previamente. No entanto se uma variável não for declarada, seu tipo será atribuído implicitamente de acordo com a seguinte regra: se o nome identificador da variável começa com uma das letras de I a N, será atribuído o tipo integer, caso contrário, real. Assim, a variável temp será considerada real, ao passo que itemp será integer. Para evitar resultados inesperados, recomenda-se fortemente especificar a variável e o seu respectivo tipo.

Na linha 12, o comando stop indica o fim lógico da unidade de programa e é opcional, mas é recomendado encerrar a execução do programa com o comando stop para enfatizar o final do fluxo de execução.

A linha 13 mostra o comando end que indica ao compilador o fim físico da unidade de programa e ele é obrigatório.

O programa acima apresenta o seguinte resultado digitando-se como entrada as notas 7.5 8 10:

saida5

 
 

Exercícios

  1. Elaborar um program que receba a idade de uma pessoa em número de anos, calcule e escreva essa idade em Meses, Dias, Horas e Minutos.

  2. Elaborar um programa para calcular a diferença de preços de um determinado produto, comparando os preços de compra atual e anterior. O programa deve obter os preços atual e anterior e exibir a diferença algébrica e percentual dos preços.

  3. Escrever um programa para efetuar o cálculo da quantidade de litros de combustível gastos em uma viagem, sabendo-se que o veículo faz 9 km/litro. O usuário informará a velocidade média e o tempo despendido na viagem. (Obter o tempo em horas e minutos, em separado). O programa deve apresentar:
    • a distância percorrida e
    • a quantidade de litros gastos.

  4. Dados os comprimentos dos catetos de um triângulo retângulo, preparar um programa para determinar e imprimir o comprimento da hipotenusa. (Fórmula do triângulo retângulo: a2 = b2 + c2).

  5. Elaborar um programa para calcular a área de um círculo, obtendo como entrada a medida do raio(r).        Fórmula: area = ¶ r2, sendo ¶ = 3,1415.

  6. Em certa disciplina a nota média do aluno é calculada com base em três provas. A primeira prova tem peso 3, a segunda, peso 4 e a terceira, peso 5.  Fazer um programa para calcular e apresentar a nota média, tendo como dados de entrada o nome do aluno e as notas referentes as três provas e como saída o nome e a média calculada.