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

22. Подпрограммы

К подпрограммам относятся:

  1. оператор-функция, то есть функция, задаваемая пользователем

  2. подпрограмма FUNCTION

  3. подпрограмма SUBROUTINE.

23. Оператор-функция

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

В общем виде оператор-функция записывается:

f(список формальных параметров) = выражение

Пример:

SFUN(X,Y)=EXP(X)+SQRT(X+Y)+ALOG(Y)*2.*D

имя формальные выражение

функции параметры

Задавая различные значения XиY, эта оператор-функция всегда будет вычислять арифметическое выражение по заданной формуле.

Примечание:

В арифметических выражениях кроме переменных, указанных в списке формальных параметров, могут присутствовать и другие переменные (например, переменная D, используемая в предыдущем примере). Значение этой переменной D будет извлекаться из памяти ЭВМ.

Обращение к оператор-функции осуществляется путём указания имени функции и записи в скобках фактических параметров.

Например, вычислим арифметическое выражение с использованием оператор-функции:

=2.*SIN(X)+SFUN(A,B)+SFUN(4.5,SIN(C))**2

фактические

параметры фактические выражение

параметры

константа

При обращении к оператор-функции SFUNфактические параметры А и В будут подставляться вместо формальных параметровXиY, затем будет осуществляться вычисление арифметического выражения оператор-функции. Результатом вычисления будет являться одно число, и это одно число возвращается на то место в программе, откуда осуществляется обращение к оператор-функции.

Затем идёт повторное обращение к оператор-функции SFUN. Во втором случае фактическими параметрами являются константа(4.5) и выражение (SIN(C)). Константа подставится вместоX, а вычисленное значение выражения будет подставляться вместоY. Производится новое вычисление арифметического выражения оператор-функции. В результате мы получим новое число, которое возвращается в программу на то место, откуда оператор-функция вызывалась второй раз.

Переменная Zвычислится как 2.*SIN(X) + результатSFUN1+ результатSFUN2

Правило:

Оператор-функция записывается в самом начале программы до первого выполняемого оператора. Желательно после оператора DIMENSION. Оператор-функция действует только в данной программной единице, в которой он описан. Тип функции (целый, вещественный …) определяется по правилам определения имен переменных или в операторах описания.

В одной программной единице может быть большое количество оператор-функций. Формальными параметрами могут быть только переменные. Фактическими параметрами могут быть:

  1. переменные

  2. константы

  3. выражения

  4. элементы массивов

Правило:

Список формальных параметров оператор-функции должен соответствовать списку фактических параметров при обращении к оператор-функции по:

  • очерёдности следования

  • по типу данных

Имя оператор-функции должно соответствовать правилам формирования имён языка ФОРТРАН, то есть все оператор-функции считаются вещественного типа, за исключением тех, имя которых начинается на буквы I,J,K,L,M,N.

Задача:

Вычислить следующие выражения, используя оператор-функцию:

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

C Описываем оператор-функцию

FOP(Z,T)=SQRT(Z*Z+T*T)

C Ввод исходных данных

WRITE(6,*)'Введите исходные данные'

READ(5,*) A,B,X,Y

D=FOP(A,B) Обращаемся к оператор-функции FOP. Фактические параметры А и В при обращении подставляются вместо формальных Z и T и с ними производится вычисление. Результат вычислений в виде вещественного числа возвращается на место обращения к оператор-функции и затем присваивается переменной D.

E=FOP(A,D)+FOP(D,B)*2.

F=FOP(A,3.5*FOP(E,D))

Q= FOP(F,FOP(SIN(X),COS(Y))) При первом обращении к оператор-функции фактическими параметрами являются выражения SIN(X) и COS(Y). При втором обращении фактическими параметрами будут F и результат первого обращения к оператор-функции.

WRITE(6,*)'D=',D,' E=',E,' F=',F,' Q=',Q

PAUSE

STOP

END

В строке F=FOP(A,3.5*FOP(E,D)) первое обращение к оператор-функции происходит дляFOP(E,D), затем второе обращение для вычисленияFOP(A,3.5*результатFOP(E,D)) и затем результат присваивается переменнойF.

В данной задаче можно использовать оператор-функцию для вычисления

FOP(F,FOP(SIN(X),COS(Y))), но при реальном программировании в таком случае проще обойтись без оператор-функцииQ=SQRT(F*F+SIN(X)**2+COS(Y)**2).

Можно, но нежелательно использовать имена формальных параметров оператор-функции внутри текста программы. При обращении к оператор-функции в ячейку с именем формального параметра (например, Zв предыдущем примере) будет помещено значение фактического параметра. При первом и втором обращении это будет переменная А. При третьем обращении переменнаяD. При четвертом обращении переменная Е. При пятом обращении переменная А. При шестом обращенииSIN(X), а при седьмом переменнаяF. Если в промежутке между этими операциями мы будем использовать переменнуюZ(например,W=2.5*Z), то необходимо учитывать, что она может содержать разные значения в разных местах программы.

Рекомендация: формальные параметры оператор-функций использовать только для описания оператор-функции и не использовать в других местах программы.

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

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