Научная литература
booksshare.net -> Добавить материал -> Математика -> Боглаев Ю.П. -> "Вычислительная математика и программирование " -> 31

Вычислительная математика и программирование - Боглаев Ю.П.

Боглаев Ю.П. Вычислительная математика и программирование — Высшая школа, 1990. — 546 c.
ISBN 5-06-00623-9
Скачать (прямая ссылка): vychmatiprog1990.djvu
Предыдущая << 1 .. 25 26 27 28 29 30 < 31 > 32 33 34 35 36 37 .. 168 >> Следующая

[ТИП] FUNCTION F(P1,P2,...,PK)
RETURN
END
где ТИП — указатель типа данных результатов (значения функции); знаки [...] означают, что этот указатель может отсутствовать, F—имя функции, PI,..., РК—идентификаторы формальных параметров, RETURN — оператор возврата в вызывающую программу, END—оператор конца самостоятельной программной единицы.
Пример.
Функция-подпрограмма, выбирающая меньшее из двух чисел:
REAL FUNCTION SMALL(A,B)
REAL А,В
IF (A.LT.B) GO TO 1 SMALL = В GO TO 2
1 SMALL = A
2 RETURN END
Обращение к этой функции в вызывающей программе может быть, например, таким:
R = 2. + SMALL(X,Y)
В этот момент вызывающая программа передает управление функции-подпрограмме SMALL, происходит замена формальных параметров А, В на фактические X, Y (им уже должны быть присвоены значения). После этого выполняются операторы функции-подпрограммы. Результат вычислений присваивается имени функции, в рассмотренном примере: SMALL. Затем управление возвращается в вызывающую программную единицу и происходит вычисление R.
Программа на фортране может состоять из главной программы и множества FUNCTION-подпрограмм, каждая из которых заключена между заголовком FUNCTION и оператором END. Это самостоятельные программные единицы. В отличие от функции— формулы FUNCTION не определяется в другой программной единице, а вызывается из нее.
83
При трансляции функция-подпрограмма рассматривается отдельной программой, т. е. ее можно транслировать без главной программы, вызывающих ее и вызываемых ею программ. Это дает следующие возможности в программировании. Большую программу, разбивая на отдельные небольшие подпрограммы, можно отлаживать на ЭВМ отдельно, а затем собирать в единую программу.
Используемые в функции-подпрограмме переменные являются локальными, если они не объявлены в операторе COMMON (см. ниже). Поэтому переменная А в одной подпрограмме совершенно отлична от переменной А в другой программе (занимают различные ячейки памяти). Локальным переменным можно присвоить значения только в той..программной единице, где они определены, если они не передаются как фактические параметры в другую программную единицу.
Как и в функции-формуле, должно соблюдаться соответствие фактических и формальных параметров по количеству, последовательности, типу.
В качестве примера рассмотрим программу вычисления полинома
2х4 — Зх2 + х— 1
в точке л:=0,3 по схеме Горнера. Схему Горнера реализуем в виде функции-подпрограммы. В главной программе осуществим ввод, вывод числовой информации и вызов функции-подпрограммы.
Напомним, что вычисление значения Рп(х)
Р,Д.х:) = а0хп + а ххп~1 +... + ап _ х л;+ ап в точке х по схеме Горнера выполняется по формуле Р„(х) = (...(((а0л: + а1)д:+а2)д:+аз)х+..:+аи-1)х + а„
С ГЛАВНАЯ ПРОГРАММА
REAL X,A(5),Y READ (5,1) Х,А
1 FORMAT (6F4.1)
Y=P(5,A,X)
WRITE (5,2) Y
2 FORMAT (2X,'Y = ',E13.6)
END
С ФУНКЦИЯ-ПОДПРОГРАММА
FUNCTION P(M,A,X)
REAL A(M),X INTEGER M P=A(1)
DO 1 J = 2,M 1 P = P*X + A(J)
RETURN END
84 \
V..
В соответствии с числовыми данными задачи следует, согласно заказанному формату, набрать на клавиатуре терминала числа.
3. Подпрограмма обладает более широкими возможностями, нежели функция-подпрограмма. В качестве результата подпрограмма может передавать в вызывающую программу либо несколько числовых значений, либо ни одного.
Подпрограмма оформляется следующим образом:
SUBROUTINE S(P1,P2,...,PK)
RETURN
END
Первый оператор подпрограммы — SUBROUTINE, S — имя подпрограммы, PI, Р2, ..., РК—формальные параметры. Формальные параметры, являющиеся идентификаторами массивов, описываются внутри подпрограммы. Последний оператор END. Возвращение к вызывающей программе осуществляется через оператор RETURN.
Обращение к подпрограмме (вызов) производится в вызывающей программе посредством оператора CALL в форме
CALL S(Q1,...,QK)
Здесь S—имя вызываемой подпрограммы, Ql, Q2,...,QK—фактические параметры.
Пример. Подпрограмма транспонирования квадратной матрицы
SUBROUTINE TRANSP(N,A,B)
REAL A(N,N),B(N,N)
DO 10 1=1,N DO 10 J=1,N 10 B(I, J) = A(J,I)
RETURN END
Транспонированная матрица располагается в массиве В. В вызывающей программе необходимо иметь следующие операторы:
REAL Q(8,8),R(8,8)
CALL TRANSP(8,Q,R)
После работы подпрограммы TRANSP в двумерном массиве R размером 8x8 будет расположена транспонированная матрица Q. Элементам массива Q должны быть присвоены числовые значения до вызова TRANSP.
85
Список формальных параметров подпрограммы может быть пуст. Например,
SUBROUTINE ER
WRITE (5,1)
1 FORMAT (ERROR)
RETURN
END
В таком случае при вызове подпрограммы указывается только имя
CALL ER
Имени подпрограммы в отличие от функции-подпрограммы не присваивается Значение. Значения переменных передаются в подпрограмму через входные параметры (при замене формальных параметров на фактические) и возвращаются в вызывающую программу че^ез. выходные параметры. Один и тот же параметр может быть и входным и выходным.
В приведенном выше примере
входные параметры: N,A
выходные параметры: В
Соответствие фактических и формальных параметров по количеству, порядку и типу—взаимно однозначное как в функции-формуле, так и в функции-подпрограмме. Заметим, что аргументы функций и подпрограмм не подвергаются неявным преобразованиям, поэтому несоответствие типа параметров является грубой ошибкой. Транслятор этот факт не отмечает в диагностике ошибок, поэтому на этапе вычислений, как цравило, происходит аварийный останов.
Предыдущая << 1 .. 25 26 27 28 29 30 < 31 > 32 33 34 35 36 37 .. 168 >> Следующая

Реклама

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed

Есть, чем поделиться? Отправьте
материал
нам
Авторские права © 2009 BooksShare.
Все права защищены.
Rambler's Top100

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed