24.07.2013 Views

Capítulo 8. Funções e Subrotinas - UFMG

Capítulo 8. Funções e Subrotinas - UFMG

Capítulo 8. Funções e Subrotinas - UFMG

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Capítulo</strong> <strong>8.</strong> Sub-Programas e Módulos 113<br />

Programa <strong>8.</strong>3: Ilustra uso de módulo para armazenar dados globais.<br />

MODULE modu1<br />

implicit none<br />

real , parameter : : pi= 3.1415926536<br />

real , parameter : : e u l e r e= 2.718281828<br />

END MODULE modu1<br />

! <br />

program mod1<br />

use modu1<br />

implicit none<br />

real : : x<br />

do<br />

print , ”Entre com o v a l o r de x : ”<br />

read , x<br />

print , ”sen ( pix)=” , sen ( )<br />

print , ”ln ( ex)=” , ln ( )<br />

end do<br />

CONTAINS<br />

function sen ( )<br />

real : : sen<br />

sen= s i n ( pix )<br />

return<br />

end function sen<br />

!<br />

function ln ( )<br />

real : : ln<br />

ln= l o g ( e u l e r e x )<br />

return<br />

end function ln<br />

end program mod1<br />

O programa-exemplo mod1.f90 (programa <strong>8.</strong>3), ilustra o uso de um módulo para armazenar dados globais.<br />

<strong>8.</strong>3.2 Rotinas de módulos<br />

Rotinas podem ser definidas em módulos e estas são denominadas rotinas de módulos. Estas podem ser<br />

tanto subrotinas quanto funções e ter a mesma forma de rotinas internas definidas dentro de outras unidades<br />

de programa. O número de rotinas de módulo é arbitrário.<br />

Rotinas de módulo podem ser chamadas usando o comando CALL usual ou fazendo referência ao nome de<br />

uma função. Contudo, estas somente são acessíveis a unidades de programa que fazem uso do módulo através<br />

da instrução USE.<br />

Uma rotina de módulo pode invocar outras rotinas de módulo contidas no mesmo módulo. As variáveis<br />

declaradas no módulo antes da palavra-chave CONTAINS são diretamente acessíveis a todas as rotinas deste,<br />

por associação ao hospedeiro. Contudo, variáveis declaradas localmente em um determinado sub-programa de<br />

módulo são opacas aos outros sub-programas. Caso o módulo invoque outro módulo com uma instrução USE<br />

antes da palavra-chave CONTAINS, estes objetos também se tornam acessíveis a todas as rotinas de módulo.<br />

Por outro lado, uma determinada rotina de módulo pode usar localmente outro módulo (não o hospedeiro),<br />

em cuja situação os objetos somente são acessíveis localmente. Em suma, uma rotina de módulo possui todas<br />

as propriedades de rotinas internas em outras unidades de programa, exceto que uma rotina de módulo pode<br />

conter, por sua vez, rotinas internas a ela. Por exemplo, o seguinte módulo é válido:<br />

MODULE INTEG<br />

IMPLICIT NONE<br />

REAL :: ALFA ! Variável global.<br />

CONTAINS<br />

Autor: Rudi Gaelzer – IFM/UFPel Impresso: 23 de abril de 2008

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!