Другие операторы, входящие в подпрограммную–функцию


Подпрограммная - функция всегда начинается с оператора FUNCTION и должна заканчиваться оператором END. Между ними размещаются операторы, выполняющие вычисления. Они могут использовать имена переменных из списка аргументов, а также имена переменных, являющихся локальными переменными для данной функции-подпрограммы. Локальные переменные используются только внутри подпрограммы и не имеют никакого отношения к другим переменным из главной программы или из других подпрограмм, даже если последние имеют такие же имена.

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

В подпрограмме-функции должен быть, по крайней мере, один оператор, трактующий имя функции как имя обычной переменной и присваивающий этой переменной значение. Это будет продемонстрировано в примере. Возврат управления в программную единицу, в точку вызова подпрограммы - функции, осуществляется оператором RETURN. Если подпрограмма - функция имеет разветвленную структуру, то каждая ветвь должна заканчиваться оператором RETURN. В последних версиях языка Фортран оператор END не только указывает на конец подпрограммы, но и действует как оператор RETURN. Поэтому оператор

RETURN, стоящий перед оператором END, можно опускать.

Рассмотрим программу, которая сравнивает два числа и присваивает значение большего из них переменной BIG. Выявление наибольшего из двух чисел записывается в виде подпрограммы - функции с именем BIG и двумя аргументами, которые являются именами сравниваемых переменных.

 

FUNCTION BIG (А, В)

BIG = A

IF (B.GT.A) BIG=B

END

 

Здесь следует отметить чрезвычайно важное обстоятельство: для аргументов подпрограммы - функции А и В в памяти используются только для того, чтобы указать вызывающей программной единице те точки в подпрограмме, в которые следует передать информацию, необходимую для вычислении. Имена аргументов, указанные в определении функции, называются формальными параметрами. Значения аргументов, передаваемые подпрограмме – функции, при ее вызове, называются фактическими параметрами.

 

 

Обращение к подпрограмме – функции

Имена подпрограмм - функций используются точно так же, как и имена стандартных функций. Применение подпрограмм - функций можно показать на примере программы, в которой предусмотрен ввод четырех чисел, вычисление с помощью функции BIG наибольшего из них и вывод его на печать.

 

PROGRAM CHIS

* ПРОГРАММА, ИСПОЛЬЗУЮЩАЯ ФУНКЦИЮ BIG

READ (5, *) А, В, С, D

Х = BIG (А, В)

Y = BIG (С, D)

Z = BIG (X, Y)

PRINT *, ’ ВВЕДЕНЫ ЧЕТЫРЕ ЧИСЛА’, А, В, С, D

PRINT *, ’ НАИБОЛЬШЕЕ ИЗ НИХ Z= ', Z

END

 

* ОПРЕДЕЛЕНИЕ ФУНКЦИИ BIG

FUNCTION BIG (A, B)

BIG=A

IF (В. GT. A) BIG =В

END

 

При первом обращении к функции BIG сравниваютсязначения А и В.Несмотря на то, что используются одни и те же имена для фактическихпараметров в главной программе и для формальныхпараметров в определении функции, формальные и фактические параметры рассматриваются как совершенно разные объекты. Во втором и третьем вызове функции BIG фактическими параметрами являются (С, D) и (X, Y), которые имеют имена, отличные от имени формальных параметров. При использовании функции BIG происходит следующее.



Сначала вычисляются фактические параметры. Если фактический параметр - константа, то эта константа передается в подпрограмму - функцию, если фактический параметр - переменная, то в подпрограмму - функцию передается ее значение. При этом первый по порядку формальный параметр получает значение первого фактического параметра. Аналогично значение второго фактического параметра связывается со вторым формальным параметром и т.д. Поскольку формальные параметры функции BIG вещественны, то значения фактических параметров также должны быть вещественными, иначе компьютер выдает сообщение об ошибке.

После того, как значения формальных параметров стали определенны, далее операторами подпрограммы вычисляется требуемое значение. Это значение присваивается имени BIG, которое затем "подставляется" вместо имени BIG и фактических аргументов в оператор главной программы, который вызвал подпрограмму - функцию BIG. На этом связь между фактическими и формальными параметрами заканчивается. Единственное, что требовалось подпрограмме - функции BIG от фактического параметра - это его вещественное значение. Кроме соответствия типов формальных и фактических параметров, программист должен следить за тем, чтобы число фактических параметров равнялось числу формальных параметров. Поэтому в операторе Q = BIG(3, ХО+BIG(X, Y, Z)) оба вызова функции BIG недопустимы. Первый вызов недопустим потому, что первый аргумент целый, а второй из-за того, что число фактических аргументов равно трем.

Однако в операторе R = BIG(2.8, 3.5) + BIG(A*В, SQRT(С)) + BIG(X(I, J), Y(2)) все три вызова допустимы. Здесь следует обратить внимание на то, что в качестве фактических параметров используются элементы вещественных массивов и арифметические выражения, т.е. фактическим параметром подпрограммы может быть любая конструкция Фортрана, сводящаяся к одному значению.

 

 

Примеры решения заданий к лабораторной работе № 5

Пример 1: Составить программу вычисления суммы факториалов всех нечетных целых чисел от 1 до 11 с ис­пользованием подпрограммы FUNCTION вычисления факториала целого аргумента n по формуле n! = 1·2·…·n.

Подпрограмме присвоим имя FACT, тип функции должен быть целочисленным. В основной программе обращение к подпрограмме осуществляется внутри цикла с параметром n, изменяющимся от 1 до 11 с шагом 2. Программа имеет вид:

 

 

подпрограмма основная программа

 

 

Здесь имена формального и фактического параметров подпрограммы SUM совпадают, в общем случае они могут быть различными, но соответствующи­ми по типам.

Пример 2. Составить программу вычисления среднего арифметического элементов массива A (50) и B (75) и вывода на печать значения большего из средних. Для вычислений использовать подпрограмму. Подпрограмма должна вычислять только один резуль­тат- среднее арифметическое элементов формального массива X, состоящего из N элементов, поэтому ее можно оформить в виде подпрограммы FUNCTION с именем, например SR и аргументами X, N. Значение результата будет присвоено имени функ­ции -переменной SR внутри подпрограммы. Формаль­ный массив X должен иметь регулируемый размер N, по­этому в операторе DIMENSION максимальное значе­ние индекса необходимо задать переменной N.

Обращение к подпрограмме SR в вызывающей про­грамме производится дважды. В первый раз при обра­щении с помощью указателя SR (А, 50) формальный массив X получает размер 50 и совмещается с фактиче­ским массивом A, с элементами которого и проводятся все вычисления, предусмотренные в подпрограмме. При обращении к подпрограмме с помощью указателя SR (В, 75) эти же действия выполняются с массивом B, состоящим из 75 элементов. Программа решения:

 

 

подпрограмма основная программа

 

 

Задания на тему: составление подпрограмм типа FUNCTION .

Составить тексты подпрограмм иблок-схемы к заданиям 1), 2).

(смотри на стр. 65 возможные варианты решений)

 

 

* 1) – FUNCTION задание–1)

* Составить подпрограмму-функцию FELIX (A, B, C, D, EPS)для нахождения кор-

* ня уравнения X*A**X-B=0 с заданной точностью EPS, если известно, что он

* находится в интервале (X1,X2).

 

PROGRAM P1

PRINT*, 'введ. переменные A,B, концы отрезка C, D, EPS'

READ (5,*) A, B, C, D, EPS

YKOR = FELIX (A, B, C, D, EPS)

PRINT*,'КОРЕНЬ УРAВНЕНИЯ'

PRINT 8, YKOR

8 FORMAT (/, 5X , ' YKOR= ' , F10.5)

END

 

* 2) – FUNCTION задание–2)

* Пользуясь разложением в ряд

* SIN(X)=x-(x**3/3!)+(x**5/5!)-(x**7/7!)+.....(-1**(n-1))*(x**(2*n-1))/

* (2*n-1)!+.... , составить подпрограмму-функциюSINUS(X, EPS) для вычисления

* значений SIN(X) с заданной точностью EPS.

 

PROGRAM PSIN

PRINT*, ' ввести значение Х, а также точность (погрешность) EPS '

READ (5,*) X,EPS

P=SINUS(X, EPS)

PRINT 1,P

1 FORMAT (//, 5X ,' SIN(X)= ' , F10.8)

END

РАЗДЕЛ VI.Лабораторная работа № 6









Последнее изменение этой страницы: 2016-04-07; Нарушение авторского права страницы

infopedia.su не принадлежат авторские права, размещенных материалов. Все права принадлежать их авторам. Обратная связь