Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
GRIGOREV.DOC
Скачиваний:
4
Добавлен:
01.07.2025
Размер:
608.26 Кб
Скачать

2.11. Подпрограммы subroutine, function и interface

В языке FORTRAN так же, как в языке PASCAL, есть подпрограммы-процедуры (SUBROUTINE) и подпрограммы-функции (FUNCTION). Оператор заголовка процедуры имеет вид:

SUBROUTINE имя процедуры(параметр[[атрибуты]][,...])

параметр - это или имя параметра (допускаются параметры - переменные, массивы и подпрограммы), или символ *. Тип параметра в операторе SUBROUTINE не указывается; если это необходимо, параметры описываются внутри процедуры. Процедура заканчивается оператором END и располагается вне любой другой подпрограммы и главной программы так же, как в языке C. Подпрограммы могут находиться в том же файле, что и главная программа, или в других файлах. Процедура вызывается в главной программе или в другой подпрограмме специальным оператором вызова CALL:

CALL имя(список аргументов)

Рекурсия в языке FORTRAN запрещена. Количество и типы аргументов в операторе CALL должны точно соответствовать количеству и типам параметров в операторе SUBROUTINE. Все параметры по умолчанию передаются в процедуры по адресу, это означает, что все действия над параметрами в процедуре фактически осуществляются над аргументами. Чтобы передать аргумент по значению, необходимо в операторе SUBROUTINE для соответствующего параметра задать атрибут VALUE. Атрибуты задаются в квадратных скобках после имени параметра. Параметр процедуры может быть массивом любой размерности. Такой параметр должен быть обязательно описан внутри процедуры. В описании измерений массива-параметра можно использовать не только константы, но и параметры-переменные данной процедуры, что позволяет записывать процедуры, которые могут обрабатывать массивы переменного размера. Кроме того, разрешается верхнюю границу последнего измерения параметра-массива задавать символом *. Если предполагается, что нижняя граница индекса всегда равна 1, то одномерный массив-параметр описывается в виде имя(*). Параметры-массивы также можно объявлять с атрибутом VALUE, но в этом случае они не могут иметь переменный размер.

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

Intrinsic список имен

если это любая другая функция или процедура, то следует использовать оператор

EXTERNAL список имен

Некоторые стандартные функции запрещено использовать в качестве аргументов.

Формальным параметром процедуры может быть *. Аргументом, соответствующим такому параметру, должна быть конструкция *метка. Параметры такого типа используются следующим образом : внутри процедуры можно записывать любое количество операторов

RETURN

или

RETURN целое выражение

Первый оператор приводит к завершению процедуры и передаче управления оператору, следующему за оператором CALL в вызывающей программной единице. Второй оператор также завершает выполнение процедуры, но управление передается оператору с меткой, равной значению одного из аргументов. Значение целочисленного выражения после RETURN определяет порядковый номер метки среди аргументов-меток. Например, программа

SUBROUTINE A ( *,*,x,*,* )

INTEGER x

IF(x.LT.0) RETURN 1

IF(x.EQ.0) RETURN 2

IF(x.LE.10) RETURN 3

RETURN 4

END

CALL A( *100,*200,5,*300,*400)

STOP '0'

100 STOP '1'

200 STOP '2'

300 STOP '3'

400 STOP '4'

END

выведет на экран символ 3.

Оператор заголовка подпрограммы-функции записывается в виде:

[тип] FUNCTION имя(список параметров)

Если тип функции явно не указан, он определяется правилами умолчания. Список параметров функции аналогичен списку параметров процедуры, но не допускаются параметры - метки. Тип функции может быть целым, вещественным, комплексным, логическим и символьным. Если тип функции отличается от предполагаемого по умолчанию, то его нужно описать в вызывающей программной единице. Список параметров функции может быть пустым, в этом случае в заголовке функции можно не записывать и ( ), но при вызове функции даже с пустым списком параметров список аргументов задается обязательно в виде ( ). Внутри функции необходимо присвоить имени функции возвращаемое значение, точно так же, как в языке PASCAL. Можно использовать оператор RETURN, но без параметра (так как запрещены параметры-метки).

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

INTERFACE TO заголовок процедуры или функции

описания параметров

END

Подпрограмма INTERFACE должна находиться в том же файле, что и вызывающая программная единица.

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