(Измененная редакция, Изм. № 1).
Списки ввода/вывода. Список ввода определяет имена переменных и элементов массивов, которым присваиваются значения при вводе. Список вывода определяет те переменные и элементы массивов, значения которых передаются при выводе вовне. Списки ввода и списки вывода устроены одинаково.
Списком называется либо простой список, либо простой список, заключенный в круглые скобки, либо список с циклом, либо два списка, разделенных запятой.
Простой список есть либо имя переменной, либо имя элемента массива, либо имя массива, либо два простых списка, разделенных запятой.
Список с циклом — это взятая в круглые скобки последовательность, состоящая из списка и спецификации цикла, разделенных запятой.
Спецификация цикла имеет вид
1=ГП1, т2, т.з или
і=гпі, т2
(і, mi, т2 и гпз определяются так же, как и для оператора цикла (п. 7.1.2.8)).
Область действия спецификации цикла — это список, входящий в состав списка с циклом; для списков ввода i, mi, m2 и гпз могут встречаться внутри этой области только в индексах.
Имя переменной или имя элемента массива в списке задают самих себя. Имя массива задает имена всех элементов массива, определенных описанием массива, и эти элементы задаются в порядке, определяемом функцией линеаризации (п. 7.2.1.1.1).
Элементы списка считаются упорядоченными в соответствии с их вхождением в список при его просмотре слева направо. Это упорядочение элементов в списке с циклом имеет место для каждого очередного повторения цикла.
Оператор форматного ввода. Оператор форматного ввода имеет вид
READ (u,f) k или
READ (u,f)
(k — список ввода).
В результате выполнения этого оператора вводятся очередные записи с устройства, заданного и. Вводимые данные просматриваются и преобразуются в соответствии с форматом, заданным f. Полученные в результате значения присваиваются элементам, определенным списком к (см. п. 7.2.3.4).
Оператор форматного вывода. Оператор форматного вывода имеет вид
WRITE (u,f) к или
WRITE (u,f)
(к — список вывода).
В результате выполнения этого оператора создаются очередные записи на устройстве, заданном п. Список вывода к определяет последовательность передаваемых значений. Эти значения преобразуются и разносятся по позициям в соответствии с форматом, заданным f (см. п. 7.2.3.4).
Оператор бесформатного ввода. Оператор бесформатного ввода имеет вид
READ (и) к
ил и
READ (и)
(к — список ввода).
В результате выполнения этого оператора с устройства, заданного и, вводится очередная запись и — если имеется список ввода — значения, содержащиеся в этой записи, последовательно присваиваются элементам, определенным списком к. Последовательность значений, требуемая списком, не может быть длиннее последовательности значений в бесформатной записи.
Оператор бесформатного вывода. Оператор бесформатного вывода имеет вид
WRITE (u) к
(к — список вывода).
В результате выполнения этого оператора на устройстве, заданном ь, создается очередная запись, состоящая из последовательности значений, определяемой списком к.
7.!.3.3. Вспомогательные операторы ввода/вывода. Существует "ри типа вспомогательных операторов ввода/вывода:
оператор перемотки;
оператор сдвига назад;
оператор разметки.
Оператор перемотки. Оператор перемотки имеет вид REWIND и
В результате выполнения этого оператора устройство, заданное и, устанавливается в начальную позицию.
Оператор сдвига назад. Оператор сдвига назад имеет вид:
BACKSPACE и
Если устройство, заданное и, находится в начальной позиции, то в результате выполнения этого оператора просто продолжается нормальный порядок выполнения операторов; в противном случае, кроме этого, позиция этого устройства изменяется таким образом, что запись, которая до выполнения этого оператора была предыдущей, становится очередной.
Оператор разметки. Оператор разметки имеет вид:
ENDFILE и
В результате выполнения этого оператора на устройство, заданное и, выводится специальная запись «конец файла». «Конец файла» — это единственная запись, обозначающая границу последовательного файла. Если запись «конец файла» встретится при выполнении какого-либо оператора ввода, то действие такого оператора не определено.
7.1.3.4. Вывод форматных записей на печать. При передаче форматной записи на печать ее первый символ не печатается, а определяет продвижение по вертикали следующим образом.
Символ |
Продвижение по вертикали перед печатью |
Пробел 0 1 + |
Одна строка Две строки К первой строке следующей страницы Никакого продвижения |
7.2. Объявления. Имеется пять типов объявлений: объявления спецификаций;
объявление начальных данных;
объявление формата;
объявление внутренней функции;
заголовки (функций, подпрограмм, спецификаций блоков данных) .
Ограничения на использование символических имен в объявлениях изложены в п. 10.2.
Объявления внутренних функций и заголовки (функций, подпрограмм, спецификаций блоков данных) рассматриваются в разд. 8.
7.1.3.4, 7.2. (Измененная редакция, Изм. № 1).
Объявления спецификаций. Имеется пять типов объявлений спецификаций:
объявление массивов;
объявление общих объектов;
объявление эквивалентности;
объявление внешних имен;
объявление типа.
Описание массива. Описание массива задает характеристики массива, используемого в рассматриваемом модуле.
Описание массива указывает символическое имя массива, число измерений (одно, два или три) и размеры по каждому измерению. Описание массива может встречаться в объявлениях типа, массивов или общих объектов.
Описание массива имеет вид
(v — символическое имя, называемое именем описания;
і — список границ).
Список границ состоит из одного, двух или трех выражений (верхних границ), каждое из которых может быть не равным нулю целым без знака или именем отличной от нуля переменной типа целый. Если список границ состоит более чем из одного выражения, то они отделяются друг от друга запятой. Если і не содержит ни одной переменной, то і называется постоянным списком границ.
Наличие списка границ в каком-либо описании служит для информирования процессора о том, что это имя описания является именем массива. Число выражений, образующих список границ, указывает размерность массива. Значения выражений в описании массива определяют максимальное значение, которое может принимать индекс в любом имени элемента этого массива (п. 7.2.1.1.1).
Значение индекса в имени элемента массива не должно быть меньше единицы или больше максимального значения, определенного описанием этого массива.
Функция линеаризации массива и значение индекса. В табл. 2 для заданных размерности, списка границ и индекса в имени элемента массива приведено значение индекса этого элемента массива, а также максимальное значение, которое могут принимать индексы в именах элементов этого массива. Значения всех индексных выражений должны быть больше нуля.
Функция линеаризации упорядочивает все элементы любого массива. Значение этой функции для некоторого данного элемента получается прибавлением единицы к соответствующему значению, указанному в графе «Значение индекса». Элемент массива, индекс которого имеет это значение, следует непосредственно за данным элементом. Последний элемент массива — это элемент, значение индекса которого равно максимально допустимому значению; для этого элемента не существует непосредственно следующего за ним элемента.
Таблица 2
Размерность |
Список границ |
Индекс |
Значение индекса |
Максимальное значение индекса |
1 |
(А) |
(а) |
а |
А |
2 |
(А, В) |
(а, Ь) |
а + А • (Ь—1) |
А • В |
3 |
(А, В, С) |
(а, Ь, с) |
а + А • (Ь—1) + + А • В . (с— 1) |
А • В • С |
Примечание, а, Ь и с — индексные выражения.
А, В и С — верхние границы по измерениям.
Регулируемые размеры. Если какое-либо из выражений, входящих в список границ, является именем переменной, то описываемый массив называется массивом с регулируемыми размерами, а имена переменных в списке границ — регулируемыми размерами. Такой массив допустим только в модуле-процедуре. Список формальных параметров такого модуля-процедуры в этом случае должен содержать имя массива и имена переменных типа целый, представляющих регулируемые размеры. Значения фактических параметров, которые представляют размеры массива в списке фактических параметров при ссылке на эту процедуру, должны быть определены (п. 10.2) до обращения к соответствующему модулю-процедуре; эти значения не могут быть изменены или стать неопределенными в процессе выполнения этого модуля- процедуры. Размер фактического массива не может быть превышен. Для каждого формального параметра-массива, появляющегося в выполнимой программе (п. 9.1.6), должно существовать по крайней мере одно описание массива с постоянным списком границ, связанное с упомянутым массивом через обращения к модулям-процедурам.
Если символическое имя фигурирует в объявлении общих объектов модуля-процедуры, то оно не может идентифицировать массив с регулируемыми размерами.
Объявление массивов. Объявление массивов имеет вид
DIMENSION V, (і,), v2(i2) ,...,v„(in)
(каждое Vj (ij) —описание массива).
Объявление общих объектов. Объявление общих объектов имеет вид
COMMON /х, /а! ... /хп/ап
(каждое Э; — непустой список имен переменных, имен массивов или описаний массивов (в этом списке не должны встречаться формальные параметры);
каждое х; — символическое имя либо пусто).
Если х, пусто, то первые две дробные черты необязательны. Каждое Х|, называемое именем блока, не имеет никакого отношения к каким-либо переменным или массивам с тем же самым символическим именем как в том программном модуле, в котором встречается это объявление общих объектов, так и в любом другом (см. п. 10.1.1 относительно ограничений на использование имен блоков).
Все объекты, указанные между х, и следующим именем блока (или до конца объявления, если за х, больше не встречается ни одного имени блока), считаются входящими в общий блок с именем хґ Все объекты, указанные в начале объявления до первого появления имени блока, или все без исключения указанные объекты, если в объявлении нет ни одного имени блока, считаются входящими в непомеченный общий блок. Наличие двух дробных черт, между которыми не содержится имени блока, также означает, что следующие за этими дробными чертами объекты входят в непомеченный общий блок.
Одно и то же имя общего блока может встречаться более одного раза как в одном объявлении общих объектов, так и в программном модуле. Все объекты, связанные таким образом с одним и тем же общим блоком, располагаются в нем в порядке их появления (п. 10.1.2). При этом первый элемент массива будет непосредственно следовать за предыдущим объектом (если таковой существует), а последний элемент массива будет непосредственно предшествовать следующему объекту (если таковой существует) .
Размер общего блока в программном модуле равен сумме объемов памяти, требуемых для размещения объектов, включенных в общий блок при помощи объявлений общих объектов и эквивалентности (п. 7.2.1.4). Размеры общих блоков с одним и тем же именем во всех программных модулях, входящих в выпол-нимую программу, должны совпадать. Однако размер непомеченного общего блока не обязан быть одним и тем же в разных совместно выполняемых программных модулях. Размер блока измеряется в единицах памяти (п. 7.2.1.3.1).
Соответствие общих блоков. Пусть все объявления общего блока с данным именем в программных модулях выполнимой программы определяют одну и ту же длину общего блока и, кроме того, типы объектов, расположенных в одинаковых позициях различных объявлений этого блока, совпадают. Тогда значения в соответствующих позициях общего блока (определенных по числу предшествующих единиц памяти) будут во всей выполнимой программе одними и теми же.
Считается, что объект типа двойной точности или типа комплексный занимает две последовательные единицы памяти, а объект типа целый, вещественный и логический — одну единицу памяти.
Для общих блоков с одним и тем же именем или для непомеченного общего блока:
во всех тех программных модулях, где в данной позиции (определяемой числом предшествующих единиц памяти) задан один и тот же тип, ссылки на эту позицию дают одно и то же значение;
правильная ссылка, сделанная на конкретную позицию, подразумевает тип, заданный в объявлениях, если последнее по времени присваивание в эту позицию было того же типа.
Объявление эквивалентности. Объявление эквивалентности имеет вид
EQUIVALENCE (kJ, (k2) ,...,(kn)
(каждое k!— список вида aj, а2,...., am