![](/user_photo/_userpic.png)
книги из ГПНТБ / Килов Х.И. Фортран для БЭСМ-4 (МИФ) учеб. пособие
.pdf-40 -
Например, описание
EQUIVALENCE (А(1), В<1), 0(5D )j
означает, что первые элементы массива В будут расположены на том же месте в памяти, что и первые элементы массива А; кроме того, элементы массива С, начиная с 51-го, будут рас положены в тех же ячейках, что и элементы массивов А и В, начиная с 1-го. Если длина массива Л - 100 элементов, мас сива В - 50 элементов и массива С - 100 элементов, то опи санное расположение массивов в памяти может быть проиллю стрировано следующей схемой:
|
АН |
1 |
|
B I — |
лсл |
С И |
V— |
1 |
4 |
sts-f |
-too |
Запрещается в одной и той ;.;е группе EQUIVALENCE использовать массивы, принадлежащие к разным видам памяти (МОЗУ-О, МОЗУ-I, динамическая память).
Запрещается прямо или косвенно (т.е. через одну и ту же или разные группы EQUIVALENCE ) делать эквивалентными элементы одного и того же массива. Так, например, неверны описания:
EQUIVALENCE |
(А(1), |
В(1), А(2)) ; |
И |
(А(1), |
В(1), С О ) ) , (С(1), А ( 1 ) ) ; |
EQUIVALENCE |
||
массиву из описания |
EQUIVALEBCE не может быть присвоен |
абсолютный (реальный) адрес (см. 2.6.2.1.3.2.). •
х Если в описании EQUIVALENCE используется двумерный массив переменной структуры (см. 2.6.2.1.3*4.), то индекс этого массива в данном описании может состоять только из одного числа или же, как исключение, из двух чисел, первое из которых должно быть единицей.
2.6.2.1.5. Описание EXTERNAL
Если идентификатор какой-либо подпрограммы А4 пеполь-
-41 -
зуется в качестве фактического параметра при обращении к
другой подпрограмме В, то идентификатор должен быть
описан в описании EXTERNAL . Соответствующий формальный параметр подпрограммы В будет формальным параметром-под
программой и также должен быть описан в описании BXTBRNAL. Описание EXTERNAL имеет вид:
EXTERNAL /S1/A1,В1,...,/S2/A2,B2,...;
где S1, 32,... - формальные параметры-подпрограммы, каж
дый из которых образует свою группу;
A1, В1, А2, В2, ... - подпрограммы - фактические па
раметры, соответствующие формальным параметрам из своих
« групп EXTERNAL.
Если в списке формальных параметров подпрограммы В
имеется формальный параметр-подпрограмма S1 , то при об ращении к подпрограмме В в списке фактических параметров
формальному паудметру 31 мотет соответствовать любая из принадлежащих к соответствующей группе EXTERNAL, подпро грамм, т.е. А1, В1, ...
Пусть например, подпрограмма SINT вычисляет интег
рал по методу Симпсона. Тогда соответствующие кусш
ФОРТРАН-программы для вычисления интеграла от функций FUN
и FF будут иметь вид:
EXTERNAL /F/FUH,FF;
SUBROUTINE 8INT( ... ,F);
END;
FUNCTION FUN(X);
END;
FUNCTI0N F F ( X ) ;
END;
-42 -
CALL SINT(...,FUN);
CALL SINT(...,PF)J
END
Описание EXTERNAL ДОЖГЛО быть глобальным описанием (см. 2.5.2), т.е. долига находиться до первого описания
какой-либо подпрограммы в ФОРТРЛН-програше.
Одна и та же подцтрограмма может входить в несколько
разных групп EXTERNAL.
Все подпрограммы из одной и той л;е грушш EXTERNAL
должны быть описаны одинаково, т.е. у них дол;:он совпадать
тип (подпрограмма типа SUBROUTINE или подпрограьп.а-функ- циял, а также количество, порядок и типы (спецификации) формальных параметров.
Подпрограммы из одной и той л;е группы EXTERNAL не должны обращаться друг к другу,т -е. если подпрограммы А1 и В1 принадлелат к одной и той ке группе EXTERNAL , то в подпрограмме А1 не долкно быть прямого или косвенного обращения к подпрограмме В1 и наоборот.
Нормальный параметр 31 из некоторой групш: EXTERNAL
может появиться в списке формальных параметров како::-лпбо
подпрограммы ке раньше, чем будет определена (описана)
(ом. 2.6.2.6.) хотя бы одна соответствующая ему подпрограм ма -фактический параметр из той ке группы EXTERNAL (т.е.
А1 ^В-** <,.»•)#
Фактический параметр из какой-либо группы EXTERNAL ке может быть идентификатором встроенной функции (см.
2.6.3,3.).
Поэтому, если, например, требуется вычислить инте
грал также и от функции SIN(X) , то следует писать (см.
также предыдущий пример): * е »
EXTERNAL /У/ ГОЛ, РР, 3IB1;
FUNCTION SIH1 (X)-, SIN1,= SIH(X);
RETURN,
END;
• • a
CALL SINT(..., SIH1) i
*О *
END
Если иэпшлъшй яарапет^чюдпрограи.'д ьотречаетсн в
описании EXTERNAL , то это л является его спецификацией
(см. также 2.6.2.СЛ.).
J3 <1'0РТРАП-програше может бить несколько описаний
EXTERNAL.
2.6.2.2. Оператор FORMAT,
Оператор F0RMAT используется при печати па АЦПУ и содержат информацию о редактировании и преобразовании пе чатаемых данных из внутреннего представления в машине во (внешнюю) строку символов на АЦПУ.
Печать на АЦПУ осуществляется с помощью оператора PRINT (см. 2.G.I.3.I.), в котором указывается метка соот ветствующего оператора F0BMAT . Поэтому оператор PflfRMAT домен всегда бить помечен. Ссылка на эту метку может встречаться только в (возможно, нескольких) операторах
PRINT.
Оператор FftTMAT имеет вид:
где f |
mm |
< f » 1 V 2 V " , , a t i A ) - » |
\ |
- организационная информация (см.ниже); |
|||
»± |
- разделители поля. Разделителем поля может быть |
запятая, косая черта - символ "/" - или несколько символов "/", например:
/////
- 44 -
t i - описатели поля, состоящие из одного (активного
или пассивного) элемента формата или группы таких элемен
тов. Группа элементов формата (повторяемая группа), в сми очередь, имеет вид:
У ( a n ». .а 1с^1с^ *
где Г - количество повторений, причем Г не пишется при
p a l . Внутри повторяемой группы не может быть друх'ой пов торяемой группы, т.е. каждое 1^<з=1,... Д ) - один эле
мент формата; Г - натуральное десятичное число; в { , - один или несколько символов "/".
f и/зли Я<, могут отсутствовать; m может бить, незалисмаго от этого, равным нулю (оператор FgfRMAT(0) олужхт ,цля
печати остатка - см. 2.6.2.2.4.). Каждый элемент формата,
атакже символ V" реализует печать какой-либо•информации,
-либо указанной в операторе PRIKT (в случае пассивных
элементов формата), либо явно указанной в операторе P0RMAT (в случае активных элементов формата).
2.6.2.2.1. Имеются следующие элементы формата:
аХ * < текст > '
OS $4 . \ |
. |
а£. . |
|
где в - количество повторений одного элемента формата (п
может отсутствовать - тогда п=1);
w - количество печатаемых символов (т.е. ширина поля выводимой строки символов);
d - количество цифр после десятичной точки;
порядковые номера цифр - информация печатается, на-
чилая с цифры с порядковым номером V4 и кончая цифрой с порядковым номером V, .
|
- |
45 - |
n,w,d, i i ^ b |
~ |
натуральные десятичные числа. |
Элементы формата п-Х, - |
I |
/ и символ "/" служат для печати |
горизонтальных и вертикальных интервалов; элемент формата <<текст>. - для печати указанного в этом элементе текста; элементы формата nlw , nFw.a и nEw.d - Для печати чисел (с переводом); элемент формата пд1%Уь - для печати вось меричной информации; элемент формата nsv,.^ - для печати десятичной информации без перевода (.идя печати шиф ров) ; и, наконец, элемент формата пЛ - для печати алфа витно-цифровой информации.
Подробное описание элементов формата приводится ниже (см. 2.6.2.2.6.).
2.6.2.2.2. Если требуется многократное использование одно го и того же элемента формата или группы элементов формата, то следует воспользоваться счетчиком повторений ( - в случае одного элемента формата и Г - в случае группы элементов формата - см. вы..е). Тогда соответствующий эле мент (группа элементов) формата будет выдав?ться многократ но - столько раз, сколько указано в счетчике повторений
(т.е. элемент формата выдается |
раз и, соответственно, |
|
группа элементов формата |
- |
г раз). |
2.6.2.2.3. Внешним представлением информации при печати на АЦПУ являются строки символов.
В одной строке размещается 128 символов. Рекоменду ется избегать переполнения печатаемой строки. Если же про грамма потребует отпечатать "строку" с большим количеством символов, то отпечатаются две или более строк, в первой из которых отпечатаются первые 128 символов, во второй, начи ная с самой левой символьной позиции,- 128 следующих сим волов и т.д. Символьные позиций в строке нумеруются слева направо.
Замечание. Если при Наборе ^строки" длиной более 128 символов произойдет переполнение буфера АЦПУ (см,2.6.2.2.4.), то печатаемый материал будет испорчен.
2.6.2.2.4. Печатаемый материал накапливается на буфере машины.Печать накопленного материала происходит либо паи за полнении буфера до определенного предела, либо если
-46 -
количество обращении к (возможно, различным) оператором PRINT равно или больше числа, указанного в организацион
ной информации. Если организационная ыипормац:щ отсутст вует, то указанное число считается равным единице, и в
втом случае печать накопленного материала происходит при
кандом обращении к соответствукщему оператору PRINT.
Тем не менее, эту организационную информацию рекомендует
ся указывать и использовать, так как АЦПУ работает значи тельно медленнее процессора, а печать из буфера машины мо
жет происходить одновременно с работой процессора (со сче том) [ 4*1 , что приводит к значительной экономии машинного
времени и более выгодному режиму работы АЦПУ.
Кроме того, организационная информация, позволяет
осуществить набор строки из фрагментов. При этом необхо
димо следить за тем, чтобы печать не происходила до окон чательного набора строки.
Для печати остатка накопленного на буфере материала
можно воспользоваться, например, следующими операторами:
PRIHT 100; 100»ffiRMAT(О);
ИЛИ: |
PRIST 1011 |
|
101» |
ттт |
(*К0НЕЦ,_, ЗАДАЧИ*); и т.п. |
Следует отметить, что буфер машины используется для накопления материала и при узкой печати или перфорации.
Поэтому, воли печать на АЦПУ происходит в режиме накопле ния на буфер, т.е. не при каждом обращении.к оператору PRIST следует позаботиться о том, чтобы к моменту уз кой печати или перфорации накопленный на буфере материал был отпечатан.
Организационная информация имеет вид:
В
или;
+
или;
- 47 -
или:
< пусто > ,
где N - натуральное десятичное число,
Печать накопленного на буфере материала происходит либо
при заполнении буфера до определенного предела (независи мо от N ) , либо если количество обращений к операторам
P R I NT |
после последней печати равно или больше |
и „ В |
|
последнем случае сразу после печати содержимого буфера |
|||
количество обращений к операторам P R I N T |
считается рав |
||
ным нулю. |
|
|
|
|
Как правило, т.е. при отсутствии символа "+", набор |
||
материала на буфер, инициируемый оператором |
P R I N T |
.начи |
нается с перехода на новую строку и на самую левую сим
вольную позицию в этой -отроке» Однако, при наличии симво ла - такого перехода не произойдет, т„е, набор мате
риала на буфер продолжается с той же символьной позиции Й той же строки, на которой прервался предыдущий набор. Ес
тественно,это имеет смысл лишь тогда, когда на буфере име
ется накопленный, но еще не отпечатанный материал, т»к»
иначе набор происходит с самой левой символьной позиции
новой строки.
Например, печать олова: ПРОГРАММА
может происходить следующим экзотическим образом:
1:РИША1 |
(99, *ГГ ) i |
|
2: gjftaiAT |
(+,99, ' Р*) 5 |
1 |
|
|
|
3» Р0КШТ |
(у,99. *0Г4 ): |
|
4; Р0ЭД1АТ (+,99, *АММЛ*){ |
|
|
5» FORMAT(О); |
|
|
P R I N T |
1| |
|
P R I N T |
2; |
|
P R I N T |
3; |
|
P R I N T |
2} |
|
P R I N T |
4; |
|
P R I N T |
5; |
|
Отсюда видно, что в качестве N можно взять любое доста точно большое число, и затем отпечатать накопленный ыа-
-48 -
териал с помощью печати остатка.
другой пример - печать столбца однозначных чисел.
1 ; FORMAT (99,11) {
2» PRINT 1 , 1 ;
За FQRMAg (2,20 ( ' - ' ) ) ;
PRINT 3»
В этом случае никакой печати остатка не требуется, т.к. к моменту выполнения оператора PRINT3 количество обращений к операторам PRINT уже станетравным ю , что больше указанного в операторе FORMAT с меткой 3 (г.е. в операторе FORMAT , соответствующем оператору PRINTз) Ня2 . Поэтому вышеуказанная группа операторов непосред
ственно отпечатает накопленный на буфере материал в ви де столбца однозначных чисел и строку:
под этим столбцом. Точно такую же печать вызовет указан ное в операторе FORMAT с меткой 3 любое N в диапазоне от
1 ДО 10, |
не обя |
Повторяем: указание N в операторе FORMAT |
|
зательно. Когда н не указано, считается, что N=1 |
, и пе |
чать будет происходить при каждом обращении к оператору ранг? , Такой реким работы машины, однако, как правило, является невыгодным, хотя программа будет работатг пра вильно и в этом случае. Явное использование свойств бу фера при печати рекомендуется и при оптимизации ФОРТРАН. -Хфограмм на других машинахС 63 .
2*6,2.2.5. Начало выполнения оператора PRINT (на АЦПУ) ннЕцоирует управление процессом выдачи печатаемой инфор мации при помощи оператора FgRMAT . Накопление на буфер и печать этой информации происходит по правилам, указан ным в 2.6.2.2.4. Каждое отдельно взятое действие управ
ления при помощи оператора FORMAT зависит от инфор\1ации обеспечиваемое совместно простейшим элементом списка пе
-49 -
чати (см. 2.6.1.3Л..), если такой элемент есть, и следую щим элементом формата. Элементы формата выдаются слева направо, с учетом количества повторений.
Оператор управляет процессом выдачи информа ции следующим образом:
2.6.2.2.5.1. Если элемент формата является активным эле ментом формата (т.е. если он является одним из элементов пХ , *< текст >' , а также символом '*/")» то инфор мация, указанная Б этом элементе формата, непосредственно видается на печать. После этого происходит переход к сле дующему элементу формата.
2.6.2.2.5.2. Если элемент формата является пассивным эле ментом формата (т.е. если он является одним из элементов
IW , Pw.d |
, Ew.d , |
. S ^ . ^ j . » А), то, если в спис |
ке печати |
еще остались простейшие элементы, про |
исходит преобразование текущего простейшего элемента из списка печати (т.е. одной простой переменной или одного ялеыента массива) в соответствии с указанным форматом и выдача на печать преобразованного материала. Если не в списке печати больше не осталось простейших элементов, то "выполнение оператора рдшт под управлением оператора |^ШАТ на этом завершается. После выдачи на печать преоб разованного материала происходит переход к следующему простейшему элементу из списка печати и к следующему эле менту формата.
2.6.2.2.5.3.Если элементов формата больше нет и нет больше простейших элементов в списке печати, то выполнение оператора PRIM; под управлением оператора JjgRM&£ на этом заканчивается.
2.6.2.2.5.4.Если элементов формата больше нет, а в спис ке печати еще остались простейшие элементы, то происходит "ереход на новую строку печати и на самую левую символь ную, позицию в этой строке,и элементы формата начнут выда ваться заново, начиная от первой справа открывающей круг лой скобки в операторе РЙЮШ : . И в этом случае элементы