- •«Информатика»
- •21. Оператор format
- •Спецификация X
- •Спецификация I
- •Правило:
- •Разделители
- •Спецификация f
- •Особенности набора числовых данных при вводе информации
- •Использование повторителей в операторе format
- •Примечание
- •Вывод по спецификации Fw.D
- •Ввод по спецификации Ew.D
- •Вывод информации по спецификации Еw.D
- •Примечание: При бесформатном выводе данные автоматически выводятся по спецификации е15.7. Ввод и вывод информации по спецификации Gw.D
- •22. Подпрограммы
- •23. Оператор-функция
- •24. Подпрограмма function
- •Правило:
- •Правило:
- •Мини задача 1:
- •If(y1(1).Gt.Y1(2)) write(*,*)'Максимум на левой границе
- •If(y1(100).Gt.Y1(99)) write(*,*)'Максимум на правой границе
- •25. Подпрограмма subroutine.
- •Примечания:
- •26. Способы передачи данных в подпрограмму.
- •If (логическое выражение 1) return 1
- •If (логическое выражение 2) return 2
- •Примечание:
- •27. Передача данных посредством оператора common
- •Правило:
- •28. Использование библиотек стандартных программ (бсп)
- •If(ier.Eq.1) write (6,*)’Нет решения. Проверьте исходные данные’
- •If(ier.Eq.2) write (6,*)’Неверное количество уравнений’
- •29. Графическое моделирование функции
22. Подпрограммы
К подпрограммам относятся:
оператор-функция, то есть функция, задаваемая пользователем
подпрограмма FUNCTION
подпрограмма 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. Оператор-функция действует только в данной программной единице, в которой он описан. Тип функции (целый, вещественный …) определяется по правилам определения имен переменных или в операторах описания.
В одной программной единице может быть большое количество оператор-функций. Формальными параметрами могут быть только переменные. Фактическими параметрами могут быть:
переменные
константы
выражения
элементы массивов
Правило:
Список формальных параметров оператор-функции должен соответствовать списку фактических параметров при обращении к оператор-функции по:
очерёдности следования
по типу данных
Имя оператор-функции должно соответствовать правилам формирования имён языка ФОРТРАН, то есть все оператор-функции считаются вещественного типа, за исключением тех, имя которых начинается на буквы 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), то необходимо учитывать, что она может содержать разные значения в разных местах программы.
Рекомендация: формальные параметры оператор-функций использовать только для описания оператор-функции и не использовать в других местах программы.
Оператор-функцию располагать только в начале программы. Если поставить ее в середине или другой части программы, транслятор может не найти ошибку, и результат работы программы будет непредсказуем.