Capítulo 8. Funções e Subrotinas - UFMG
Capítulo 8. Funções e Subrotinas - UFMG
Capítulo 8. Funções e Subrotinas - UFMG
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
100 <strong>8.</strong>2. sub-programas<br />
! Calcula o mínimo de FUNC no intervalo [A,B].<br />
REAL :: MINIMO<br />
REAL, INTENT(IN) :: A, B<br />
INTERFACE<br />
FUNCTION FUNC(X)<br />
REAL :: FUNC<br />
REAL, INTENT(IN) :: X<br />
END FUNCTION FUNC<br />
END INTERFACE<br />
REAL :: F,X<br />
...<br />
F= FUNC(X) !Invocaç~ao da funç~ao.<br />
...<br />
END FUNCTION MINIMO<br />
Note o uso de um bloco de interface para indicar ao compilador que o nome FUNC corresponde a uma função<br />
definida pelo usuário.<br />
Em Fortran 77, como não havia o recurso de blocos de interface, a indicação que o nome FUNC corresponde a<br />
uma função externa é realizada através da declaração EXTERNAL. Assim, no exemplo acima, no lugar da interface<br />
apareceria:<br />
...<br />
REAL FUNC<br />
EXTERNAL FUNC<br />
...<br />
para indicar a função externa. A mesma alternativa continua válida em Fortran 90/95, onde, além da declaração,<br />
pode-se usar também a palavra-chave EXTERNAL como atributo de um nome. Contudo, como já foi mencionado<br />
na seção <strong>8.</strong>2.7, o simples uso da declaração ou atributo EXTERNAL não possibilita o controle nos argumentos<br />
desta função, ao contrário do que ocorre quando a interface é explícita.<br />
Um exemplo de programa que chama a função MINIMO seria o seguinte:<br />
PROGRAM MIN<br />
IMPLICIT NONE<br />
REAL :: MENOR<br />
INTERFACE<br />
FUNCTION FUN(X)<br />
REAL :: FUN<br />
REAL, INTENT(IN) :: X<br />
END FUNCTION FUN<br />
END INTERFACE<br />
...<br />
MENOR= MINIMO(1.0, 2.0, FUN)<br />
...<br />
END PROGRAM MIN<br />
O uso de um bloco de interface não é necessário se a interface de FUN for explícita, como no caso de uma rotina<br />
de módulo.<br />
No exemplo acima, a função FUN não pode ser interna, porque estas não são admitidas quando os seus nomes<br />
são usados como argumentos de outras rotinas. Ou seja, somente rotinas externas ou de módulos são aceitas<br />
quando os seus nomes são transferidos a outras rotinas como argumentos.<br />
O programa-exemplo das páginas 101 e 102 descreve uma subrotina que gera uma matriz de pontos a partir<br />
de uma função fornecida pelo programador.<br />
<strong>8.</strong>2.13 <strong>Funções</strong> de valor matricial<br />
<strong>Funções</strong>, além de fornecer os resultados usuais na forma de valores dos tipos intrínsecos inteiro, real, complexo,<br />
lógico e de caractere, podem também fornecer como resultado valores de tipo derivado, matrizes e ponteiros.<br />
No caso de funções de valor matricial, o tamanho do resultado pode ser determinado de forma semelhante<br />
à maneira como matrizes automáticas são declaradas.<br />
Autor: Rudi Gaelzer – IFM/UFPel Impresso: 23 de abril de 2008