180 likes | 550 Views
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.
E N D
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ÇÕESESUB-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_callIMPLICIT NONEREAL :: x=1CALL bad_argument(x)END PROGRAMSUBROUTINE bad_argument (i)IMPLICIT NONEINTEGER ::i = 0WRITE(*,*),' I= ', iEND 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 sub-rotina 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 arrayIMPLICIT NONEINTEGER :: iREAL, DIMENSION (5) :: a =0CALL sub (a, 5, 6)DO i = 1,6 WRITE(*,100) i, a(i) 100 FORMAT(1X,'A(',I1,') = ', F6.2)END DOEND PROGRAMSUBROUTINE sub (a, ndim, n)IMPLICIT NONEINTEGER, INTENT(IN) :: ndimREAL, INTENT(OUT), DIMENSION(ndim) :: aINTEGER, INTENT(IN) :: nINTEGER :: i, j = 0DO i = 1, n j = j + (2 * i) a(i) = j j = j +3END DOEND 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 SumAverageCONTAINS 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 AverageEND 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 fatorialIMPLICIT NONEINTEGER :: iWRITE(*,*) " Este programa calcula fatorial"WRITE(*,*) "Entre com um numero positivo: "READ(*,*) iWRITE(*,*) " O fatorial e: ", fat(i)containsRECURSIVE INTEGER FUNCTION fat(n) result(F) INTEGER n IF(n==0) THEN F = 1 ELSE F = n*fat(n-1) END IF END function fatend program fatorial
BIBLIOGRAFIA • FORTRAN 90/95 for Scientists and Engineers- Stephen J. Chapman • FORTRAN 90 – Loren P.Meissner • Introdução ao FORTRAN 77 para microcomputadores - Ronaldo L.D. Cereda e José Carlos Maldonado