2.5 Fortran 77

ANSI X3.9-1978 - ISO 1539:1980

Para competir com outras linguagens, como C, Pascal e Algol, os fabricantes começaram a introduzir novas funcionalidades não padronizadas em seus compiladores Fortran. Isso levou a ANSI (American National Standards Institute), sucessora da ASA, a trabalhar numa revisão para a linguagem através do comitê X3J3. Em 3 de abril de 1978 foi aprovado o padrão ANSI X3.9-1978.

Entre as novidades estão a declaração IF estruturada como bloco (IF, ELSE IF, ELSE, END IF), o tipo de dado CHARACTER (que era uma extensão comum do Fortran IV), a declaração PARAMETER para definir constantes, as declarações READ e PRINT com asterisco no lugar do formato, para permitir entrada e saída no formato livre, e a possibilidade de abrir e fechar arquivos em disco no corpo do programa.

Objetivo:

  • Este padrão especifica a forma e estabelece a interpretação dos programas expressos na linguagem FORTRAN;
  • O objetivo é promover a portabilidade dos programas FORTRAN para uso em uma variedade de sistemas de processamento de dados.

Definições:

  • Sequência
    • Uma sequência é um conjunto ordenado com correspondência de 1 para 1 com os números 1, 2, até n;
    • O número de elementos em uma sequência é n;
    • A sequência pode estar vazia e, neste caso, não contém nenhum elemento;
    • Os elementos de uma sequência não vazia são referidos como primeiro elemento, segundo elemento, etc.;
    • O enésimo elemento, onde n é o número de elementos da sequência, é chamado de último elemento;
    • Uma sequência vazia não possui nem o primeiro nem o último elemento.
  • Itens da sintaxe
    • São usados letras, dígitos e caracteres especiais do conjunto de caracteres do Fortran para formar os itens da linguagem Fortran;
    • Os itens sintáticos básicos da linguagem Fortran são as constantes, nomes simbólicos, rótulos de declaração palavras chave, operadores e caracteres especiais;
      • Um nome simbólico tem a forma de uma sequência contendo de 1 a 6 letras ou dígitos, iniciada por uma letra;
      • Um rótulo de declaração tem a forma de uma sequência contendo de 1 a 5 dígitos, um dos quais tem que ser diferente de 0, sendo usada para identificar uma declaração;
      • Uma palavra chave tem a forma de uma sequência especificada de letras;
      • Um caractere especial pode ser um operador, ou parte de uma constante, ou outro significado especial.
  • Declarações, Comentários e Linhas
    • Uma declaração Fortran é uma sequência de itens sintáticos;
    • Uma declaração é escrita em uma ou mais linhas, sendo a primeira chamada de linha inicial e as demais chamadas de linhas de continuação;
    • Existe também uma linha chamada de linha de comentário, que não faz parte de nenhuma declaração e tem por finalidade prover documentação;
    • Cada declaração é classificada como sendo executável ou não executável;
      • As declarações executáveis descrevem ações;
      • As declarações não executáveis descrevem as características, arranjos e valores iniciais dos dados; contém informação de edição; especificam declarações de função; classificam unidades de programas e especificam pontos de entrada dentro de subprogramas.
  • Unidades de programa e procedimentos
    • Uma unidade de programa consiste de uma sequência de declarações e linhas de comentário opcionais;
    • Uma unidade de programa é tanto um programa quanto um subprograma;
    • O programa principal é uma unidade de programa que não contém as declarações FUNCTION, SUBROUTINE, ou BLOCK DATA, podendo conter a declaração PROGRAM como sua primeira declaração;
    • Um subprograma é uma unidade de programa que possui a declaração FUNCTION, SUBROUTINE, ou BLOCK DATA como sua primeira declaração;
    • Um subprograma cuja primeira declaração é FUNCTION é chamado de subprograma função;
    • Um subprograma cuja primeira declaração é SUBROUTINE é chamado de subprograma sub-rotina;
    • Um subprograma cuja primeira declaração é BLOCK DATA é chamado de subprograma bloco de dados;
    • Subprogramas função e subprogramas sub-rotina são chamados de subprogramas de procedimento;

Exemplo:

      PROGRAM CORWEB
C     MOSTRA O CODIGO RGB CORRESPONDENTE A COR LIDA
      CHARACTER*18 NAOENC
      PARAMETER (NAOENC = 'COR NAO ENCONTRADA')
      CHARACTER*12 COR(6), COR_LIDA
      DATA COR / 'AMARELO', 'AZUL', 'BRANCO',
     &           'PRETO', 'VERDE', 'VERMELHO' /
      CHARACTER*7 RGB(6)
      DATA RGB / '#FFFF00', '#0000FF', '#FFFFFF',
     &           '#000000', '#00FF00', '#FF0000' /
      PRINT *, 'ENTRE COM A COR EM LETRAS MAIUSCULAS:'
      READ *, COR_LIDA
      DO 10 I = 1, SIZE(COR)
         IF (COR_LIDA .EQ. COR(I)) THEN
            PRINT *, COR(I), ' RGB = ', RGB(I)
            GO TO 20
         END IF
   10 CONTINUE
      PRINT *, NAOENC
   20 CONTINUE
      STOP
      END

Makefile:

cores_web: cores_web.f
	gfortran cores_web.f -o cores_web
clean:
	rm cores_web

Execução:

pi@raspberrypi:~/F/cores_web $ ./cores_web 
 ENTRE COM A COR EM LETRAS MAIUSCULAS:
AMARELO
 AMARELO      RGB = #FFFF00
pi@raspberrypi:~/F/cores_web $ ./cores_web 
 ENTRE COM A COR EM LETRAS MAIUSCULAS:
VERMELHO
 VERMELHO     RGB = #FF0000
pi@raspberrypi:~/F/cores_web $ ./cores_web 
 ENTRE COM A COR EM LETRAS MAIUSCULAS:
BRANCOS
 COR NAO ENCONTRADA

Referências: