Modularização: Subrotina e Função em Fortran
Modularização: Subrotina e Função em Fortran
Modularização: Subrotina e Função em Fortran
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.