6.2 Программная компонента функция
Процедуру следует оформлять в виде функции, если ее результат можно записать в одну переменную, т.е. в основную программу передается только одно значение, как в последнем случае.
Структура функции имеет следующий вид:
FUNCTION < имя функции>( [< форм.арг >])
< объявление форм.арг >
< объявление локальных объектов >
...
< вычисляемые операторы, присваивание результата >
END [ FUNCTION [ < имя функции > ] ]
Пример:
function Sum_(a,b)
real a,b,Sum_
Sum_=a+b
return
end
…
s=Sum_(1.,3.)
Функции бывают внешние и внутренние.
При задании внешней функции следует объявлять ее тип в разделе объявлений вызывающей программной единицы так же, как это делается для других объектов данных.
Внутренние процедуры обладают явно заданным интерфейсом, поэтому тип внутренней функции не должен объявляться в ее носителе
Внутренние процедуры-функции не могут содержать других внутренних процедур.
Вызов функции осуществляется путем указания ее имени в вызывающей ее программной компоненте.
Пусть требуется
вычислить выражение
,
где
,
,
.
Без применения собственных функций программа будет иметь вид:
Program bezfunc
Real, parameter :: pi=3.1415926
Real x, dx, s, fp, fm, f0
X=pi/8
Dx=0.01
F0=(sin(x)+cos(x))/(x+exp(x)) ! вычисление f(x)
Fp=(sin(x+dx)+cos(x+dx))/(x+dx+exp(x+dx)) ! вычисление f(x+dx)
Fm=(sin(x-dx)+cos(x-dx))/(x-dx+exp(x-dx)) ! вычисление f(x-dx)
S=fp/fm+f0
Write(*,’(a, f5.2)’), ‘s=’, s
end
Результат работы программы
S= 1.68
С использование инструмента функций в Фортране вычисление
![]()
можно описать как собственную внутреннюю функцию с одним формальным аргументом x после слова contains. А в программе просто использовать ее вызовы.
Program s_func
Real, parameter :: pi=3.1415926
Real x, dx, s
X=pi/8
Dx=0.01
S=f(x+dx)/f(x-dx)+f(x) ! вызов функции
Write(*,’(a, f5.2)’), ‘s=’, s
Contains
Function f(x) ! начало функции
Real x
F=(sin(x)+cos(x))/(x+exp(x)) ! вычисление выражения, результат !присваивается имени функции
End function f ! конец функции
end
Результат работы программы
S= 1.68
6.3 Процедура подпрограмма
Кроме функций, существует второй вид процедур – подпрограммы. Они являются более универсальными программными компонентами, т.к. могут возвращать в основную программу не только значения вычислений, но и осуществлять определенные действия (например, выполнять специальные операции ввода-вывода, обрабатывать массивы и пр.). Подпрограммы бывают внутренние и внешние.
Структура подпрограммы имеет следующий вид:
SUBROUTINE < имя подпрограммы>( [< форм.арг >])
< объявление форм.арг >
< объявление локальных объектов >
< вычисляемые операторы, присваивание результата >
END [ SUBROUTINE [ < имя подпрограммы > ] ]
Также как и функция, подпрограмма записывается отдельно от основной программы, после оператора Contains. Подпрограммы, описанные внутри программы после оператора Contains , называются внутренними подпрограммами.
Вызов подпрограммы происходит при помощи оператора call, после которого следует имя подпрограммы и фактические параметры. При использовании подпрограмм формальные и фактические параметры могут отсутствовать.
Рассмотрим пример программы, выводящей рамку с сообщениями.
program ramka
character(12) s
s=’ ATTENTION ’; call message(s)
write(*,*)
s=’ stop ’
Contains
subroutine message(text)
character(12) text
write(*,*)’********************’
write(*,*)’* ’,s,’ *’
write(*,*)’********************’
end subroutine message
end
Результат работы программы
********************
* ATTENTION *
********************
********************
* STOP *
********************
