- •«Информатика»
- •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. Графическое моделирование функции
24. Подпрограмма function
В общем виде подпрограмма-функция записывается:
[тип] FUNCTION имя подпрограммы (список формальных параметров)
REAL
INTEGER
COMPLEX
CHARACTER
выполняемые операторы
.
.
.
имя=результат
RETURN
END
[тип] – REAL, INTEGER, COMPLEX, CHARACTER. Скобки [ ] означают, что содержимое этих скобок можно не записывать.
После оператора FUNCTIONв подпрограмме следуют выполняемые операторы. ПодпрограммаFUNCTIONобязательно заканчивается операторамиRETURNиEND.
Имя подпрограммы должно записываться по правилам языка ФОРТРАН, то есть все подпрограммы-функции считаются вещественного типа, за исключением тех, имя которых начинается на буквы I,J,K,L,M,N.
Список формальных параметров может состоять из имён переменных, имён массивов.
Операторы.Внутри подпрограммы-функции могут быть любые операторы языка ФОРТРАН (включаяDIMENSION, ввод-вывод данных, циклы:DO,IF). Подпрограмма-функция может содержать свои операторные функции, может обращаться к другим подпрограммам и подпрограммамFUNCTION.
Примечание:
Особенностью работы подпрограммы FUNCTION является то, что результатом вычисления является одно число и этот результат должен быть присвоен имени функции.
Оператор RETURNслужит для выхода из подпрограммыFUNCTIONи передачи результата вычисления в головную программу на то место, откуда шло обращение к подпрограмме-функции.
Подпрограмма-функция может быть включена в один файл с головной подпрограммой и размещаться до начала головной подпрограммы или после оператора ENDголовной программы.
Подпрограмма-функция транслируется отдельно от головной программы. Но в файл *.lst, который создаётся на этапе трансляции, текст и ошибки головной программы записываются отдельно от текста и ошибок подпрограммы.
Чтобы обратиться к подпрограмме-функции необходимо (как и в случае с оператор-функцией) указать имя подпрограммы-функции и список фактических параметров. Результатом работы подпрограммы-функции является одно число и это число возвращается в программу на то место, откуда осуществляется вызов.
Правило:
Список фактических параметров должен соответствовать списку формальных параметров по:
количеству
очерёдности следования
типу данных
по размерности массивов.
Размерность одного и того же массива в подпрограмме-функции не должна превышать размерности соответствующего массива головной программы.
Пример:
Вычислить: , используя для вычисления суммы и максимального значения массива подпрограммы-функции.
Решение:
Прежде, чем написать подпрограмму-функцию, необходимо определить список формальных параметров, то есть перечень всех значений параметров, от которых зависит вычисление этой функции.
В данном примере функцию вычисления суммы нужно будет использовать 3 раза для трёх разных массивов; функцию нахождения максимального элемента массива необходимо использовать также 3 раза для трёх разных массивов.
Чтобы вычислить сумму элементов массива нам нужно знать количество элементов массива и иметь численные значения этих элементов массива. При нахождении максимального элемента массива нам необходимо иметь те же данные.
Для нахождения суммы всех элементов массива Х создадим подпрограмму-функцию SUMF(X,N), где Х – имя обрабатываемого массива, аN– размерность массива. Для нахождения максимального элемента массива Х создадим подпрограмму-функциюFMAX(X,N), где Х – обрабатываемый массив, аN– количество элементов этого массива.
В головной программе мы будем вводить исходные данные для решения задачи, засылать массивы А, В, С с количеством элементов этих массивов, в подпрограммы (SUMFилиFMAX), там будут производиться необходимые вычисления, а назад будут возвращаться результаты этих вычислений.
С Головная программа
DIMENSION A(10),B(20),C(15)
READ (5,2) A,B,C
FORMAT(G8.3)
При вводе по такому формату необходимо вводить значения элементов массивов А, В, С по одному и после каждого элемента нажимать ввод. Если записать (5F8.2), то необходимо будет вводить по 5 чисел в строку и нажимать ввод, что гораздо удобнее.
BET=SUMF(A,10)/FMAX(A,10)-SUMF(B,20)/FMAX(B,20) *+2.*SUMF(C,15)/FMAX(C,15)**2
В SUMF(А,10) идёт обращение к подпрограмме-функции SUMF вычисления суммы всех элементов массива. Здесь фактическими параметрами является массив А и количество элементов этого массива – 10. Аналогично эту функцию мы использовали для массивов В и С.
WRITE (6,*) ‘Бета =’,BET
PAUSE
STOP
END
C Подпрограмма-функция SUMF
FUNCTION SUMF(X,N)
В подпрограмму-функцию передаётся массив Х и этот массив обязательно нужно описать, хотя он и описан в головной программе. Описание осуществлено при помощи DIMENSION.
DIMENSION X(100)
SUMF=0.
DO 2 I=1,N
Несмотря на то, что метка 2 уже используется в головной программе, эту метку можно использовать и в подпрограмме. Имена переменных и номера меток в головной программе и в подпрограммы независимы. Стыковка головной программы и подпрограммы осуществляется только через список формальных – фактических параметров.
SUMF=SUMF+X(I)
RETURN
END
C Подпрограмма-функция FMAX
FUNCTION FMAX(X,N)
DIMENSION X(N)
Здесь выполнено динамическое описание массива Х (описание массива переменной размерности). Такое описание массивов возможно ТОЛЬКО в подпрограммах и только в тех случаях, когда имя массива и его размерность записаны в списке формальных параметров. В головной программе так описывать массивы нельзя. (Типичная ошибка).
FMAX=X(1)
DO 3 I=2,N
FMAX=AMAX1(FMAX,X(I))
RETURN
END