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

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>8.</strong>2.2 Rotinas internas<br />

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

Já foi observado nas seções anteriores que rotinas internas podem ser definidas dentro de quaisquer unidades<br />

de programa. Uma rotina interna possui a seguinte estrutura:<br />

ou<br />

[RECURSIVE] SUBROUTINE [()]<br />

[]<br />

[]<br />

END SUBROUTINE []]<br />

[] [RECURSIVE] FUNCTION () &<br />

[RESULT ()]<br />

[]<br />

[]<br />

END FUNCTION []]<br />

Nota-se agora que as declarações FUNCTION e SUBROUTINE agora são obrigatórias no comando END. Uma determinada<br />

unidade de programa pode conter qualquer número de rotinas internas, porém estas, por sua vez, não<br />

podem conter outras rotinas internas.<br />

Cabe aqui uma menção a respeito da diferença entre uma rotina interna e uma rotina de módulo. Esta<br />

última também é incluída depois da palavra-chave CONTAINS, em um módulo, mas pode conter rotinas internas<br />

a ela.<br />

Uma rotina interna automaticamente tem acesso a todas as entidades do hospedeiro, tais como variáveis, e<br />

possuem também a habilidade de chamar as outras rotinas deste. Contudo, uma determinada rotina interna<br />

não possui acesso às entidades de outra rotina interna.<br />

Um exemplo simples do uso de uma função interna é apresentado a seguir. Note que a variável a é declarada<br />

no programa principal, tornando-se assim uma variável declarada também dentro do âmbito da função<br />

calc_a_raiz:<br />

program r o t i n t<br />

implicit none<br />

real : : x , a<br />

!<br />

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

read , x<br />

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

read , a<br />

print , ”O r e s u l t a d o de a + s q r t ( x ) é : ”<br />

print , c a l c a r a i z ( x )<br />

print , ”O r e s u l t a d o de a + s q r t (1+ x2) é : ”<br />

print , c a l c a r a i z ( 1 . 0 + x2)<br />

CONTAINS<br />

function c a l c a r a i z ( y )<br />

real : : c a l c a r a i z<br />

real , intent ( in ) : : y<br />

c a l c a r a i z= a + s q r t ( y )<br />

return<br />

end function c a l c a r a i z<br />

end program r o t i n t<br />

No restante deste capítulo, serão descritas várias propriedades que se aplicam a sub-programas internos,<br />

externos e a rotinas de módulos.<br />

<strong>8.</strong>2.3 Argumentos de sub-programas<br />

Argumentos de sub-programas fornecem um meio alternativo para que duas unidades de programa compartilhem<br />

os mesmos dados. Estes consistem em uma lista de variáveis escalares ou matriciais, constantes, expressões<br />

escalares ou matriciais e até mesmo os nomes de outras rotinas. Os argumentos de um sub-programa são muitas<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!