Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава 3_2.doc
Скачиваний:
25
Добавлен:
13.03.2016
Размер:
203.78 Кб
Скачать

3.10. Подпрограммы и функции

Понятие вспомогательного алгоритма уже рассматривалось в разделе 2.4. В программах на Фортране вспомогательные алгоритмы реализуются в форме процедур. Существуют две разновидности процедур: процедуры-подпрограммы и процедуры-функции. Далее их будем называть короче: подпрограммы и функции. Подпрограммы и функции могут быть внешними, внутренними и модульными.

Головная программа, модули и внешние процедуры являются самостоятельными программными единицами (и могут компилироваться отдельно друг от друга). Доступ к модулям и внешним процедурам может быть выполнен из разных программ.

Процедура реализуется в виде функции, если ее результат может быть помещен в одну переменную: простую или структурированную (массив, строка, структура). Результатом подпрограммы может быть как одна переменная, так и множество переменных или ни одной переменной.

Внутренние (встроенные) процедуры располагаются внутри головной программы после оператора contains. Внутренние процедуры не могут содержать в себе встроенных процедур. Внешние процедуры могут содержать в себе операторcontainsи следующие за ним встроенные процедуры.

Структуры процедур

Структура внеш­ней подпрограммы имеет вид:

[RECURSIVE] SUBROUTINE имя подпрограммы [([список формальных параметров])]

[операторы описания]

[исполняемые операторы]

[CONTAINS

внутренние процедуры]

END [SUBROUTINE [имя подпрограммы]]

RECURSIVE – ключевое слово, которое используется, если процедура рекурсивная (см. далее).

Внутренние подпрограммы размещаются между операторами CONTAINS и END головной программы или процедуры-носителя и имеют вид:

[RECURSIVE] SUBROUTINE имя подпрограммы [([список формальных параметров])]

[операторы описания]

[исполняемые операторы]

END SUBROUTINE [имя подпрограммы]

Вызов подпрограммы осуществляется по ее имени в операторе CALL.

Структура внешней функции:

[type] [RECURSIVE] FUNCTION имя функции ([список формальных параметров]) [RESULT (имя результата)]

[операторы описания]

[исполняемые операторы]

[CONTAINS

внутренние процедуры]

END [FUNCTION [имя функции]]

Список формальных параметров: перечисленные через запятую имена переменных и формальных процедур. Тип формальных параметров описывается после заголовка. Если тип параметра явно не описан, то он определяется согласно правилам умолчания Фортрана по первой букве имени.

Формальные параметры могут отсутствовать, если передача данных выполняется с использованием use-ассоциирования (работа с модулями), или путем связи через common-блоки - глобальные переменные. При отсутствии формальных параметров после имени функции должны следовать пустые круглые скобки. Формальные параметры функции обычно являются ее аргументами. Формальные параметры подпрограммы м.б. как аргументами, так и переменными для размещения результатов.

Результат вычисления функции либо помещается в переменную, имя которой совпадает с именем функции (при отсутствии префикса RESULT), либо заносится в переменную, описанную с префиксом RESULT.

Тип функции – это тип возвращаемого ей результата. При использовании внешней функции следует объявлять ее тип в разделе объявлений вызывающей программы так же, как это делается для других объектов данных.

После оператора CONTAINS во внешней процедуре могут быть заданы внутренние процедуры, вызов которых может быть выполнен только из процедуры-носителя и других его внутренних процедур.

Выход из процедуры происходит либо при выполнении оператора END данной процедуры, либо при выполнении специального оператора выхода – RETURN.