IF (E l.L E .E ) GO TO 10 X0 = X1
10 W R IT E (6,11)X1 11 F O R M A T ( E l3.6)
3. Определение м аксимального элемента м атрицы W { l, /) , І < / , / < 1 0 :
А М А Х = W (l,l) DO 5 І= 1 ,Ю DO 5 J = 1,10
IF (W (I,J).G T.A M A X ) AM A X = W (I,J) 5 C O N T IN U E
Перед обращ ением к функции-формуле всем фактическим пара
м етрам долж ны бы ть уже присвоены значения.
Обращение к функции-формуле м ож ет быть только в той програм м ной единице (это понятие вводится в этом разделе ниже), где она определена.
2. Ф ункция-подпрограмма применяется тогда, когда вычисление значения функции не сводится к одному арифметическому выраже
нию. Определяется ф ункция-подпрограмма следую щ им образом:
[Т И П ] F U N C T IO N F(P1,P2,...,PK) R E T U R N
E N D
где Т И П — указатель типа данных результатов (значения функции);
знаки [...] означаю т, что этот указатель м ож ет отсутствовать, F — им я функции, Р 1 Р К — идентификаторы ф ормальны х пара
метров, R E T U R N — оператор возврата в вы зы ваю щ ую программу, EN D — оператор конца сам остоятельной програм м ной единицы.
Пример.
Ф ункция-подпрограмма, вы бираю щ ая меньш ее из двух чисел:
R EA L F U N C T IO N SMALL(A,B) R EA L А,В
IF (A.LT.B) GO TO 1 SM ALL = В
GO TO 2 1 SM ALL = A 2 R E T U R N
EN D
Обращение к этой функции в вызываю щ ей програм м е может быть, например, таким:
R = 2. + SM ALL(X,Y)
В этот м ом ент вы зы ваю щ ая програм м а передает управление функции-подпрограмме SM A LL, происходит зам ена формальных парам етров А, В на фактические X, Y (им уже долж ны бы ть присвоены значения). После этого вы полняю тся операторы функ
ции-подпрограмм ы . Результат вычислений присваивается имени функции, в рассмотренном примере: SM ALL. Затем управление возвращ ается в вы зы ваю щ ую програм м ную единицу и происходит вычисление R.
П р о гр ам м а на ф ортране м ож ет состоять из главной програм м ы и м нож ества F U N C T IO N -подпрограм м , каж дая из которы х заклю чена между заголовком F U N C T IO N и оператором EN D . Э то самостоятельны е програм м ны е единицы. В отличие от функ
ц и и — ф ормулы F U N C T IO N не определяется в другой программной единице, а вызывается из нее.
П ри трансляции ф ункция-подпрограмма рассматривается отдель
ной програм м ой, т. е. ее можно транслировать без главной програм м ы , вызывающ их ее и вызываемых ею програм м . Э то дает следующие возможности в программировании. Больш ую програм м у, разбивая на отдельные небольшие подпрограм м ы , м ож но отлаж ивать на ЭВМ отдельно, а затем собирать в единую программу.
И спользуемые в функции-подпрограмме переменные являю тся локальны м и, если они не объявлены в операторе C O M M O N (см.
ниже). П оэтом у переменная А в одной подпрограмме совершенно отлична от переменной А в другой программе (заним аю т различные ячейки памяти). Л окальны м переменным можно присвоить значения только в той программной единице, где они определены, если они не передаются как фактические параметры в другую про
грам м ную единицу.
К ак и в функции-формуле, должно соблю даться соответствие фактических и формальных парам етров по количеству, последова
тельности, типу.
В качестве примера рассмотрим програм м у вычисления поли
ном а
2 х * - З х 2 + х - \
в точке х = 0,3 по схеме Горнера. Схему Горнера реализуем в виде функции-подпрограммы. В главной програм м е осуществим ввод, вы вод числовой информации и вызов ф ункции-подпрограммы.
Н апом ним , что вычисление значения Рп(х) Рп{х) = а0х п + а хх п~ 1 + ... + ап_ 1х + а п в точке х по схеме Горнера выполняется по формуле
р п ( * ) = (■■■ {((a0x + a l ) x + a l ) x + a i ) x + . . . + a n_ l) x + a n.
С ГЛ А В Н А Я П РО ГРА М М А R EA L X,A(5),Y
R EA D (5,1) Х,А
1 F O R M A T (6F4.1)
Y = Р (5,А ,Х ) W R ITE (5,2) Ү
2 FO R M A T (2Х,'Ү = ',Е13.6)
EN D
С Ф У Н К Ц И Я -П О Д П Р О Г РА М М А FU N C T IO N Р(М,А,Х)
REAL А(М),Х IN T E G E R М Р = А(1) DO 1 J = 2,M 1 P = P*X + A(J)
R E T U R N E N D 84
В соответствии с числовыми данными задачи следует, согласно заказанном у ф орм ату, набрать на клавиатуре терм инала числа.
3. Подпрограмма обладает более ш ирокими возмож ностями, нежели ф ункция-подпрограмма. В качестве результата подпро
грам м а может передавать в вы зы ваю щ ую програм м у либо несколь
ко числовых значений, либо ни одного.
П одпрограм м а оф орм ляется следую щ им образом:
SU B R O U T IN E S(P1,P2,...,PK)
R ETU R N EN D
Первый оператор подпрограм м ы -S U B R O U T IN E , S имя под
программы , P I, Р2, ..., Р К — ф ормальные параметры . Ф ормальные параметры, являю щиеся идентиф икаторами массивов, описываю тся внутри подпрограм м ы . Последний оператор EN D . Возвращение к вызываю щ ей програм м е осуществляется через оператор R ETU R N .
Обращ ение к подпрограм м е (вызов) производится в вызываю щ ей програм м е посредством оператора CA LL в форме
CA LL S(Q1,...,QK)
Здесь S — им я вы зы ваемой подпрограм м ы , Q l, Q 2,...,Q K — ф акти
ческие параметры.
Пример. П од п рограм м а транспонирования квадратной матрицы SU B R O U T IN E TRA N SP(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)
R ETU R N EN D
Транспонированная м атрица располагается в массиве В.
В вызываю щ ей програм м е необходимо иметь следующие операторы:
REAL Q(8,8),R(8,8) CA LL T R A N SP(8,Q ,R )
После работы подпрограм м ы TR A N SP в двумерном массиве R разм ером 8 x 8 будет расположена транспонированная м атрица Q. Э лементам массива Q долж ны бы ть присвоены числовые значения до вы зова TR A N SP.
85
Список формальных парам етров подпрограм м ы мож ет быть пуст. Н апример,
SU B R O U T IN E ER W R ITE (5,1)
1 F O R M A T ('E R R O R ') R E T U R N
EN D
В таком случае при вызове подпрограм м ы указывается только имя
C A LL ER
И мени подпрограм м ы в отличие от ф ункции-подпрограммы не присваивается значение. Значения переменных передаю тся в под
програм м у через входные парам етры (при замене ф ормальны х парам етров на фактические) и возвращ аю тся в вызываю щ ую програм м у через выходные параметры. Один и тот же парам етр м ож ет бы ть и входным и выходным.
В приведенном выше примере входные параметры: N,A выходные параметры: В
Соответствие фактических и формальных парам етров по количе
ству, порядку и типу — взаимно однозначное как в функции-формуле, так и в функции-подпрограмме. Заметим, что аргументы функций и подпрограм м не подвергаю тся неявным преобразованиям, поэтому несоответствие типа параметров является грубой ошибкой. Т рансля
т о р этот факт не отмечает в диагностике ошибок, поэтом у на этапе вычислений, как правило, происходит аварийный останов.
Ф ункция-подпрограмма и подпрограм м а назы ваю тся процеду
рам и ф ортрана.
П оясним общую структуру произвольной програм м ы . П р о грам м ы м огут иметь простую и модульную структуру. П рограм м а простой структуры представляет собой последовательность невы
полняем ы х и выполняемых операторов, из которых хотя бы один долж ен быть выполняемый, последний оператор EN D . И меем
51 52 SN
О ператор SN есть EN D . П рограм м а м одульной структуры состоит из нескольких самостоятельных единиц (подпрограмм, функций-подпрограмм), одна из к оторы х— главная программа.
Главная програм м а мож ет обращ аться к подпрограм м ам , эти подпрограм м ы — к другим и т. д. Выполнение програм м ы начина
ется первым выполняемым оператором главной програм м ы и закан
чивается в главной программе.
Следует отметить, что предпочтительнее писать програм м ы модульной структуры. Н акапливая подпрограм мы , пользователь 86
в дальнейш ем, как из кирпичиков, строит здание програм м ы в узкой, специальной области, все меньш е и меньш е затрачивая усилий на программирование. Таким образом , мы приходим к организации личной библиотеки п рограм м пользователя, а также к использованию уже готовы х библиотек и пакетов програм м .
Описание библиотеки ф ортран-програм м по основным разделам вычислительной м атем атики приведено в гл. 12.