A function
subprogram is a complete, separate program that computes a single value that is
returned to the main program in the function name. A function subprogram may contain any Fortran
statement. Here is an example of a function which calculates an average of three numbers a
,
b
, c
:
real function AVERAGE(a,b,c) implicit none real a, b, c AVERAGE = (a+b+c)/3.0 endThis expression says that our function has the name
AVERAGE
and returns one value of type
real
which will, of course, be the average of the three numbers a
,b
,c
given as arguments. The result is returned from our function by statement
AVERAGE = ...
Each function is a separate subprogram which can be called from the main program
part, or any
other function or subroutine of your code. In order to make our function AVERAGE
accessible
from a particular place in your program, you have to first declare it, similarly as we are used to
declare variables:
real AVERAGEHence, the function
AVERAGE
can be used from the program/function/subroutine in which it was
declared. Assuming that we have three numbers num1
, num2
, num3
, you can
calculate their average by simply calling
: navg = AVERAGE(num1,num2,num3) :Obviously, the data type of
navg
has to be first declared to be real
, same as the
return type of the function AVERAGE
.
Problem: Write a function which calculates the factorial of a given number. Write a
program
part which calls this function and prints the result.
Solution:
program MAIN integer num, res, FACT parameter( num=5 ) res = FACT(num) write(*,'("Factorial of ",I3," is ",I5)') + num, res end !------------------------------------------------- integer function FACT(n) implicit none integer i, res, n res = 1 do i=2,n res = res*i enddo FACT = res end
Now, it should be clear to you that the statement res = FACT(num)
in the MAIN
part of
the code above calls the function FACT
which calculates the factorial of num
and
returns the result in res
. Note also, that the function FACT
was declared by
integer FACT
before actually using it.
Roman Gröger (2015-09-23)