Записи могут быть форматными и бесформатными. Форматная запись состоит из последовательности символов, допускающих пред­ставление в процессоре. Передача такой записи требует ссылки на спецификацию формата, которая определяет необходимые преобра­зования и размещение записи (п. 7.2.3). Число записей, передава­емых при выполнении операторов форматного чтения или записи, зависит от списка ввода/вывода и указанной спецификации формата (п. 7.2.3.4). Бесформатная запись состоит из последовательности значений в виде, определяемом процессором. Когда выполняется оператор форматного или бесформатного ввода, требуемые записи на указанном устройстве должны быть соответственно форматными или бесформатными.

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

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

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

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

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

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

І —- ГП і, ГП 2, ГП 2

ИЛИ

1 = гпнт2

(i, trip т2 и т3 определяются так же, как и для оператора цик­ла (п. 7.1.2.8)).

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

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

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

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

READ (u, f) к или

READ (u, f)

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

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

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

WRITE (u, f) к или

WRITE (u, f)

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

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

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

READ (и) к или

READ (и)

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

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

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

WRITE (u) к

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

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

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

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

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

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

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

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

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

BACKSPACE и

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

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

ENDFILE и

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

  1. Вывод форматных записей на печать. При передаче форматной записи на печать ее первый символ не печатается.

7.2. Объявления. Имеется четыре типа объявлений:

объявления спецификаций;

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

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

заголовки (функций и подпрограмм).

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

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

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

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

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

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

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

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

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

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

v(i)

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

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

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

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

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

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

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

Таблица 2

Размерность

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

Индекс

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

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

1

(А)

(а)

а

А

2

(А, В)

(а, Ь)

а + А • (b— 1)

А • В

Примечание, а и b — индексные выражения; А и В — верхние грани­цы по измерениям.



    1. Регулируемые размеры — отсутствует; определе­ние — по ГОСТ 23056—78.

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

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

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

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

COMMON а,, а2,...,ап

(каждое — имя переменной или имя массива).

Все объекты, перечисленные в конкретном объявлении общих объектов, считаются входящими в общий блок.

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

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

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

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

Для общего блока:

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

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

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

EQUIVALENCE (к,), (к2),...,(к„)

(каждое к; — список вида а,, а2,..., ат;

каждое — имя переменной или 'имя элемента массива, индекс которого содержит только константы;

ГП|>2).

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

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

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

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

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

Информация, содержащаяся в пп. 7.2.1.1.1, 7.2.1.3.1 и в настоя­щем пункте, достаточна для того, чтобы описать возможности до­полнительных случаев совмещения в памяти элементов массивов и объектов из общих блоков. Не допускается явное или неявное отведение одной и той же единицы памяти для хранения более чем одного элемента одного и того же массива.

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

    1. Объявление внешних имен — отсутствует; определе­ние — по ГОСТ 23056—78.

    2. Объявление типа — отсутствует; определение — по ГОСТ 23056—78.

  1. Объявление начальных данных — отсутствует; опреде­ление — по ГОСТ 23056—78.

  2. Объявление формата. Объявления формата используются в связи с форматным вводом/выводом для указания необходимого пре­образования и редактирования информации при переходе от ее внутрен­него представления к внешней последовательности символов и обратно.

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

FORMAT (q1t1zlt2z2...zn ]tnq2)

(каждое qj — серия дробных черт или пусто;