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

т>2).

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

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

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

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

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

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

  1. Объявление внешних имен. Объявление внешних имен имеет вид

EXTERNAL v„ v2 vn

(каждое V[— имя внешней процедуры).

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

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

  2. Объявление типа. Объявление типа имеет вид t v„ V2,...,vn

(t—INTEGER, REAL, DOUBLE PRECISION,
COMPLEX или LOGICAL;

каждое Vj— имя переменной, имя массива, имя функции или описание массива).

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

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

  1. Объявление начальных данных. Объявление начальных данных имеет вид

DATA k,/d,/, k2/d2/,..„ kn/dn/

(каждое k] — список, содержащий имена переменных и (или) элементов массивов;

каждое d, — список констант, перед каждой из которых мо­жет быть записана конструкция j*;

j — отличное от нуля целое без знака).

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

Формальные параметры не могут входить в списки к. Любое индексное выражение должно быть целым без знака.

Наличие конструкции j* перед константой эквивалентно запи­си этой константы j раз подряд через запятую. В списках dt могут встречаться текстовые константы.

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

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

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

FORMAT (qIt1z1t2z2...zn_ltnq2)

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

каждое t] — описатель поля или группа описателей полей; каждое гх разделитель полей;

п может быть равно нулю;

(q1tlzlt2z2... zn_;tnq2) — спецификация формата).

Каждое объявление формата должно быть помечено.

  1. Описатели полей. Описатели полей формата могут иметь вид

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).

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

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

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

  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).

  1. Масштабный множитель. Предписатель масштабного множителя определен для использования с преобразованиями F, Е, G и D и имеет вид

пР

(п — масштабный множитель — есть целое без знака, перед которым может располагаться знак минус).

При инициировании форматного управления масштабный множитель устанавливается равным нулю. Будучи однажды ус­тановленным, масштабный множитель применяется ко всем ин­терпретируемым впоследствии описателям полей F, Е, G и D до тех пор, пока не встретится другой предписатель масштабного множителя — с этого момента будет считаться установленным но­вый масштабный множитель.

  1. Действие масштабного множителя. Масштабный мно­житель влияет на соответствующие преобразования следующим образом.

Для преобразований F, Е, G и D при вводе (в предположении, что во внешнем поле отсутствует экспонента), а также для пре­образования F при выводе, эффект масштабного множителя сос­тоит в том, что число во внешнем представлении равно числу во внутреннем представлении, умноженному на 10".

Для F, Е, G и D при вводе масштабный множитель не зада­ет никакого действия, если во внешнем поле присутствует экспо­нента.

Для Е и D при выводе часть числа, образующая смешанную дробь (п. 5.1.1.2), умножается на 10п, а значение экспоненты умно­жается на 10-п.

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

  1. Преобразования чисел. Описатели числовых полей I, F, Е, G и D используются для задания ввода/вывода данных типа целый, вещественный, двойной точности и ком­плексный.

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

Для преобразований F, Е, G и D при вводе точка, присутствую­щая в поле ввода, отменяет задание точки в описателе поля.

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