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

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

  1. 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 уже используется в головной программе, эту метку можно использовать и в подпрограмме. Имена переменных и номера меток в головной программе и в подпрограммы независимы. Стыковка головной программы и подпрограммы осуществляется только через список формальных – фактических параметров.

  1. SUMF=SUMF+X(I)

RETURN

END

C Подпрограмма-функция FMAX

FUNCTION FMAX(X,N)

DIMENSION X(N)

Здесь выполнено динамическое описание массива Х (описание массива переменной размерности). Такое описание массивов возможно ТОЛЬКО в подпрограммах и только в тех случаях, когда имя массива и его размерность записаны в списке формальных параметров. В головной программе так описывать массивы нельзя. (Типичная ошибка).

FMAX=X(1)

DO 3 I=2,N

  1. FMAX=AMAX1(FMAX,X(I))

RETURN

END

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