23.12.2013 Views

Modularização: Subrotina e Função em Fortran

Modularização: Subrotina e Função em Fortran

Modularização: Subrotina e Função em Fortran

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

PROGRAMAÇÃO DE<br />

COMPUTADORES<br />

MODULARIZAÇÃO<br />

Prof. Norminda Luiza 1


MODULARIZAÇÃO<br />

No que diz respeito a modularização de programas, a linguag<strong>em</strong> FORTRAN oferece<br />

facilidades, através de sub-rotinas e funções, o que torna possível a impl<strong>em</strong>entação de<br />

programas modulares e estruturados.<br />

Um subprograma <strong>em</strong> FORTRAN possui suas variáveis e comando próprios e, para ser<br />

executado, deve ser ativado por um programa principal ou outro subprograma.<br />

A declaração de um subprograma é feita fora do programa principal e da declaração<br />

de outros subprogramas. Geralmente, as declarações de subprogramas são feitas<br />

após o programa principal.<br />

Prof. Norminda Luiza<br />

2


SUBROUTINE<br />

Permite a construção de programas constituídos por módulos separados, deixando<br />

transparecer no programa os refinamentos sucessivos usados no desenvolvimento do<br />

algoritmo.<br />

A forma geral de declaração é a seguinte:<br />

SUBROUTINE nome (lista-de-parâmetros)<br />

declaração de parâmetros<br />

declaração de objetos locais<br />

comandos<br />

END<br />

onde:<br />

SUBROUTINE é uma palavra-chave<br />

nome é o identificador associado à SUBROUTINE, com as mesmas restrições do<br />

nome de uma variável, não podendo aparecer internamente nesta sub-rotina.<br />

lista-de-parâmetros são os parâmetros formais que serão substituídos pelos<br />

parâmetros atuais quando da chamada da sub-rotina. Os parâmetros pod<strong>em</strong> ter<br />

nomes de variáveis simples ou compostas e nomes de outros sub-programas<br />

Prof. Norminda Luiza<br />

3


SUBROUTINE<br />

A sub-rotina deve conter pelo menos um comando<br />

RETURN<br />

que indica o final lógico da sub-rotina e retorna o controle para o programa ou<br />

subprograma que a chamou<br />

Uma SUBROUTINE é ativada através do comando<br />

CALL nome (lista-de-parâmetros)<br />

onde:<br />

CALL é uma palavra-chave<br />

nome é o nome da SUBROUTINE<br />

lista-de-parâmetros são os parâmetros atuais os quais irão substituir os parâmetros<br />

formais durante a execução da sub-rotina.<br />

Os parâmetros atuais de um comando CALL dev<strong>em</strong> corresponder <strong>em</strong> número,<br />

ord<strong>em</strong>, tipo e dimensão aos parâmetros formais da declaração SUBROUTINE.<br />

Todavia é possível o uso de dimensões ajustáveis.<br />

A passag<strong>em</strong> de parâmetros <strong>em</strong> FORTRAN é usualmente feita por referência<br />

Prof. Norminda Luiza<br />

4


program ord<strong>em</strong>crescente<br />

implicit none<br />

real L,M,N<br />

!leitura dos numeros<br />

read L,M,N<br />

if ((L .gt. M) .or. (L.gt.N)) then<br />

if (M .lt. N) then<br />

call troca(L,M)<br />

else<br />

call troca(L,N)<br />

endif<br />

endif<br />

if (M .gt. N) call troca(M,N)<br />

!Escrita dos resultados<br />

print*, L,M,N<br />

stop<br />

end<br />

!<strong>Subrotina</strong> para troca de dois el<strong>em</strong>entos<br />

subroutine troca(a,b)<br />

real a, b !declaração dos parâmetros<br />

real aux !declaração dos objetos<br />

locais<br />

aux = a<br />

a = b<br />

b = aux<br />

return<br />

end<br />

Prof. Norminda Luiza<br />

5


FUNCTION<br />

É um módulo de programa s<strong>em</strong>elhante à SUBROUTINE, mas que t<strong>em</strong> a característica<br />

especial de só poder ser ativada <strong>em</strong> uma expressão pertencente a um comando do<br />

programa.<br />

A forma geral de declaração é a seguinte:<br />

tipo FUNCTION nome (lista-de-parâmetros)<br />

declaração de parâmetros<br />

declaração de objetos locais<br />

comandos<br />

END<br />

onde:<br />

tipo pode ser INTEGER, REAL, LOGICAL, COMPLEX, DOUBLE PRECISION ou<br />

CHARACTER<br />

FUNCTION é uma palavra-chave<br />

nome é o identificador associado à SUBROUTINE, com as mesmas restrições do<br />

nome de uma variável. Deve corresponder a uma variável que tenha o seu valor<br />

atribuído por um dos comandos da função, não podendo aparecer <strong>em</strong> uma<br />

declaração DIMENSION.<br />

lista-de-parâmetros são os parâmetros formais que serão substituídos pelos<br />

parâmetros atuais quando da chamada da função. Os parâmetros pod<strong>em</strong> ter nomes<br />

de variáveis simples ou compostas e nomes de outros sub-programas.<br />

Prof. Norminda Luiza<br />

6


Programa que usa uma função lógica para verificar se um número inteiro é par<br />

program verificapar<br />

implicit none<br />

integer num<br />

logical epar<br />

print*,'Digite um número: '<br />

read*,num<br />

if (epar(num)) then<br />

print*,num, “par”<br />

else<br />

print*,num, ‘impar”<br />

endif<br />

stop<br />

end<br />

!função para verificar se o número é par<br />

logical function epar(n)<br />

integer n<br />

if (mod(n,2) .eq. 0) then<br />

epar = .true.<br />

else<br />

epar = .false.<br />

endif<br />

return<br />

end<br />

Prof. Norminda Luiza<br />

8


Programa que usa uma função comando para calcular a diagonal de um retângulo<br />

program diagonal<br />

implicit none<br />

real a,b,c,d,x,y,hipotenusa<br />

C<br />

função comando<br />

hipotenusa(x,y)=sqrt(x**2 + y**2)<br />

print*,'Digite as dimensões do paralelepípedo: '<br />

read*,a,b,c<br />

C<br />

C<br />

Cálculo do valor da diagonal principal do paralelep¡pedo<br />

d = hipotenusa(hipotenusa(a,b),c)<br />

Impressão da diagonal<br />

print*,a,b,c,d<br />

stop<br />

end<br />

Prof. Norminda Luiza<br />

9


Exercícios<br />

1. Escrever:<br />

Uma função que calcule a distância entre dois pontos de um plano, sendo<br />

fornecidas as coordenadas X1, Y1 e X2, Y2.<br />

Uma função que calcule a área do triângulo sendo dados as medidas dos lados<br />

do triângulo.<br />

Um programa que leia 10 conjuntos de dados, contendo cada um as<br />

coordenadas de três pontos Xp, Yp, Xq, Yq e Xr, Yr e determine a área do<br />

triângulo formado por estes pontos. Imprimir, para cada conjunto, as<br />

coordenadas lidas e a área determinada.<br />

onde<br />

2. Fazer um programa que:<br />

a. Leia vários pares de números inteiros positivos, M e P. O último par terá o<br />

valor zero para M e P.<br />

b. Calcule e imprima o número de arranjos e combinações de M el<strong>em</strong>entos P a<br />

P, dados pelas fórmulas:<br />

Se M < P, por definição<br />

Prof. Norminda Luiza<br />

10<br />

Utilize uma função para o cálculo do fatorial de um número.

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

Saved successfully!

Ooh no, something went wrong!