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.
110 <strong>8.</strong>3. Módulos<br />
<strong>8.</strong>3.1 Dados globais<br />
Em Fortran, variáveis são usualmente entidades locais. Contudo, em muitas situações é necessário que alguns<br />
objetos tenham o seu valor compartilhado entre diferentes unidades de programa. A maneira mais usual de se<br />
realizar este compartilhamento é através da lista de argumentos de uma rotina. Entretanto, facilmente surge<br />
uma situação onde uma variável não pode ser compartilhada como argumento de um sub-programa. Neste<br />
momento, é necessária uma outra estratégia para se definir dados globais. Esta necessidade já era corriqueira<br />
no Fortran 77.<br />
Fortran 77<br />
A maneira mais usada no Fortran 77 para compartilhar dados globais é através de blocos common. Um<br />
bloco common é uma lista de variáveis armazenadas em uma área da memória do computador que é identificada<br />
através de um nome e que pode ser acessada diretamente em mais de uma unidade de programa.<br />
A necessidade de se criar um bloco common surge, muitas vezes, com o uso de rotinas de bibliotecas de<br />
aplicação generalizada, as quais são definidas com um conjunto restrito de argumentos. Muitas vezes, faz-se<br />
necessário transferir informação entre estas rotinas ou entre rotinas que usam as bibliotecas de maneira não<br />
prevista na lista de argumentos.<br />
Por exemplo, seja a subrotina INTEG, a qual realiza a integração numérica unidimensional de uma função<br />
F(x) qualquer, no intervalo (A,B):<br />
SUBROUTINE INTEG(F,A,B,RES)<br />
REAL*8 A, B, F, RES, TEMP<br />
EXTERNAL F<br />
...<br />
TEMP= F(X)<br />
...<br />
RES= <br />
END SUBROUTINE INTEG<br />
Caso o programador queira integrar a função g(x) = cos(αx) no intervalo [0, 1], ele não poderá informar ao<br />
integrador o valor de α na lista de argumentos da subrotina INTEG. A solução está no uso de um bloco common:<br />
REAL*8 FUNCTION G(X)<br />
REAL*8 X, ALFA<br />
COMMON /VAR/ ALFA<br />
G= COS(ALFA*X)<br />
RETURN<br />
END FUNCTION G<br />
onde VAR é o nome que identifica o espaço de memória onde o valor de ALFA será armazenado. Assim, o programa<br />
pode realizar a integração usando o mesmo bloco common:<br />
C<br />
C<br />
PROGRAM INTEGRA<br />
REAL*8 G, A, INT<br />
EXTERNAL G<br />
COMMON /VAR/ A<br />
...<br />
PRINT*, ’Entre com o valor de alfa:’<br />
READ(*,*) A<br />
CALL INTEG(G,0.0D0,1.0D0,INT)<br />
...<br />
END PROGRAM INTEGRA<br />
Note que o bloco VAR aparece tanto no programa quanto na função; porém não há necessidade de ele aparecer<br />
na subrotina INTEG.<br />
A forma geral de um bloco common é:<br />
COMMON // <br />
Autor: Rudi Gaelzer – IFM/UFPel Impresso: 23 de abril de 2008