Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
31
Добавлен:
02.05.2014
Размер:
527.87 Кб
Скачать

26. Способы передачи данных в подпрограмму.

Существуют два способа передачи данных в подпрограммы:

    1. Посредством списка формальных – фактических параметров

    2. Посредством оператора COMMON(“общий”).

Пример первого способа:

SUBROUTINE SUB1(A,B,C,REZ1,REZ2,FUN1,FUN2,*,*)

DIMENSION C(100)

где А, В, С – исходные дынные

REZ1,REZ2 – результаты работы подпрограммы

FUN1,FUN2 – имена функций, которые передаются в подпрограмму.

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

Продолжение примера:

If (логическое выражение 1) return 1

If (логическое выражение 2) return 2

Если выполняется (истинно) логическое выражение 1, то идёт возвращение на первый символ “ * ” списка формальных параметров, если истинно логическое выражение 2 – на второй символ “ * ”.

RETURN

END

В головной программе должно идти обращение к подпрограмме SUBROUTINEи должен быть указан список фактических параметров.

Продолжение примера:

С Головная программа

EXTERNAL SIN, COS

DIMENSION C1(100)

READ(*,*)A1,B1,C1

CALL SUB1(A1,B1,C1,RE1,RE2,SIN,COS,*25,*35)

исходные результаты имена метки

данные функций

  1. IF(RE1.GT…)…

  1. DO 8 J=1,N

На метки 25 и 35 передаётся управление, когда выход из подпрограммы осуществляется по RETURN1 илиRETURN2. Передача происходит через список формальных – фактических параметров. В качестве фактических параметров могут быть имена функций, которые передаются в подпрограмму при каждом новом обращении к подпрограмме. Эти имена функций могут меняться. В подпрограмме эти имена функций могут иметь совершенно другие названия (например,FUN1,FUN2). В подпрограммах их необходимо использовать как функции.

Например:

REZ1=FUN1(A)+SQRT(FUN2(B))

Правило:

Если при обращении к подпрограмме в списке фактических параметров указано имя функции, то это имя функции должно быть описано в головной программе в операторе EXTERNAL в самом начале программы.

Пример:

EXTERNAL SIN, COS

Оператор EXTERNALотносится к операторам описания и указывает, что перечисленные в этом операторе функции являются внешними по отношению к головной программе. Это позволяет при компоновке программного модуля подключить эти внешние функции как отдельные объекты.

Примечание:

Если имена функций не будут описаны в операторе EXTERNAL, то эти функции будут восприниматься как простые переменные с соответствующими именами.

*25, *35 обозначают дополнительные точки выхода из подпрограммы. Это номера меток, на которые передаётся управление по выходу из подпрограммы с помощью RETURN1,RETURN2. В данном примере предусмотрено 3 варианта выхода из подпрограммы:

  1. обычный – если выход осуществляется по простому оператору RETURN, то после выполнения подпрограммы выполнение передаётся оператору головной программы, следующему послеCALL;

  2. выход из подпрограммы по оператору RETURN1 будет осуществляться по первому символу “ * ” в списке формальных параметров. Этому символу соответствует метка 25 в списке фактических параметров головной программы и по выходу из подпрограммы управление будет передано на метку 25;

  3. по RETURN2 возврат осуществляется на метку 35 головной программы.

Соседние файлы в папке Программирование на Фортране