Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Konspekt-T2.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
433.15 Кб
Скачать

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

Правило: Массивы можно описывать динамически только в подпрограммах и только в том случае, когда имя массива и его размерность находятся в списке формальных параметров. В головной программе динамически описывать массивы нельзя.

Оперативная память ЭВМ отводится динамическим массивам подпрограмм при работе головной программы. Эти массивы располагаются на месте реальных массивов, описанных в головной программе. Размерность динамического массива может меняться, но не может превосходить размерность соответствующего массива головной про

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]