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 (Linha 7) 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) | |
end do | |
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.