каждое tj — описатель поля или группа описателей полей;
каждое zk — разделитель полей;
п может быть равно нулю;
. . . zn_, tn q2) — спецификация формата).
Каждое объявление формата должно быть помечено.
(Измененная редакция, Изм. № 1).
Описатели полей. Описатели полей формата могут иметь вид
rFwd
rEwd
ri w
nHh|h2...hn
nX
(буквы F, E, I, H и X указывают способ преобразования и редактирования при переходе от внутреннего представления записей к внешнему и обратно и называются кодами преобразований;
w и п — отличные от нуля целые без знака, указывающие ширину поля для внешней последовательности символов;
d — целое без знака, указывающее количество цифр в дробной части числа, изображаемого внешней последовательности символов;
г — либо пусто, либо отличное от нуля целое без знака, называемое счетчиком повторений, который указывает, сколько раз должен быть повторен следующий за ним описатель поля;
каждое hi — один из символов, представимых в процессоре).Ширина поля должна быть обязательно указана в каждом описателе поля. Для описателей вида w.d обязательно должно быть указано d, даже в том случае, когда оно есть нуль; w должно быть больше либо равно d.
Термин «основной описатель поля» используется для обозначения такого описателя поля, в котором отсутствует г.
Внутреннее представление внешних полей соответствует внутреннему представлению констант соответствующих типов (пп. 4.2. и 5.1.1).
Разделители полей. Разделители полей предназначены для разделения описателей полей и (или) групп описателей полей. Разделителями полей являются дробная черта и запятая. Серия дробных черт также является разделителем полей.
Дробная черта используется не только для разделения описателей полей, но и для разграничения форматных записей. Форматная запись — это последовательность символов. Длины таких последовательностей для данного внешнего носителя зависят как от процессора, так и от внешнего носителя.
Завершение обработки тех символов, которые могут содержаться в записи на внешнем носителе, само по себе не вызывает ввода или начала обработки следующей записи.
(Измененная редакция, Изм. № 1).
Спецификации повторений. Повторение какого-либо описателя поля (за исключением пН и пХ) достигается при помощи счетчика повторений: если позволяет список ввода/вывода, то заданное преобразование выполняется повторно указанное число раз.
Повторение группы описателей полей или разделителей полей достигается заключением их в скобки и, возможно, помещением перед левой скобкой целого числа без знака, называемого счетчиком повторений группы и задающего число повторений взятой в скобки группы. Если счетчик повторений группы не задан, то число повторений принимается равным единице. Рассмотренная форма называется основной группой.
Взаимодействие форматного управления со списком ввода/вывода. Начало выполнения оператора форматного ввода или форматного вывода инициирует форматное управление. Каждое действие форматного управления определяется как очередным элементом списка ввода/вывода, если таковой имеется, так и очередным описателем поля в спецификации формата. Если имеется список ввода/вывода, то в спецификации формата должен существовать, по крайней мере, один описатель поля, отличный от пН и пХ.
Если под форматным управлением . выполняется оператор ввода, то при инициировании форматного управления читается одна запись; после этого следующие записи читаются только в том случае, если этого требует спецификация формата. Каждое такое действие не может требовать большего числа символов, чем содержится в очередной записи.
Если под форматным управлением выполняется оператор вывода, то передача записи происходит каждый раз, когда спецификация формата требует перехода к новой записи. Завершение форматного управления влечет за собой вывод очередной записи.
Спецификация формата (если не считать эффекта применения счетчиков повторений) интерпретируется слева направо.
Каждому основному описателю I, F или Е, интерпретируемому в спецификации формата, соответствует один элемент, задаваемый списком ввода/вывода. Каждому основному описателю Н или X не соответствует никакой элемент, задаваемый списком ввода/вывода; в этом случае форматное управление связывает информацию, содержащуюся в таком описателе, непосредственно с записью. Если встречается дробная черта, то спецификация формата требует начала новой и/или окончания очередной записи. Если при выполнении оператора ввода форматное управление завершается или встречается дробная черта, то все необработанные символы очередной записи пропускаются.
Как только форматное управление встречает в спецификации формата основной описатель I, F или Е, оно проверяет, имеется ли соответствующий элемент, задаваемый списком ввода/вывода. Если такой элемент существует, то форматное управление передает преобразованную соответствующим образом информацию от элемента к записи или наоборот и продолжает работу. Если соответствующего элемента нет, то форматное управление завершается.
Если форматное управление дойдет до последней внешней правой скобки спецификации формата, то проверяется, остались ли необработанные элементы в списке ввода/вывода. Если таких элементов нет, то управление завершается; если же элементы в списке остались, то форматное управление требует начать новую запись и управление возвращается к той спецификации повторений группы, которая заканчивается последней предшествующей правой скобкой, а при ее отсутствии — к первой левой скобке спецификации формата.
(Измененная редакция, Изм. № 1).
Масштабный множитель — отсутствует; определение — по ГОСТ 23056—78.
Е Действие масштабного множителя — отсутствует; определение — по ГОСТ 23056—78.
Преобразования чисел. Описатели числовых полей I, F и Е используются для задания ввода/вывода данных типа целый и вещественный.
Для всех таких преобразований при вводе ведущие пробелы являются незначащими, а остальные пробелы трактуются как нули. Знак плюс может быть опущен. Поле, состоящее из одних пробелов, трактуется как нуль.
Для преобразований F и Е при вводе точка, присутствующая в поле ввода, отменяет задание точки в описателе поля.
Для всех таких преобразований при выводе поле вывода выравнивается вправо. Если число символов, порождаемых преобразованием, меньше ширины поля, то в поле вывода вставляются ведущие пробелы.
Для всех таких преобразований при выводе внешнее представление отрицательного значения должно иметь знак минус, представление положительного значения может иметь знак плюс.
Число символов, порождаемых преобразованием при выводе, не должно превышать ширины поля.
Преобразование данных типа целый. Описатель числового поля Iw указывает, что внешнее поле — это целое число, занимающее w позиций. Значение элемента списка является или (после ввода) должно являться во внутреннем представлении данным типа целый.
Во внешнем поле ввода последовательность символов должна представлять целое число без знака или со знаком (п. 5.1.1.1), с учетом трактовки пробелов (п. 7.2.3.6).
Внешнее поле вывода состоит, если это необходимо, из пробелов, за которыми следует знак минус, если данное во внутреннем представлении отрицательно, или, возможно, знак плюс в противном случае, за которым следует целое число без знака, представляющее величину внутреннего данного.
(Измененная редакция, Изм. № 1).
Преобразование данных типа вещественный. Имеются два преобразования, применимые к данным типа вещественный: F и Е.
Описатель числового поля Fw.d указывает, что внешнее поле занимает w позиций, а дробная часть состоит из d цифр. Значение элемента списка является или (после ввода) должно являться во внутреннем представлении данным типа вещественный.
Внешнее поле ввода состоит из последовательности цифр, возможно, содержащей точку, а этой последовательности может предшествовать знак.
Внешнее поле вывода состоит, если это необходимо, из пробелов, за которыми следует знак минус, если внутреннее значение отрицательно, или возможно, знак плюс в противном случае, за которым следует последовательность цифр, содержащая точку и представляющая величину внутреннего данного, округленную до d десятичных цифр после запятой.
Описатель числового поля Ew.d указывает, что внешнее поле занимает w позиций, а дробная часть состоит из d цифр. Значение элемента списка является или (после ввода) должно являться во внутреннем представлении данным типа вещественный.
Основная форма внешнего поля ввода такая же, что и для преобразования F.
За основной формой может следовать экспонента в одной из следующих форм:
целое число со знаком;
Е, за которым следует целое число со знаком или без знака. Стандартная форма внешнего поля вывода имеет вид
ВО.хщ.хД
(£ — отсутствие символа, либо знак минус в этой позиции;
Хр . . xd — старшие d десятичных цифр округленного выводимого значения данного;
Y —десятичная экспонента).
Y имеет вид
Е±У1У2 или
±УіУ2Уз
(каждое у; — цифра).
Вместо знака плюс в первом из этих видов может стоять пробел.
Описатель числового поля Gw.d — отсутствует; определение — по ГОСТ 23056—78.
7.2.3.6.2.3. (Измененная редакция. Изм. № 1).
Преобразование данных типа двойной точности — отсутствует; определение — по ГОСТ 23056—78.
Преобразование данных типа комплексный — отсутствует; определение — по ГОСТ 23056—78.
Преобразование данных типа логический — отсутствует; определение — по ГОСТ 23056—78.
Описатель текстового поля. Текстовая информация может передаваться посредством описателя поля пН.
Описатель пН указывает, что в качестве текстовой информации, подлежащей передаче при вводе или выводе, берутся п символов (включая пробелы), следующие непосредственно за описателем поля пН в самой спецификации формата.
Описатель поля пробелов. Описатель поля пробелов есть пХ. При вводе пропускаются п символов из внешней вводимой записи, а при выводе во внешнюю выводимую запись вставляется п пробелов.
(Измененная редакция, Изм. № 1).
Спецификация формата в массивах — отсутствует; определение — по ГОСТ 23056—78.
ПРОЦЕДУРЫ И МОДУЛИ
Имеются четыре категории процедур: внутренние функции, встроенные функции, внешние функции и внешние подпрограммы. Первые три категории процедур относятся к функциям (или процедурам-функциям), а последняя категория — к подпрограммам (или процедурам-подпрограммам). Имеется одна категория модулей: модули-процедуры — к ней относятся модули-функции и модули-подпрограммы. Правила типа для процедур-функций указаны в п. 5.3.
Внутренние функции. Внутренняя функция определяется в том же самом программном модуле, в котором имеются ссылки на эту функцию. Такая функция определяется при помощи объявления внутренней функции.
В каждом программном модуле все определения внутренних функций должны предшествовать первому оператору этого модуля и следовать за объявлениями спецификаций, если таковые имеются. Имя внутренней функции не должно встречаться в том же самом программном модуле в качестве имени переменной или имени массива.
Структура объявлений внутренних функций. Внутренняя функция определяется при помощи объявления внутренней функции, которое имеет вид
f (а|,а2,...,ап) = е
(f — символическое имя определяемой функции;
е — выражение;
каждое 3j — символическое имя, называемое формальным параметром).
Соответствие между f и е должно удовлетворять правилам присваивания из п. 7.1.1.1.
Символические имена, являющиеся формальными параметрами, используются в объявлении внутренней функции лишь для указания типа, числа и порядка параметров функции и могут совпадать с именами переменных того же типа, встречающимися где-либо еще в рассматриваемом программном модуле (но вне объявления данной функции). Все формальные параметры в одном объявлении функции должны быть различными.
Выражение е, кроме формальных параметров, может содержать только:
константы;
указатели переменных;
указатели встроенных функций;
указатели внутренних функций, определенных ранее в данном программном модуле;
указатели внешних функций.
Ссылки на внутренние функции. Для ссылки на внутреннюю функцию используется ее указатель (п. 5.2) в качестве первичного выражения в арифметическом выражении. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами. Фактическим параметром в указателе внутренней функции может быть любое выражение того же типа, что и соответствующий формальный параметр.
Вычисление значения указателя внутренней функции заключается в установлении связи (п. 10.2.2) между значениями фактических параметров и соответствующими формальными параметрами и в вычислении значения выражения в объявлении, определяющем эту функцию. Вычисленное значение выражения принимается в качестве значения указателя функции' и тем самым становится доступным в выражении, содержащем этот указатель.