Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тема6.doc
Скачиваний:
5
Добавлен:
04.11.2018
Размер:
1.3 Mб
Скачать

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 *

********************

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]