каждое а!— имя переменной или имя элемента массива, индекс которого содержит только константы;
т>2).
В списки к не могут входить формальные параметры. Число индексных выражений в имени элемента массива должно либо совпадать с числом измерений в описании массива, либо должно быть равно единице (функция линеаризации определяет правило, по которому любой массив можно свести к одномерному массиву той же самой длины).
Все элементы, образующие какой-либо список kj в объявлении эквивалентности, размещаются в памяти, начиная с одной и той же единицы памяти. Объявление эквивалентности не должно использоваться для того, чтобы сделать две или более величины математически эквивалентными.
Отведение памяти для переменных или массивов, объявленных непосредственно в объявлении общих объектов, производится только с учетом их типов, объявлений общих объектов и описаний массивов. Объявленным таким образом объектам всегда отводится память в том порядке, в котором они следуют в объявлении общих объектов.
Результатом объявления эквивалентности по отношению к общим объектам может быть лишь удлинение общего блока; при этом разрешается только такое удлинение, которое расширяет общий блок за последний, но не за первый объект этого блока, определенный непосредственно в объявлении общих объектов.
Если две переменные или элементы двух массивов совмещаются в памяти в результате эффекта объявления эквивалентности, то имена этих переменных или массивов в данном программном модуле не могут одновременно встречаться в объявлении общих объектов.
Информация, содержащаяся в пп. 7.2.1.1.1, 7.2.1.3.1 и в настоящем пункте, достаточна для того, чтобы описать возможности дополнительных случаев совмещения в памяти элементов массивов и объектов из общих блоков. Не допускается явное или неявное отведение одной и той же единицы памяти для хранения более чем одного элемента одного и того же массива.
Объявление внешних имен. Объявление внешних имен имеет вид
EXTERNAL v„ v2 vn
(каждое V[— имя внешней процедуры).
Появление некоторого имени в этом объявлении означает, что это имя является именем внешней процедуры. Если имя внешней процедуры используется в некотором программном модуле в качестве фактического параметра, то оно должно появиться в этом модуле в объявлении внешних имен.
7.2.1.3.1, 7.2.1.4, 7.2.1.5. (Измененная редакция, Изм. № 1).
Объявление типа. Объявление типа имеет вид t v„ V2,...,vn
(t—INTEGER, REAL, DOUBLE PRECISION,
COMPLEX или LOGICAL;
каждое Vj— имя переменной, имя массива, имя функции или описание массива).
Объявление типа используется для того, чтобы изменить или подтвердить неявное указание типа, а также для предписания величинам типа двойной точности, комплексный или логический. Это' объявление может также содержать информацию о структуре массива.
Появление символического имени Vj в объявлении типа означает, что все вхождения имени Vj в программный модуль связываются с определенным типом данных (см. п. 8.3.1).
Объявление начальных данных. Объявление начальных данных имеет вид
DATA k,/d,/, k2/d2/,..„ kn/dn/
(каждое k] — список, содержащий имена переменных и (или) элементов массивов;
каждое d, — список констант, перед каждой из которых может быть записана конструкция j*;
j — отличное от нуля целое без знака).
Если какой-либо из списков состоит более чем из одного элемента, то эти элементы отделяются друг от друга запятой.
Формальные параметры не могут входить в списки к. Любое индексное выражение должно быть целым без знака.
Наличие конструкции j* перед константой эквивалентно записи этой константы j раз подряд через запятую. В списках dt могут встречаться текстовые константы.
Объявление начальных данных используется для придания начальных значений некоторым переменным и элементам массивов. В каждой паре этих списков должно существовать взаимнооднозначное соответствие между именами списка к] и константами списка d] — начальные значения устанавливаются на основе этого соответствия. Переменная или элемент массива, которым придаются начальные значения, не могут входить в непомеченный общий блок. Переменной или элементу массива, входящим в помеченный общий блок, начальные значения могут быть приданы только в модуле-блоке данных.
Объявление формата. Объявления формата используются в связи с форматным вводом/выводом для указания необходимого преобразования и редактирования информации при переходе от ее внутреннего представления к внешней последовательности символов и обратно.
Объявление формата имеет вид
FORMAT (qIt1z1t2z2...zn_ltnq2)
(каждое q, — серия дробных черт или пусто;
каждое t] — описатель поля или группа описателей полей; каждое гх— разделитель полей;
п может быть равно нулю;
(q1tlzlt2z2... zn_;tnq2) — спецификация формата).
Каждое объявление формата должно быть помечено.
Описатели полей. Описатели полей формата могут иметь вид
srFw.d srEw.d srGw.d
srDw.d rlw rLw rAw
nX
(буквы F, E, G, D, I, L, A, H и X указывают способ преобразования и редактирования при переходе от внутреннего представления записей к внешнему и обратно и называются кодами преобразований;
who — отличные от нуля целые без знака, указывающие ширину поля для внешней последовательности символов;
d — целое без знака, указывающее количество цифр в дробной части числа, изображаемого внешней последовательностью символов (за исключением кода преобразования G);
г — либо пусто, либо отличное от нуля целое без знака, называемое счетчиком повторений, который указывает, сколько раз должен быть повторен следующий за ним описатель поля;
s —• либо пусто, либо конструкция, обозначающая предписа- тель масштабного множителя (см. п. 7.2.3.5);
каждое hj — один из символов, представимых в процессоре).
Ширина поля должна быть обязательно указана в каждом описателе поля. Для описателей вида w.d обязательно должно быть указано d, даже в том случае, когда оно есть нуль; w должно быть больше либо равно d.
Термин «основной описатель поля» используется для обозначения такого описателя поля, в котором отсутствуют s и г.
Внутреннее представление внешних полей соответствует внутреннему представлению констант соответствующих типов (пп. 4.2 и 5.1.1).
Разделители полей. Разделители полей предназначены для разделения описателей полей и (или) групп описателей полей. Разделителями полей являются дробная черта и запятая. Серия дробных черт также является разделителем полей.
Дробная черта используется не только для разделения описателей полей, но и для разграничения форматных записей. Форматная запись — это последовательность символов. Длины таких последовательностей для данного внешнего носителя зависят как от процессора, так и от внешнего носителя.
Завершение обработки тех символов, которые могут содержаться в записи на внешнем носителе, само по себе не вызывает ввода или начала обработки следующей записи.
Спецификации повторений. Повторение какого-либо описателя поля (за исключением пН и пХ) достигается при помощи счетчика повторений: если позволяет список ввода/вывода, то заданное преобразование выполняется повторно указанное число раз.
Повторение группы описателей полей или разделителей полей достигается заключением их в скобки и, возможно, помещением перед левой скобкой целого числа без знака, называемого счетчиком повторений группы и задающего число повторений взятой в скобки группы. Если счетчик повторений группы не задан, то число повторений принимается равным единице. Рассмотренная форма называется основной группой.
Более сложные группы можно образовать заключением в скобки описателей полей, разделителей полей или основных групп. Для такой группы также может быть задан счетчик повторений. Скобки, в которые заключается вся спецификация формата, не рассматриваются как скобки, ограничивающие группу.
Взаимодействие форматного управления со списком вво- да/вывода. Начало выполнения оператора форматного ввода или форматного вывода инициирует форматное управление. Каждое действие форматного управления определяется как очередным элементом списка ввода/вывода, если таковой имеется, так и очередным описателем поля в спецификации формата. Если имеется список ввода/вывода, то в спецификации формата должен существовать по крайней мере один описатель поля, отличный от пН и пХ.
Если под форматным управлением выполняется оператор ввода, то при инициировании форматного управления читается одна запись; после этого следующие записи читаются только в том случае, если этого требует спецификация формата. Каждое такое действие не может требовать большего числа символов, чем содержится в очередной записи.
Если под форматным управлением выполняется оператор вывода, то передача записи происходит каждый раз, когда спецификация формата требует перехода к новой записи. Завершение форматного управления влечет за собой вывод очередной записи.
Спецификация формата (если не считать эффекта применения > счетчиков повторений) интерпретируется слева направо.
Каждому основному описателю I, F, Е, G, D, А или L, интерпретируемому в спецификации формата, соответствует один элемент, задаваемый списком ввода/вывода, за исключением элемента типа комплексный, который требует интерпретации двух основных описателей F, Е или G. Каждому основному описателю Н или X не соответствует никакой элемент, задаваемый списком ввода/вы- ь вода; в этом случае форматное управление связывает информа- о
цию, содержащуюся в таком описателе, непосредственно с за- в
писью. Если встречается дробная черта, то спецификация формата м требует начала новой и/или окончания очередной записи. Если м при выполнении оператора ввода форматное управление завершается или встречается дробная черта, то все необработанные символы очередной записи пропускаются.
Как только форматное управление встречает в спецификации формата основной описатель I, F, Е, G, D, А или L, оно проверяет, имеется ли соответствующий элемент, задаваемый списком ввода/вывода. Если такой элемент существует, то форматное управление передает преобразованную соответствующим образом информацию от элемента к записи или наоборот и продолжает работу. Если соответствующего элемента нет, то форматное управление завершается.
Если форматное управление дойдет до последней внешней правой скобки спецификации формата, то проверяется, остались ли необработанные элементы в списке ввода/вывода. Если таких элементов нет, то управление завершается; если же элементы в списке остались, то форматное управление требует начать новую запись и управление возвращается к той спецификации повторений группы, которая заканчивается последней предшествующей правой скобкой, а при ее отсутствии — к первой левой скобке спецификации формата. Заметим, что такое действие само по себе не влияет на значение масштабного множителя (п. 7.2.3.5).
7.2.3, 7.2.3.1—7.2.3.4. (Измененная редакция, Изм. № 1).
Масштабный множитель. Предписатель масштабного множителя определен для использования с преобразованиями F, Е, G и D и имеет вид
пР
(п — масштабный множитель — есть целое без знака, перед которым может располагаться знак минус).
При инициировании форматного управления масштабный множитель устанавливается равным нулю. Будучи однажды установленным, масштабный множитель применяется ко всем интерпретируемым впоследствии описателям полей F, Е, G и D до тех пор, пока не встретится другой предписатель масштабного множителя — с этого момента будет считаться установленным новый масштабный множитель.
Действие масштабного множителя. Масштабный множитель влияет на соответствующие преобразования следующим образом.
Для преобразований F, Е, G и D при вводе (в предположении, что во внешнем поле отсутствует экспонента), а также для преобразования F при выводе, эффект масштабного множителя состоит в том, что число во внешнем представлении равно числу во внутреннем представлении, умноженному на 10".
Для F, Е, G и D при вводе масштабный множитель не задает никакого действия, если во внешнем поле присутствует экспонента.
Для Е и D при выводе часть числа, образующая смешанную дробь (п. 5.1.1.2), умножается на 10п, а значение экспоненты умножается на 10-п.
Для G при выводе действие масштабного множителя временно прекращается, если значение, подвергаемое преобразованию, находится в области, допускающей использование преобразования F; если требуется использование преобразования Е, то масштабный множитель задает те же действия, что и для Е при выводе.
Преобразования чисел. Описатели числовых полей I, F, Е, G и D используются для задания ввода/вывода данных типа целый, вещественный, двойной точности и комплексный.
Для всех таких преобразований при вводе ведущие пробелы являются незначащими, а остальные пробелы трактуются как нули. Знак плюс может быть опущен. Поле, состоящее из одних пробелов, трактуется как нуль.
Для преобразований F, Е, G и D при вводе точка, присутствующая в поле ввода, отменяет задание точки в описателе поля.
Для всех таких преобразований при выводе поле вывода выравнивается вправо. Если число символов, порождаемых преобразованием, меньше ширины поля, то в поле вывода вставляются ведущие пробелы.