
- •1. Константы
- •2. Типы констант
- •3. Переменные
- •4. Типы переменных
- •5. Операторы описания
- •6. Арифметические операции
- •7. Расположение текста программы на экране дисплея
- •4 Write (*,*) ’ Введите значения сторон треугольника a, b, c ’
- •8. Технология прохождения фортран – программ на эвм
- •9. Арифметический оператор if
- •Оператор, следующий после if арифметического должен иметь метку;
- •If арифметический не может быть последним оператором в цикле do.
- •4 Write (*,*) ’ Введите значения сторон треугольника a, b, c ’
- •8 Write (*,*) ’ Площадь треугольника равна нулю ’
- •9 Write (*,*) ’ Такой треугольник не существует ’
- •10. If логический
- •11. Табулирование функции
- •12. Оператор цикла do
- •3 Write(6,*)’Введите переменные a,b,c’
- •13. Массивы
- •Работа с массивами
- •14. Ввод массивов
- •15. Вывод массивов
- •16. Конструкция if then–else – end if
- •17. Оператор data
- •По очерёдности следования;
- •По типу данных;
- •Количество переменных не должно превышать количество констант
- •19. Ввод двумерного массива
- •20. Оператор format
- •20.1. Спецификация X
- •20.2. Спецификация I
- •20.3 Разделители
- •20.4. Формат f
- •20.5 Использование повторителей в операторе format
- •20.6 Вывод по спецификации Fw.D
- •20.8. Вывод информации по спецификации Еw.D
- •20.8 Ввод и вывод информации по спецификации Gw.D
- •Подпрограммы
- •21. Оператор-функция
- •22. Подпрограмма-функция (function)
- •23. Подпрограмма subroutine.
- •24. Способы передачи данных в подпрограмму.
- •If (логическое выражение 1) return 1
- •If (логическое выражение 2) return 2
- •25. Передача данных посредством оператора common
22. Подпрограмма-функция (function)
В общем виде подпрограмма FUNCTION записывается:
[тип] FUNCTION <имя> (<список формальных параметров>)
< текст подпрограммы-функции >
имя=результат
RETURN
END
[тип] – REAL, INTEGER, COMPLEX, CHARACTER. Скобки [ ] означают, что содержимое этих скобок можно не записывать.
После оператора FUNCTION в подпрограмме следуют выполняемые операторы. Подпрограмма FUNCTION обязательно заканчивается операторами RETURN и END.
Имя подпрограммы должно записываться по правилам языка ФОРТРАН, то есть все подпрограммы-функции считаются вещественного типа, за исключением тех, имя которых начинается на буквы I, J, K, L, M, N.
Список формальных параметров может состоять из имён переменных, имён массивов и символов “ ” (для передачи метки в вызываемую подпрограмму).
Операторы. Внутри подпрограммы-функции могут быть любые операторы языка ФОРТРАН (включая DIMENSION, ввод-вывод данных, циклы: DO, IF). Подпрограмма-функция может содержать свои операторные функции, может обращаться к другим подпрограммам и подпрограммам FUNCTION.
Примечание: особенностью работы подпрограммы FUNCTION является то, что результатом вычисления является одно число и этот результат должен быть присвоен имени функции.
Оператор RETURN служит для выхода из подпрограммы FUNCTION и передачи результата вычисления в головную программу на то место, откуда шло обращение к подпрограмме-функции.
Подпрограмма-функция может быть включена в один файл с головной подпрограммой и размещаться до начала головной подпрограммы или после оператора END головной программы.
Чтобы обратиться к подпрограмме-функции необходимо (как и в случае с оператор-функцией) указать имя подпрограммы-функции и список фактических параметров. Результатом работы подпрограммы-функции является одно число и это число возвращается в программу на то место, откуда осуществляется вызов.
Правило: Список фактических параметров должен соответствовать списку формальных параметров по: количеству, очерёдности следования, типу данных, по размерности массивов.
Размерность одного и того же массива в подпрограмме-функции не должна превышать размерности соответствующего массива головной программы.
Пример:
Вычислить:
,
используя для вычисления суммы и
максимального значения массива
подпрограммы-функции.
Решение:
Прежде, чем написать подпрограмму-функцию, необходимо определить список формальных параметров, то есть перечень всех значений параметров, от которых зависит вычисление этой функции.
В данном примере функцию вычисления суммы нужно будет использовать 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
2 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
END
C Подпрограмма-функция SUMF
FUNCTION SUMF(X,N)
В подпрограмму-функцию передаётся массив Х и этот массив обязательно нужно описать, хотя он и описан в головной программе. Описание осуществлено при помощи DIMENSION.
DIMENSION X(100)
SUMF=0.
DO 3 I=1,N
Несмотря на то, что метка 2 уже используется в головной программе, эту метку можно использовать и в подпрограмме. Имена переменных и номера меток в головной программе и в подпрограммы независимы. Стыковка головной программы и подпрограммы осуществляется только через список формальных – фактических параметров.
3 SUMF=SUMF+X(I)
RETURN
END
C Подпрограмма-функция FMAX
FUNCTION FMAX(X,N)
DIMENSION X(N)
Здесь выполнено динамическое описание массива Х (описание массива переменной размерности). Такое описание массивов возможно ТОЛЬКО в подпрограммах и только в тех случаях, когда имя массива и его размерность записаны в списке формальных параметров. В головной программе так описывать массивы нельзя.
FMAX=X(1)
DO 4 I=2,N
4 FMAX=AMAX1(FMAX,X(I))
RETURN
END
Правило: Массивы можно описывать динамически только в подпрограммах и только в том случае, когда имя массива и его размерность находятся в списке формальных параметров. В головной программе динамически описывать массивы нельзя.
Оперативная память ЭВМ отводится динамическим массивам подпрограмм при работе головной программы. Эти массивы располагаются на месте реальных массивов, описанных в головной программе. Размерность динамического массива может меняться, но не может превосходить размерность соответствующего массива головной про