FORTRAN 90
Denise Yumi Takamura
SUBPROGRAMAS
Um subprograma é uma unidade de programa
independente. Sua execução é subordinada ao
programa principal ou a uma outra unidade de
programa.
A linguagem FORTRAN 90 permite dois tipos de
subprogramas: FUNÇÕES E SUB-ROTINAS.
FUNÇÕES
Uma função é um procedimento que resulta em um
número, valor lógico, string ou array.
A função é chamada pelo nome de uma expressão. Sua
execução começa no topo da função e termina quando
há a declaração RETURN ou um END FUNCTION.
.
SUB-ROTINAS
Sub-rotina não retorna necessariamente apenas
um valor, como no caso das funções; nenhum
valor é associado a sub-rotina.
SUBROUTINE nome (lista de parâmetros)
Para chamar a sub-rotina, usa-se o comando
CALL.
CALL nome (lista de parâmetros)
Para retornar a sub-rotina usa-se a declaração
END SUBROUTINE.
Ex: Subroutine hipotenusa
DUMMY ARGUMENTS
A lista de argumentos pode conter variáveis, arrays
ou ambos que são passados pela chamada do
programa para a sub- rotina. Estas variáveis são
chamadas “dummy arguments” desde que a
sub-rotina não aloque nenhuma memória para
elas.
PASSAGEM POR REFERÊNCIA
Nessa implementação, em vez de transmitir
valores de dados, ela transmite um caminho de
acesso, usualmente apenas um endereço, para
o subprograma chamado.
Ex: Program bad_call
PROGRAM bad_call
IMPLICIT NONE
REAL :: x=1
CALL bad_argument(x)
END PROGRAM
SUBROUTINE bad_argument (i)
IMPLICIT NONE
INTEGER ::i = 0
WRITE(*,*),' I= ', i
END SUBROUTINE
PASSAGEM POR ARRAYS
Se o parâmetro for um arranjo, então o ponteiro
aponta para o 1º valor no array. Porém a subrotina precisa saber o local e o tamanho do
array para garantir que ele fique dentro do limite
do array e da execução das operações.
Ex: Program array
PROGRAM array
IMPLICIT NONE
INTEGER :: i
REAL, DIMENSION (5) :: a =0
CALL sub (a, 5, 6)
DO i = 1,6
WRITE(*,100) i, a(i)
100 FORMAT(1X,'A(',I1,') = ', F6.2)
END DO
END PROGRAM
SUBROUTINE sub (a, ndim, n)
IMPLICIT NONE
INTEGER, INTENT(IN) :: ndim
REAL, INTENT(OUT), DIMENSION(ndim) :: a
INTEGER, INTENT(IN) :: n
INTEGER :: i, j = 0
DO i = 1, n
j = j + (2 * i)
a(i) = j
j = j +3
END DO
END SUBROUTINE sub
PASSAGEM DE VARIÁVEIS
Quando uma variável caracter é usada como
“dummy argument” o seu tamanho é declarado
com um asterisco.
Ex:
exemplo (string)
CHARACTER (len=*), INTENT
(IN):: string
MÓDULOS
A estrutura de um módulo é quase idêntica a
estrutura de um programa. São utilizados no
caso de existirem parâmetros, variáveis e
subprogramas que devem ser divididos por
muitas unidades de programas.
MÓDULOS - continuação
O módulo não contém declarações para serem
executadas no programa. Nele só pode conter
declarações e funções para serem usados em
outros módulos e programas.
Portanto, um módulo não pode existir sozinho, ele
deve ser usado com outros módulos e um
programa principal.
Ex:
MODULE
SumAverage
CONTAINS
REAL FUNCTION Sum(a, b, c)
IMPLICIT NONE
REAL, INTENT(IN) :: a, b, c
Sum = a + b + c
END FUNCTION Sum
REAL FUNCTION Average(a, b, c)
IMPLICIT NONE
REAL, INTENT(IN) :: a, b, c
Average = Sum(a,b,c)/2.0
END FUNCTION Average
END MODULE
SumAverage
RECURSIVIDADE
FORTRAN permite que funções e sub-rotinas
sejam declaradas recursivamente. A sub-rotina é
declarada recursivamente adicionando a palavra
RECURSIVE na declaração da SUBROUTINE.
RECURSIVIDADE- continuação
Pode-se definir funções recursivas também.
FORTRAN permite especificar dois diferentes
nomes, um para chamar uma função recursiva e
outro para retornar um resultado.
Ex: program fatorial
PROGRAM fatorial
IMPLICIT NONE
INTEGER :: i
WRITE(*,*) " Este programa calcula fatorial"
WRITE(*,*) "Entre com um numero positivo: "
READ(*,*) i
WRITE(*,*) " O fatorial e: ", fat(i)
contains
RECURSIVE INTEGER FUNCTION fat(n) result(F)
INTEGER n
IF(n==0) THEN
F = 1
ELSE
F = n*fat(n-1)
END IF
END function fat
end program fatorial
BIBLIOGRAFIA
• FORTRAN 90/95 for Scientists and EngineersStephen J. Chapman
• FORTRAN 90 – Loren P.Meissner
• Introdução ao
FORTRAN 77 para
microcomputadores - Ronaldo L.D. Cereda e
José Carlos Maldonado
Download

fortran 90 - 3