26 set 2017

Definição de Função de Comando – FORTRAN

Recentemente recebi um e-mail de um colega de profissão com uma questão a respeito de Fortran 77:

1) Porque o programa compila e executa?
2) Descomentando o valor de X na 1a linha da subrotina o programa não funciona, por que?
        PROGRAM RIARRAY

        CALL DRIVER

        END



        SUBROUTINE DRIVER
C        X = 290.0
        E(X) = EXP(21.18123 - 5418. / X ) / .622
        PRINT *, X, E(X)

C        TM = 288.0
C        PRINT *, TM, E(TM)

C        X = 290.0
C        PRINT *, X, E(X)
        END

Enquanto preparava o material de aula para meus alunos de Fortran, estava pesquisando as Notas de Aula de Física Computacional I do Professor Francisco C. Lavarda da UNESP e me deparei com a Definição de Função de Comando que viria por explicar os questionamentos acima citados.


Ref: HEHL, M. E., LINGUAGEM DE PROGRAMAÇÃO ESTRUTURADA FORTRAN, McGraw-Hill, 1986

11.5.1. Definição de Função de Comando

Uma função de comando é definida por um comando da forma:

nome ([a[,a]?]) = e

sendo que:

  • nome é o nome de uma função e segue as mesmas regras para nomes (identificadores) de variáveis.
  •  a é um argumento.
  •  e é uma expressão.

Usa-se uma função de comando como se usa uma função intrínseca (embutida, de biblioteca).
A função de comando é um comando não-executável e portanto deve ser declarada no início do programa, antes de qualquer comando executável.

Exemplo:

program exemplo
implicit none
real area,raio
integer i
area(raio) = 3.1415927*raio**2
do i = 1, 10
    read(*,*) raio
    write(*,*) area(raio)
enddo
stop
end program exemplo

Com isto conseguimos responder as duas perguntas:

1) Porque o programa compila e executa?
R1. Porque ele esta sintaticamente correto.

2) Descomentando o valor de X na 1a linha da subrotina o programa não funciona, por que?
R2. “A função de comando é um comando não-executável e portanto deve ser declarada no início do programa, antes de qualquer comando executável“. Portanto, se descomentarmos X na primeira linha da subrotina, ele passa a ser o primeiro comando executável, contradizendo a condição de função executável na frase acima.


QR Code

Leave a Reply