3.9.1 Funções

As funções são chamadas no Fortran de function, tem como utilidade, criarmos funções específicas e a utilização é semelhante a das funções intrínsecas. No Fortran temos dois tipos de funções que são as funções intrínsecas (tabela 3.2) e as funções definidas pelo programador (que é o assunto deste tópico). Quando uma função é chamada ela nos devolve um valor ou um array de valores.

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! PROGRAMA QUE CALCULA O VALOR DE UM EQUACAO POLINOMIAL
! DE GRAU 2 (fx = a*x**2 + b*x + c) ATRAVEZ DE UMA FUNCAO.
! EXEMPLO DE UMA "FUNCTION"
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
program pl2
implicit none
!
real(kind=8) :: a, b, c, x, fx
!
write(*,*)'Digite os coeficientes da equacao polinomial de grau 2'
read(*,*) a, b, c
write(*,*)'Entre com o valor de x'
read(*,*) x
!
! AS VARIAVEIS DO ARGUMENTO DE fx PODEM SER DIFERENTES DAQUELAS DO 
! ARGUMENTO DA FUNCTION. O VALOR DA VARIAVEL DEPENDE DA POSICAO QUE 
! ESTA OCUPA ASSIM: 
! a RECEBE a1, b RECEBE b1, c RECEBE c1 E x RECEBE x1.
!
write(*,*)'O valor de fx para x=',x,'e ',fx(a,b,c,x)
!
stop
end program pl2
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
! - FUNCTION QUE CALCULA O VALOR DE FX
! - ATENCAO: "FX" NAO ENTRA NA DECLARACAO DE VARIAVEIS DA FUNCAO
!            POIS SERA O OUTPUT DA FUNCAO
! - INTENT(IN): SIGNIFICA QUE AS VARIAVEIS REAIS SERAO INFORMADAS
!               ATRAVAES DO PROGRAMA PRINCIPAL
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
real(kind=8) function fx(a1,b1,c1,x1)
implicit none
!
real(kind=8), intent(in) :: a1, b1, c1, x1
!
fx = a1*(x1*x1) + b1*x1 + c1
!
end function
!

Atividade: Construa um programa que tenha as seguintes características:

Dica: o programa irá realizar o cálculo de $f(x)$ no intervalo entre $x_i$ e $x_f$ para um passo de $\Delta x = 0.1$. Calcule o número de intervalos entre $x_i$ e $x_f$ e faça o laço variar entre 1 e o número de intervalos. Assim não será necessário utilizar o comando if e o programa ficará mais rápido.