(Измененная редакция, Изм. № 1).

  1. Списки ввода/вывода. Список ввода определяет име­на переменных и элементов массивов, которым присваиваются значения при вводе. Список вывода определяет те переменные и элементы массивов, значения которых передаются при выводе вовне. Списки ввода и списки вывода устроены одинаково.

Списком называется либо простой список, либо простой спи­сок, заключенный в круглые скобки, либо список с циклом, либо два списка, разделенных запятой.

Простой список есть либо имя переменной, либо имя элемен­та массива, либо имя массива, либо два простых списка, разде­ленных запятой.

Список с циклом — это взятая в круглые скобки последова­тельность, состоящая из списка и спецификации цикла, разделен­ных запятой.

Спецификация цикла имеет вид

1=ГП1, т2, т.з или

і=гпі, т2

(і, mi, т2 и гпз определяются так же, как и для оператора цикла (п. 7.1.2.8)).

Область действия спецификации цикла — это список, входя­щий в состав списка с циклом; для списков ввода i, mi, m2 и гпз могут встречаться внутри этой области только в индексах.

Имя переменной или имя элемента массива в списке задают самих себя. Имя массива задает имена всех элементов массива, определенных описанием массива, и эти элементы задаются в по­рядке, определяемом функцией линеаризации (п. 7.2.1.1.1).

Элементы списка считаются упорядоченными в соответствии с их вхождением в список при его просмотре слева направо. Это упорядочение элементов в списке с циклом имеет место для каж­дого очередного повторения цикла.

  1. Оператор форматного ввода. Оператор форматного ввода имеет вид

READ (u,f) k или

READ (u,f)

(k — список ввода).

В результате выполнения этого оператора вводятся очередные записи с устройства, заданного и. Вводимые данные просматри­ваются и преобразуются в соответствии с форматом, заданным f. Полученные в результате значения присваиваются элементам, определенным списком к (см. п. 7.2.3.4).

  1. Оператор форматного вывода. Оператор форматного вывода имеет вид

WRITE (u,f) к или

WRITE (u,f)

(к — список вывода).

В результате выполнения этого оператора создаются очеред­ные записи на устройстве, заданном п. Список вывода к опреде­ляет последовательность передаваемых значений. Эти значения преобразуются и разносятся по позициям в соответствии с фор­матом, заданным f (см. п. 7.2.3.4).

  1. Оператор бесформатного ввода. Оператор бесформат­ного ввода имеет вид

READ (и) к

ил и

READ (и)

(к — список ввода).

В результате выполнения этого оператора с устройства, за­данного и, вводится очередная запись и — если имеется список ввода — значения, содержащиеся в этой записи, последовательно присваиваются элементам, определенным списком к. Последователь­ность значений, требуемая списком, не может быть длиннее последо­вательности значений в бесформатной записи.

  1. Оператор бесформатного вывода. Оператор бесфор­матного вывода имеет вид

WRITE (u) к

(к — список вывода).

В результате выполнения этого оператора на устройстве, за­данном ь, создается очередная запись, состоящая из последова­тельности значений, определяемой списком к.

7.!.3.3. Вспомогательные операторы ввода/вывода. Существует "ри типа вспомогательных операторов ввода/вывода:

оператор перемотки;

оператор сдвига назад;

оператор разметки.

  1. Оператор перемотки. Оператор перемотки имеет вид REWIND и

В результате выполнения этого оператора устройство, заданное и, устанавливается в начальную позицию.

  1. Оператор сдвига назад. Оператор сдвига назад имеет вид:

BACKSPACE и

Если устройство, заданное и, находится в начальной позиции, то в результате выполнения этого оператора просто продолжается нормальный порядок выполнения операторов; в противном слу­чае, кроме этого, позиция этого устройства изменяется таким об­разом, что запись, которая до выполнения этого оператора была предыдущей, становится очередной.

  1. Оператор разметки. Оператор разметки имеет вид:

ENDFILE и

В результате выполнения этого оператора на устройство, за­данное и, выводится специальная запись «конец файла». «Конец файла» — это единственная запись, обозначающая границу по­следовательного файла. Если запись «конец файла» встретится при выполнении какого-либо оператора ввода, то действие такого опе­ратора не определено.

7.1.3.4. Вывод форматных записей на печать. При передаче форматной записи на печать ее первый символ не печатается, а определяет продвижение по вертикали следующим образом.

Символ

Продвижение по вертикали перед печатью

Пробел 0

1

+

Одна строка

Две строки

К первой строке следующей страницы

Никакого продвижения



7.2. Объявления. Имеется пять типов объявлений: объявления спецификаций;

объявление начальных данных;

объявление формата;

объявление внутренней функции;

заголовки (функций, подпрограмм, спецификаций блоков дан­ных) .

Ограничения на использование символических имен в объявле­ниях изложены в п. 10.2.

Объявления внутренних функций и заголовки (функций, под­программ, спецификаций блоков данных) рассматриваются в разд. 8.

7.1.3.4, 7.2. (Измененная редакция, Изм. № 1).

  1. Объявления спецификаций. Имеется пять типов объяв­лений спецификаций:

объявление массивов;

объявление общих объектов;

объявление эквивалентности;

объявление внешних имен;

объявление типа.

  1. Описание массива. Описание массива задает характе­ристики массива, используемого в рассматриваемом модуле.

Описание массива указывает символическое имя массива, чи­сло измерений (одно, два или три) и размеры по каждому из­мерению. Описание массива может встречаться в объявлениях типа, массивов или общих объектов.

Описание массива имеет вид

(v — символическое имя, называемое именем описания;

і — список границ).

Список границ состоит из одного, двух или трех выражений (верхних границ), каждое из которых может быть не равным ну­лю целым без знака или именем отличной от нуля переменной типа целый. Если список границ состоит более чем из одного вы­ражения, то они отделяются друг от друга запятой. Если і не со­держит ни одной переменной, то і называется постоянным спис­ком границ.

Наличие списка границ в каком-либо описании служит для информирования процессора о том, что это имя описания явля­ется именем массива. Число выражений, образующих список гра­ниц, указывает размерность массива. Значения выражений в опи­сании массива определяют максимальное значение, которое мо­жет принимать индекс в любом имени элемента этого массива (п. 7.2.1.1.1).

Значение индекса в имени элемента массива не должно быть меньше единицы или больше максимального значения, опреде­ленного описанием этого массива.

  1. Функция линеаризации массива и значение индекса. В табл. 2 для заданных размерности, списка границ и индекса в имени элемента массива приведено значение индекса этого эле­мента массива, а также максимальное значение, которое могут принимать индексы в именах элементов этого массива. Значения всех индексных выражений должны быть больше нуля.

Функция линеаризации упорядочивает все элементы любого массива. Значение этой функции для некоторого данного элемен­та получается прибавлением единицы к соответствующему значе­нию, указанному в графе «Значение индекса». Элемент массива, индекс которого имеет это значение, следует непосредственно за данным элементом. Последний элемент массива — это элемент, значение индекса которого равно максимально допустимому зна­чению; для этого элемента не существует непосредственно сле­дующего за ним элемента.

Таблица 2

Размерность

Список границ

Индекс

Значение индекса

Максимальное зна­чение индекса

1

(А)

(а)

а

А

2

(А, В)

(а, Ь)

а + А • (Ь—1)

А • В

3

(А, В, С)

(а, Ь, с)

а + А • (Ь—1) + + А • В . (с— 1)

А • В • С



Примечание, а, Ь и с — индексные выражения.

А, В и С — верхние границы по измерениям.

  1. Регулируемые размеры. Если какое-либо из выраже­ний, входящих в список границ, является именем переменной, то описываемый массив называется массивом с регулируемыми раз­мерами, а имена переменных в списке границ — регулируемыми размерами. Такой массив допустим только в модуле-процедуре. Список формальных параметров такого модуля-процедуры в этом случае должен содержать имя массива и имена переменных типа целый, представляющих регулируемые размеры. Значения фактических параметров, которые представляют размеры массива в списке фактических параметров при ссылке на эту процедуру, должны быть определены (п. 10.2) до обращения к соответствую­щему модулю-процедуре; эти значения не могут быть изменены или стать неопределенными в процессе выполнения этого модуля- процедуры. Размер фактического массива не может быть превы­шен. Для каждого формального параметра-массива, появляюще­гося в выполнимой программе (п. 9.1.6), должно существовать по крайней мере одно описание массива с постоянным списком границ, связанное с упомянутым массивом через обращения к модулям-процедурам.

Если символическое имя фигурирует в объявлении общих объектов модуля-процедуры, то оно не может идентифицировать массив с регулируемыми размерами.

  1. Объявление массивов. Объявление массивов имеет вид

DIMENSION V, (і,), v2(i2) ,...,v„(in)

(каждое Vj (ij) —описание массива).

  1. Объявление общих объектов. Объявление общих объек­тов имеет вид

COMMON /х, /а! ... /хпп

(каждое Э; — непустой список имен переменных, имен мас­сивов или описаний массивов (в этом списке не должны встречать­ся формальные параметры);

каждое х; — символическое имя либо пусто).

Если х, пусто, то первые две дробные черты необязательны. Каждое Х|, называемое именем блока, не имеет никакого отно­шения к каким-либо переменным или массивам с тем же самым символическим именем как в том программном модуле, в котором встречается это объявление общих объектов, так и в любом дру­гом (см. п. 10.1.1 относительно ограничений на использование имен блоков).

Все объекты, указанные между х, и следующим именем бло­ка (или до конца объявления, если за х, больше не встречает­ся ни одного имени блока), считаются входящими в общий блок с именем хґ Все объекты, указанные в начале объявления до первого появления имени блока, или все без исключения указан­ные объекты, если в объявлении нет ни одного имени блока, счи­таются входящими в непомеченный общий блок. Наличие двух дроб­ных черт, между которыми не содержится имени блока, также оз­начает, что следующие за этими дробными чертами объекты вхо­дят в непомеченный общий блок.

Одно и то же имя общего блока может встречаться более од­ного раза как в одном объявлении общих объектов, так и в прог­раммном модуле. Все объекты, связанные таким образом с одним и тем же общим блоком, располагаются в нем в порядке их по­явления (п. 10.1.2). При этом первый элемент массива будет не­посредственно следовать за предыдущим объектом (если таковой существует), а последний элемент массива будет непосредствен­но предшествовать следующему объекту (если таковой существу­ет) .

Размер общего блока в программном модуле равен сумме объемов памяти, требуемых для размещения объектов, включен­ных в общий блок при помощи объявлений общих объектов и эквивалентности (п. 7.2.1.4). Размеры общих блоков с одним и тем же именем во всех программных модулях, входящих в выпол-нимую программу, должны совпадать. Однако размер непомечен­ного общего блока не обязан быть одним и тем же в разных совместно выполняемых программных модулях. Размер блока измеряется в единицах памяти (п. 7.2.1.3.1).

  1. Соответствие общих блоков. Пусть все объявления общего блока с данным именем в программных модулях выпол­нимой программы определяют одну и ту же длину общего блока и, кроме того, типы объектов, расположенных в одинаковых по­зициях различных объявлений этого блока, совпадают. Тогда значения в соответствующих позициях общего блока (определен­ных по числу предшествующих единиц памяти) будут во всей выполнимой программе одними и теми же.

Считается, что объект типа двойной точности или типа комп­лексный занимает две последовательные единицы памяти, а объ­ект типа целый, вещественный и логический — одну единицу па­мяти.

Для общих блоков с одним и тем же именем или для непоме­ченного общего блока:

во всех тех программных модулях, где в данной позиции (оп­ределяемой числом предшествующих единиц памяти) задан один и тот же тип, ссылки на эту позицию дают одно и то же значе­ние;

правильная ссылка, сделанная на конкретную позицию, под­разумевает тип, заданный в объявлениях, если последнее по вре­мени присваивание в эту позицию было того же типа.

  1. Объявление эквивалентности. Объявление эквивалент­ности имеет вид

EQUIVALENCE (kJ, (k2) ,...,(kn)

(каждое k!— список вида aj, а2,...., am