allgosts.ru35.060 Языки, используемые в информационных технологиях35 ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ

ГОСТ 23057-78 Язык программирования Базисный Фортран

Обозначение:
ГОСТ 23057-78
Наименование:
Язык программирования Базисный Фортран
Статус:
Действует
Дата введения:
01.01.1979
Дата отмены:
-
Заменен на:
-
Код ОКС:
35.060

Текст ГОСТ 23057-78 Язык программирования Базисный Фортран


ГОСТ 23057-78*

Группа П85

ГОСУДАРСТВЕННЫЙ СТАНДАРТ СОЮЗА ССР

Язык программирования

БАЗИСНЫЙ ФОРТРАН

Programming language. Basic FORTRAN

Дата введения 1979-01-01

Постановлением Государственного комитета стандартов Совета Министров СССР от 7 апреля 1978 г. N 962 срок введения установлен с 01.01.79

* ПЕРЕИЗДАНИЕ (декабрь 1991 г.) с Изменением N 1, утвержденным в июне 1980 г. (ИУС 9-80).

Настоящий стандарт распространяется на язык программирования Базисный ФОРТРАН и устанавливает:

форму представления и правила интерпретации (синтаксис и семантику) программы, записанной на языке Базисный ФОРТРАН;

форму представления входных данных, отрабатываемых программой при ее выполнении в автоматизированной системе обработки данных;

форму представления выходных данных, получаемых в результате выполнения программы.

Стандарт не устанавливает:

механизм, которым программа трансформируется для ее выполнения в системе обработки данных (комбинация этого механизма и системы обработки данных называется процессором);

метод передачи программы и ее входных или выходных данных в систему обработки данных и обратно;

действия, необходимые для запуска и управления программой в системе обработки данных;

результаты выполнения программы, если стандарт не устанавливает правил ее интерпретации;

размер и сложность программы;

диапазон или точность представления числовых значений;

состав и форму документации на трансляторы с языка Базисный ФОРТРАН и программы, записанные на языке Базисный ФОРТРАН.

Стандарт полностью соответствует международной рекомендации ИСО/Р 1539-72.

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

1. ОБЩИЕ ПОЛОЖЕНИЯ

1.1. Стандарт предназначен для достижения высокой степени мобильности и машинной независимости программ, записанных на языке Базисный ФОРТРАН, позволяющей использовать их в различных автоматизированных системах обработки данных.

1.2. Процессор, выполняющий программы, записанные на языке Базисный ФОРТРАН, считается согласованным с настоящим стандартом, если он воспринимает и интерпретирует в соответствии с настоящим описанием по крайней мере те формы и соотношения, которые описаны в настоящем стандарте.

1.3. Любое ограничение или запрет, сформулированные в настоящем стандарте, означают следующее: если в какой-либо программе это ограничение не выполнено или запрет нарушен, то такая программа считается несогласованной с настоящим стандартом.

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

2. СТРУКТУРА ЯЗЫКА

2.1. Настоящий раздел определяет общую структуру программ, записанных на языке Базисный ФОРТРАН. В разделе содержатся также определенные разъяснения, касающиеся смысла некоторых фраз и отдельных слов.

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

2.2.1. Выполнимая программа состоит из одного или нескольких программных модулей (п.9.1.3), один (и только один) из которых является головным модулем (п.9.1.4).

2.2.2. Выполнение программы начинается с выполнения ее головного модуля. Однако в любом программном модуле (в том числе и в головном) могут использоваться внешние процедуры (разд.9), описывающие вне данного модуля отдельные процедуры процесса обработки данных. Для определения внешних процедур средствами Базисного ФОРТРАНа служат модули-процедуры (разд.8).

2.3. Внешняя процедура может быть внешней функцией или внешней подпрограммой (разд.8 и 9). Внешние процедуры могут определяться и другими средствами, отличными от языка Базисный ФОРТРАН. Эти средства настоящим стандартом не определяются.

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

2.3.1. (Исключен, Изм. N 1).

2.4. Каждый программный модуль состоит из предложений и комментариев. В этом смысле головной модуль - это последовательность предложений и комментариев Базисного ФОРТРАНа, не содержащая заголовков функций и заголовков подпрограмм; модуль, не являющийся головным, начинается либо с заголовка функции, либо с заголовка подпрограммы.

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

2.5.1. Предложения Базисного ФОРТРАНа распадаются на два основных класса: выполняемые (или операторы) и невыполняемые (или объявления). Операторы определяют действия в программе, тогда как объявления (частными случаями которых являются заголовки функций и заголовки подпрограмм) описывают способ использования программы, характеристики операндов, способ редактирования данных, вводимые в употребление функции или размещение данных (пп.7.1, 7.2).

2.4, 2.5, 2.5.1. (Измененная редакция, Изм. N 1).

2.6. Синтаксическими элементами предложения являются имена и операции. Имена используются для ссылок на объекты, например, на данные или процедуры. Операции определяют действия над именованными объектами.

2.6.1. Один частный случай имен, имя массива, заслуживает особого рассмотрения. С именем массива должен быть связан размер идентифицируемого массива, определяемый в описании массива (п.7.2.1.1). Имя массива, дополненное индексом, используется для идентификации конкретного элемента массива (п.5.1.3).

2.7. Имена данных и арифметические операции могут быть связаны в выражения. Выражение служит для задания правил вычисления значения: это значение получается в результате выполнения указанных в выражении операций над именованными данными.

2.8. Для идентификации в Базисном ФОРТРАНе используются имена и целые числа без знака (п.5.1.1). Данные и процедуры именуются. Предложения помечаются целыми числами без знака. Устройства ввода/вывода нумеруются (разд.3, 6, 7).

2.9. В настоящем стандарте встречаются условные обозначения предложений Базисного ФОРТРАНа, содержащие список элементов; во всех таких случаях предполагается, что список содержит по крайней мере один элемент, если не оговорено противное. Например, запись

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

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

Термин "ссылка" используется со специальным смыслом, определенным в разд.5.

3. ПРАВИЛА ЗАПИСИ ПРОГРАММЫ

3.1. Алфавит Базисного ФОРТРАНа. При записи программного модуля используются только символы, входящие в алфавит Базисного ФОРТРАНа. Этот алфавит делится на три группы символов: цифры, буквы и специальные символы. Множество символов, образующих алфавит Базисного ФОРТРАНа, считается неупорядоченным.

3.1.1. Цифры. Цифра - это один из десяти символов: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Если не оговорено противное и уместно считать последовательность цифр числом, то оно будет интерпретироваться как число в десятичной системе счисления.

Восьмеричная цифра - это один из восьми символов:

0, 1, 2, 3, 4, 5, 6, 7.

Восьмеричные цифры используются только в операторах останова (п.7.1.2.7.1) и паузы (п.7.1.2.7.2).

3.1.2. Буквы. Буква - это одна из двадцати шести символов: , , , , , , , , , , , , , , , , , , ,

, , , , , ,

.

3.1.3. Буквенно-цифровые символы. Буквенно-цифровой символ - это либо буква, либо цифра.

3.1.4. Специальные символы. Специальный символ - это один из десяти символов:

Символ

Название символа

Пробел

=

Равно

+

Плюс

-

Минус

*

Звездочка

/

Дробная черта

(

Круглая левая скобка (левая скобка)

)

Круглая правая скобка (правая скобка)

,

Запятая

.

Точка

3.1.4.1. Символ пробела. Символ пробела - это отсутствие какого-либо графического изображения в данной позиции. Кроме специально оговоренных случаев (пп.3.2.2-3.2.4, 7.2.3.6 и 7.2.3.8) символ пробела не является значащим и поэтому может свободно использоваться для улучшения наглядности программы в любом ее месте, с учетом ограничений на строки продолжения (п.3.3).

3.2. Строки. Строка - это последовательность, состоящая из 72 символов. Каждый символ должен принадлежать алфавиту Базисного ФОРТРАНа, за исключением случаев, описанных в пп.7.2.3.1 и 7.2.3.8.

Позиции символов в строке последовательно нумеруются слева направо от 1 до 72 включительно.

3.2.1. Комментарии. Буква в позиции 1 какой-либо строки указывает на то, что данная строка является комментарием. За комментарием должны непосредственно следовать либо другой комментарий, либо начальная строка, либо заключительная строка (п.3.2.2).

Комментарии не оказывают никакого влияния на выполнение программы, их можно использовать для пояснений.

3.2.2. Заключительная строка. Заключительной строкой называется такая строка, которая в позициях 1-6 содержит пробелы, а в позициях 7-72 пробелы и буквы , и . Эти буквы должны следовать в том порядке, в каком они приведены выше, каждая по одному разу, и могут размещаться в любых этих позициях; в остальных позициях должны содержаться пробелы. Заключительная строка указывает процессору конец текста программного модуля (п.9.1.3). Текст каждого программного модуля обязательно должен завершаться точно одной заключительной строкой.

3.2.3. Начальная строка. Начальной строкой называется такая строка, которая не является ни комментарием, ни заключительной строкой и содержит пробел или цифру 0 в позиции 6. В позициях 1-5 содержится либо метка предложения, либо пробелы.

3.2.4. Строка-продолжение. Строкой-продолжением называется такая строка, которая не является комментарием и в позиции 6 содержит символ, отличный от пробела и цифры 0.

Строка-продолжение может непосредственно следовать только за начальной строкой или за другой строкой-продолжением.

3.3. Предложения. Предложение состоит из одной начальной строки, за которой может следовать до пяти строк-продолжений. Символы, образующие предложение, записываются в позициях 7-72 каждой из строк и считаются упорядоченными: сначала идут символы, записанные в начальной строке, затем - символы, записанные в первой строке-продолжении (если она имеется), затем - символы, записанные во второй строке-продолжении (если она имеется) и т.д. В каждой строке символы считаются упорядоченными по возрастанию номеров позиций, в которых они записаны (учитываются только символы, расположенные в колонках 7-72).

3.4. Метка предложения. Любое предложение может быть помечено, с тем, чтобы на него можно было ссылаться в других предложениях. Метка предложения состоит из последовательности от одной до четырех цифр. Величина целого без знака, представленного этой последовательностью цифр, не играет роли, но она должна быть больше нуля. Метка предложения должна быть помещена в позициях 1-5 начальной строки этого предложения и может начинаться с любой из этих позиций. В одном программном модуле одной и той же меткой не должно быть помечено более одного предложения. При отождествлении меток ведущие нули не учитываются.

3.5. Символические имена. Символическое имя состоит из буквы, за которой может следовать еще до четырех буквенно-цифровых символов (см. пп.10.1-10.1.10 относительно классификации символических имен и ограничений на их использование).

3.6. Упорядоченность символов. Символы, образующие программный модуль, считаются упорядоченными. В частности, любой осмысленный набор символов, образующий имена, строки и предложения, является упорядоченным. Эта упорядоченность определяется упорядоченностью символов в строке (п.3.2) и порядком следования строк в программном модуле.

3.1-3.6. (Измененная редакция, Изм. N 1).

4. ТИПЫ ДАННЫХ

В Базисном ФОРТРАНе различают данные двух типов: целые и вещественные. Каждый тип предназначен для вполне определенных целей и может иметь свое особое внутреннее представление. Поэтому интерпретация операций над данными существенно зависит от типов этих данных. Тип функции определяет тип того значения, которое доставляется в качестве результата в выражение, содержащее указатель этой функции.

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

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

Для символического имени тип данного может быть установлен по первой букве этого имени (п.5.3).

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

4.2. Свойства данных разных типов. В пп.4.2.1-4.2.6 определяются математические свойства и свойства представлений каждого из двух типов данных. Значение нуль не считается ни положительным, ни отрицательным для данных типов целый и вещественный.

4.2.1. Тип целый. Целое данное - это всегда точное представление целого значения. Оно может принимать только целые (положительные, отрицательные и нулевое) значения.

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

4.2.3. Тип двойной точности - отсутствует; определение - по ГОСТ 23056-78.

4.2.4. Тип комплексный - отсутствует; определение - по ГОСТ 23056-78.

4.2.5. Тип логический - отсутствует; определение - по ГОСТ 23056-78.

4.2.6. Тип текстовый - отсутствует; определение - по ГОСТ 23056-78.

5. ИДЕНТИФИКАЦИЯ ДАННЫХ И ПРОЦЕДУР

Имена используются как для ссылок на данные и процедуры, так и для любой другой их идентификации.

Термин "ссылка" используется при такой идентификации данного, когда подразумевается, что текущее значение этого данного становится доступным при выполнении предложения (оператора), содержащего эту ссылку. Если данное идентифицируется, но его значение не обязательно становится доступным, то говорят, что данное именуется. Один случай, когда данное именуется, представляет особый интерес - это когда данному присваивается значение и тем самым производится определение или переопределение (значения) данного, т.е. данное либо впервые получает некоторое конкретное значение, либо ему присваивается новое значение. В случае процедуры термин "ссылка" означает, что действия, определяемые этой процедурой, станут доступными при выполнении предложения (оператора), содержащего эту ссылку.

Полное и строгое объяснение понятий "ссылка" и "определение" (включая и "переопределение") содержится в разд.10.

5.1. Имена данных и процедур. С помощью имен данных идентифицируются константы, переменные, массивы или элементы массивов. С помощью имен процедур идентифицируются функции и подпрограммы.

5.1.1. Константы. Константа является данным, которое всегда определено в процессе выполнения программы и не может быть переопределено (т.е. изменено). Для каждого типа данных имеются свои правила записи констант.

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

5.1.1.1. Целое число без знака. Целое число без знака записывается как непустая последовательность цифр. Значение константы этого вида в точности равно числу, изображенному в десятичной системе счисления этой константой.

5.1.1.2. Вещественное число без знака. Основной формой записи вещественного числа без знака является смешанная дробь, под которой понимается запись вида

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

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

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

5.1.1.3. Число двойной точности без знака - отсутствует; определение - по ГОСТ 23056-78.

5.1.1.4. Комплексное число - отсутствует; определение - по ГОСТ 23056-78.

5.1.1.5. Логическая константа - отсутствует; определение - по ГОСТ 23056-78.

5.1.1.6. Текстовая константа - отсутствует; определение - по ГОСТ 23056-78.

5.1.2. Переменная. Переменная есть данное, идентифицируемое символическим именем (п.3.5). На это данное можно ссылаться и его можно определять (т.е. присваивать ему значение).

5.1.3. Массив. Массив есть упорядоченный набор данных, имеющий одно или два измерения. Массив идентифицируется символическим именем. Идентификация этого упорядоченного выбора данных как единого целого достигается посредством использования имени массива.

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

На элемент массива можно ссылаться и его можно определять.

5.1.3.2. Индекс. Индекс представляет собой заключенный в скобки список индексных выражений. Если индексных выражений два, то они разделяются запятой. Число индексных выражений должно соответствовать объявленной размерности массива (п.7.2.1.1), за исключением вхождения имени элемента массива в объявление эквивалентности (п.7.2.1.4). Идентифицируемый элемент массива определяется при помощи функции линеаризации (п.7.2.1.1.1), используя вычисленные значения всех индексных выражений.

5.1.3.3. Индексные выражения. Индексное выражение записывается в виде одной из следующих конструкций:

где и - целые без знака, - ссылка на переменную типа целый (см. разд.6 относительно правил вычисления выражений; пп.10.2.8 и 10.3 относительно требований на использование переменной в индексе).

5.1.4. Процедуры. Процедура (разд.8) идентифицируется символическим именем. Процедурой является либо внутренняя функция, либо встроенная функция, либо основная внешняя функция, либо внешняя функция, либо внешняя подпрограмма. Внутренние функции, встроенные функции, основные внешние функции и внешние функции называются общим термином функции (или процедуры-функции), а внешние подпрограммы - термином подпрограммы (или процедуры-подпрограммы).

Функция доставляет результат, который называется значением функции и используется в точке ссылки на эту функцию; подпрограмма этого не делает. Способы ссылки на функции и подпрограммы отличаются друг от друга.

5.2. Ссылка на функцию. Ссылка на функцию производится при помощи указателя функции, состоящего из имени функции, за которым следует список фактических параметров, заключенный в скобки. Если список содержит более одного параметра, то они отделяются друг от друга запятой. Допустимые виды фактических параметров функции приведены в разд.8 (см. п.10.2.1 относительно требований к ссылкам на функции).

5.3. Правила типов для идентификаторов данных и процедур. Тип константы определяется ее изображением. С символическим именем, идентифицирующим переменную, массив или внутреннюю функцию, связывается тип целый, если первая буква этого имени есть , , , , , ; в противном случае связывается тип вещественный.

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

Если в программном модуле содержатся ссылки на внешнюю функцию, то тип этой функции определяется так же, как и для переменной или массива.

С каждым элементом массива связывается тот же тип, который связан с именем этого массива.

5.4. Формальные параметры. Формальный параметр внешней процедуры представляет переменную или массив.

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

Процесс установления связи фактических параметров с формальными параметрами изложен в разд.8 и 10.

6. ВЫРАЖЕНИЯ

Настоящий раздел определяет форму представления и правила вычисления арифметических выражений. Выражение формируется из операндов и знаков операций (см. п.10.3 об ограничениях на использование операндов в выражениях).

6.1. Арифметические выражения. Арифметическое выражение формируется из знаков арифметических операций и арифметических операндов. Как выражение, так и входящие в него операнды идентифицируют значения типа целый и вещественный. Знаки арифметических операций:

Знак операции

Представляемая операция

+

Сложение

-

Вычитание

*

Умножение

/

Деление

**

Возведение в степень

Арифметические операции сложения и вычитания могут быть одноместными и двухместными. В случае одноместных операций сложения и вычитания подразумеваемым первым арифметическим операндом является нуль.

Арифметические операнды - это первичное арифметическое выражение, множитель, терм, терм со знаком, простое арифметическое выражение и арифметическое выражение.

Первичное арифметическое выражение - это либо арифметическое выражение, взятое в скобки, либо константа, либо ссылка на переменную, либо ссылка на элемент массива, либо ссылка на функцию.

Множитель - это либо первичное арифметическое выражение, либо конструкция вида:

первичное арифметическое выражение

первичное арифметическое выражение

Терм - это либо множитель, либо конструкция одного из видов:

терм/множитель

или

терммножитель

Терм со знаком - это терм, которому непосредственно предшествует знак + или -.

Простое арифметическое выражение - это либо терм, либо два простые арифметические выражения, разделенные знаком + или -.

Арифметическое выражение - это либо простое арифметическое выражение, либо терм со знаком, либо одна из этих двух конструкций, за которой непосредственно следует знак + или -, за которым непосредственно следует простое арифметическое выражение.

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

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

6.2. Отношения - отсутствует; определение - по ГОСТ 23056-78.

6.3. Логические выражения - отсутствует; определение - по ГОСТ 23056-78.

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

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

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

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

Не может быть вычислен никакой операнд, значение которого математически не определено.

7. ПРЕДЛОЖЕНИЯ

Предложения Базисного ФОРТРАНа можно разделить на выполняемые и невыполняемые. Выполняемые предложения - операторы - определяют действия; невыполнимые предложения - объявления - описывают характеристики и упорядочение данных, способ редактирования данных, вводимые в употребление функции и классификацию программных модулей.

7.1. Операторы. Имеется три типа операторов:

операторы присваивания;

операторы управления;

операторы ввода/вывода.

7.1.1. Операторы присваивания. Существует один тип операторов присваивания - арифметический оператор присваивания.

7.1.1.1. Арифметический оператор присваивания. Арифметический оператор присваивания имеет вид:

( - имя переменной или имя элемента массива;

- арифметическое выражение).

Выполнение такого оператора заключается в вычислении выражения е и изменении значения v в соответствии с табл.1.

Таблица 1

Тип

Тип

Действие

Целый

Целый

Присв.

То же

Вещественный

Фикс.; Присв.

Вещественный

Целый

Плав.; Присв.

То же

Вещественный

Присв.

Примечания:

1. "Присв." - передача результирующего значения без изменений.

2. "Фикс." - отбрасывание дробной части результата и преобразование полученного значения в форму целого данного.

3. "Плав." - преобразование значения в форму вещественного данного.

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

7.1.1.2. Логический оператор присваивания - отсутствует; определение по ГОСТ 23056-78.

7.1.1.3. Оператор предписания - отсутствует; определение по ГОСТ 23056-78.

7.1.2. Операторы управления. Существует семь типов операторов управления:

операторы перехода;

условный арифметический оператор;

оператор вызова подпрограммы;

оператор возврата;

оператор продолжения;

операторы останова и паузы;

оператор цикла.

Метки, используемые в операторах управления, должны помечать операторы в том же программном модуле, в котором используются эти операторы управления.

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

7.1.2.1. Операторы перехода. Существует два типа операторов перехода:

безусловный оператор перехода;

вычисляемый оператор перехода.

7.1.2.1.1. Безусловный оператор перехода. Безусловный оператор перехода имеет вид:

( - метка оператора).

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

7.1.2.1.2. Оператор перехода по предписанию - отсутствует; определение - по ГОСТ 23056-78.

7.1.2.1.3. Вычисляемый оператор перехода. Вычисляемый оператор перехода имеет вид:

(каждое - метка оператора; - имя переменной типа целый).

Результат выполнения этого оператора состоит в том, что следующим будет выполняться оператор, помеченный меткой , где - значение переменной к моменту выполнения данного оператора перехода. Действие этого оператора определено только для , удовлетворяющих условию (см. пп.10.2.8 и 10.3 относительно использования переменной типа целый в вычисляемом операторе перехода)

.

7.1.2.2. Условный арифметический оператор. Условный арифметический оператор имеет вид:

( - арифметическое выражение типа целый или вещественный; каждое - метка оператора).

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

.

7.1.2.3. Условный логический оператор - отсутствует; определение - по ГОСТ 23056-78.

7.1.2.4. Оператор вызова подпрограммы. Оператор вызова подпрограммы имеет вид:

или

( - имя подпрограммы;

каждое - фактический параметр (п.8.4.2)).

В начале выполнения оператора вызова подпрограммы происходит обращение к указанному модулю-подпрограмме. Возврат управления из этого модуля завершает выполнение оператора вызова подпрограммы.

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

7.1.2.5. Оператор возврата. Оператор возврата имеет вид:

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

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

Если этот оператор используется в модуле-функции, то результат его выполнения состоит в возврате управления в тот программный модуль, из которого было произведено обращение к рассматриваемому модулю-функции, и в этот момент становится доступным значение функции (п.8.3.1), определенное этим модулем.

7.1.2.6. Оператор продолжения. Оператор продолжения имеет вид:

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

7.1.2.7. Операторы останова и паузы. Существует два вида операторов:

оператор останова;

оператор паузы.

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

7.1.2.7.1. Оператор останова. Оператор останова имеет вид:

или

( - последовательность от одной до четырех восьмеричных цифр).

В результате выполнения этого оператора завершается выполнение программы.

7.1.2.7.2. Оператор паузы. Оператор паузы имеет вид:

или

( - последовательность от одной до четырех восьмеричных цифр).

Выполнение этого оператора состоит из двух этапов. В результате выполнения первого из них происходит приостановка выполняется программы.* На время этой приостановки становится доступной последовательность восьмеричных цифр . Для возобновления выполнения программы необходимы действия, внешние по отношению к ней. Если выполнение возобновляется без каких-либо изменений состояния процессора, то выполняется второй этап оператора паузы, в результате чего продолжается нормальный порядок выполнения операторов (п.9.2).

________________

* Текст соответствует оригиналу. - .

7.1.2.8. Оператор цикла.

7.1.2.8.1. Оператор цикла имеет вид:

или

( - метка оператора;

- имя переменной типа целый;

каждое - целое без знака либо имя переменной типа целый).

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

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

рвого.

7.1.2.8.2. Оператор цикла служит для задания цикла в программе. Действия, порождаемые выполнением оператора цикла, описываются следующими шестью шагами:

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

б) выполняется тело оператора цикла;

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

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

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

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

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

7.1.2.8.3. Понятие расширенного тела - отсутствует; определение - по ГОСТ 23056-78.

7.1.2.8.4. Управляющая переменная, начальный и конечный параметры, а также параметр приращения оператора цикла не могут переопределяться при выполнении тела этого оператора цикла.

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

7.1.3. Операторы ввода/вывода. Существует два типа операторов ввода/вывода:

основные операторы ввода/вывода;

вспомогательные операторы ввода/вывода.

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

В дальнейшем считается, что и обозначают соответственно устройство ввода/вывода и спецификацию формата. Устройство ввода/вывода идентифицируется значением типа целый, поэтому может быть либо целым без знака, либо именем переменной типа целый, значение которой идентифицирует определенное устройство. Спецификация формата описана в п.7.2.3. В свою очередь, может быть меткой объявления формата. Соответствующее объявление формата должно находиться в том же программном модуле, что и оператор ввода/вывода, использующий эту метку.

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

7.1.3.1. Свойства устройства ввода/вывода. Считается, что с конкретным устройством ввода/вывода связан только один последовательный файл. Такое устройство обладает следующими свойствами:

а) если устройство содержит записи, то они считаются упорядоченными;

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

________________

* Текст соответствует оригиналу. - .

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

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

д) при любой передаче очередной записи позиция устройства изменяется так, что эта очередная запись становится предыдущей записью.

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

7.1.3.2. Основные операторы ввода/вывода. Основные операторы ввода/вывода служат для передачи записей. Каждый такой оператор может содержать список имен переменных, массивов и элементов массивов. При вводе именованным элементам присваиваются значения, а при выводе их значения передаются вовне.

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

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

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

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

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

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

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

или

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

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

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

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

а.

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

или

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

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

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

или

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

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

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

или

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Таблица 2

Размерность

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

Индекс

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

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

1

2

Примечание. и - индексные выражения; и - верхние границы по измерениям.

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

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

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

(каждое - описание массива).

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

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

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

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

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

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

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

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

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

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

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

(каждое - список вида , , …, ;

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

2).

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

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

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

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

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

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

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

).

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

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

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

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

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

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

каждое - описатель поля или группа описателей полей;

каждое - разделитель полей;

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

- спецификация формата).

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

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

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

(буквы , , , и указывают способ преобразования и редактирования при переходе от внутреннего представления записей к внешнему и обратно и называются кодами преобразований;

и - отличные от нуля целые без знака, указывающие ширину поля для внешней последовательности символов;

- целое без знака, указывающее количество цифр в дробной части числа, изображаемого внешней последовательности символов;

- либо пусто, либо отличное от нуля целое без знака, называемое счетчиком повторений, который указывает, сколько раз должен быть повторен следующий за ним описатель поля;

каждое - один из символов, представимых в процессоре).

Ширина поля должна быть обязательно указана в каждом описателе поля. Для описателей вида обязательно должно быть указано , даже в том случае, когда оно есть нуль; должно быть больше либо равно .

Термин "основной описатель поля" используется для обозначения такого описателя поля, в котором отсутствует .

Внутреннее представление внешних полей соответствует внутреннему представлению констант соответствующих типов (пп.4.2

и 5.1.1).

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

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

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

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

7.2.3.3. Спецификации повторений. Повторение какого-либо описателя поля (за исключением и ) достигается при помощи счетчика повторений: если позволяет список ввода/вывода, то заданное преобразование выполняется повторно указанное число раз.

Повторение группы описателей полей или разделителей полей достигается заключением их в скобки и, возможно, помещением перед левой скобкой целого числа без знака, называемого счетчиком повторений группы и задающего число повторений взятой в скобки группы. Если счетчик повторений группы не задан, то число повторений принимается равным единице. Рассмотренная форма называется основной группой.

7.2.3.4. Взаимодействие форматного управления со списком ввода/вывода. Начало выполнения оператора форматного ввода или форматного вывода инициирует форматное управление. Каждое действие форматного управления определяется как очередным элементом списка ввода/вывода, если таковой имеется, так и очередным описателем поля в спецификации формата. Если имеется список ввода/вывода, то в спецификации формата должен существовать, по крайней мере, один описатель поля, отличный от и .

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

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

Спецификация формата (если не считать эффекта применения счетчиков повторений) интерпретируется слева направо.

Каждому основному описателю , или , интерпретируемому в спецификации формата, соответствует один элемент, задаваемый списком ввода/вывода. Каждому основному описателю или не соответствует никакой элемент, задаваемый списком ввода/вывода; в этом случае форматное управление связывает информацию, содержащуюся в таком описателе, непосредственно с записью. Если встречается дробная черта, то спецификация формата требует начала новой и/или окончания очередной записи. Если при выполнении оператора ввода форматное управление завершается или встречается дробная черта, что все необработанные символы очередной записи пропускаются.

Как только форматное управление встречает в спецификации формата основной описатель , или , оно проверяет, имеется ли соответствующий элемент, задаваемый списком ввода/вывода. Если такой элемент существует, то форматное управление передает преобразованную соответствующим образом информацию от элемента к записи или наоборот и продолжает работу. Если соответствующего элемента нет, то форматное управление завершается.

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

(Измененная редакция, Изм. N

1).

7.2.3.5. Масштабный множитель - отсутствует; определение - по ГОСТ 23056-78.

7.2.3.5.1. Действие масштабного множителя - отсутствует; определение - по ГОСТ 23056-78.

7.2.3.6. Преобразования чисел. Описатели числовых полей , и используются для задания ввода/вывода данных типа целый и вещественный.

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

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

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

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

Число символов, порождаемых преобразованием при выводе, не должно превышать ширины поля.

7.2.3.6.1. Преобразование данных типа целый. Описатель числового поля указывает, что внешнее поле - это целое число, занимающее позиций. Значение элемента списка является или (после ввода) должно являться во внутреннем представлении данным типа целый.

Во внешнем поле ввода последовательность символов должна представлять целое число без знака или со знаком (п.5.1.1.1), с учетом трактовки пробелов (п.7.2.3.6).

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

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

7.2.3.6.2. Преобразование данных типа вещественный. Имеются два преобразования, применимые к данным типа вещественный: и .

7.2.3.6.2.1. Описатель числового поля указывает, что внешнее поле занимает позиций, а дробная часть состоит из цифр. Значение элемента списка является или (после ввода) должно являться во внутреннем представлении данным типа вещественный.

Внешнее поле ввода состоит из последовательности цифр, возможно, содержащей точку, а этой последовательности может предшествовать знак.

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

7.2.3.6.2.2. Описатель числового поля указывает, что внешнее поле занимает позиций, а дробная часть состоит из цифр. Значение элемента списка является или (после ввода) должно являться во внутреннем представлении данным типа вещественный.

Основная форма внешнего поля ввода такая же, что и для преобразования .

За основной формой может следовать экспонента в одной из следующих форм:

целое число со знаком;

, за которым следует целое число со знаком или без знака.

Стандартная форма внешнего поля вывода имеет вид:

( - отсутствие символа, либо знак минус в этой позиции;

- старшие десятичных цифр округленного выводимого значения данного;

- десятичная экспонента).

имеет вид:

или

(каждое - цифра).

Вместо знака плюс в первом из этих видов может стоять пробел.

7.2.3.6.2.3. Описатель числового поля - отсутствует; определение - по ГОСТ 23056-78.

7.2.3.6.2.1-7.2.3.6.2.3. (Измененная редакция, Изм. N 1).

7.2.3.6.3. Преобразование данных типа двойной точности - отсутствует; определение - по ГОСТ 23056-78.

7.2.3.6.4. Преобразование данных типа комплексный - отсутствует; определение - по ГОСТ 23056-78.

7.2.3.7. Преобразование данных типа логический - отсутствует; определение - по ГОСТ 23056-78.

7.2.3.8. Описатель текстового поля. Текстовая информация может передаваться посредством описателя поля .

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

7.2.3.9. Описатель поля пробелов. Описатель поля пробелов есть . При вводе пропускается символов из внешней вводимой записи, а при выводе во внешнюю выводимую запись вставляется пробелов.

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

7.2.3.10. Спецификация формата в массивах - отсутствует; определение - по ГОСТ 23056-78.

8. ПРОЦЕДУРЫ И МОДУЛИ

Имеются четыре категории процедур: внутренние функции, встроенные функции, внешние функции и внешние подпрограммы. Первые три категории процедур относятся к функциям (или процедурам-функциям), а последняя категория - к подпрограммам (или процедурам-подпрограммам). Имеется одна категория модулей: модули-процедуры - к ней относятся модули-функции и модули-подпрограммы. Правила типа для процедур-функций указаны в п.5.3.

8.1. Внутренние функции. Внутренняя функция определяется в том же самом программном модуле, в котором имеются ссылки на эту функцию. Такая функция определяется при помощи объявления внутренней функции.

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

8.1.1. Структура объявлений внутренних функций. Внутренняя функция определяется при помощи объявления внутренней функции, которое имеет вид:

( - символическое имя определяемой функции;

- выражение;

каждое - символическое имя, называемое формальным параметром).

Соответствие между и должно удовлетворять правилам присваивания из п.7.1.1.1.

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

Выражение , кроме формальных параметров, может содержать только:

константы;

указатели переменных;

указатели встроенных функций;

указатели внутренних функций, определенных ранее в данном программном модуле;

указатели внешних функций.

8.1.2. Ссылки на внутренние функции. Для ссылки на внутреннюю функцию используется ее указатель (п.5.2) в качестве первичного выражения в арифметическом выражении. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами. Фактическим параметром в указателе внутренней функции может быть любое выражение того же типа, что и соответствующий формальный параметр.

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

8.2. Встроенные функции и ссылки на них. Символические имена встроенных функций заранее известны процессору и, если они удовлетворяют условиям, изложенным в п.10.1.7, им приписывается специальный смысл и тип в соответствии с табл.3.

Таблица 3

Встроенная функция

Определение

Число параметров

Символическое имя

Тип

параметров

функции

Абсолютное значение

1

Вещ.

Вещ.

Цел.

Цел.

Преобразование в плавающую форму

Преобразование от целого к вещественному

1

Цел.

Вещ.

Преобразование в фиксированную форму

Преобразование от вещественного к целому

1

Вещ.

Цел.

Передача знака

умножается на

2

Вещ.

Вещ.

Цел.

Цел.

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

Вычисление значения указателя встроенной функции заключается в выполнении действий, определенных в табл.3, над значениями фактических параметров. Результирующее значение принимается в качестве значения указателя функции и тем самым становится доступным в выражении, содержащем этот указатель.

8.3. Внешние функции. Внешняя функция определяется вне того программного модуля, который ссылается на нее. Для определения внешней функции средствами Базисного ФОРТРАНа служит отдельный программный модуль, называемый модулем-функцией; первым предложением этого модуля является заголовок функции.

8.3.1. Структура модулей-функций. Заголовок функции имеет вид:

- символическое имя определяемой функции;

каждое - символическое имя, называемое формальным параметром).

Каждый формальный параметр должен быть либо именем переменной, либо именем массива. Все формальные параметры в одном заголовке функции должны быть различными.

Модули-функции строятся в соответствии с п.9.1.6 со следующими ограничениями. Символическое имя определяемой функции должно также встречаться в этом модуле в качестве имени переменной. При каждом выполнении модуля эта переменная должна быть определена, причем впоследствии на эту переменную можно ссылаться или переопределять ее (см. разд.10). Значение этой переменной к моменту выполнения в данном модуле любого оператора возврата называется значением определяемой функции. Символическое имя определяемой функции не должно встречаться ни в одном объявлении этого программного модуля, за исключением вхождения в заголовок функции в качестве ее имени. Формальные параметры не могут встречаться в объявлениях эквивалентности или общих блоков в этом модуле-функции. Модуль-функция при своем выполнении не может определять или переопределять один или несколько своих фактических параметров или элементов общего блока. Модуль-функция может содержать любые предложения, за исключением заголовка подпрограммы, другого заголовка функции, а также любого предложения, которое явно или неявно ссылается на определяемую функцию. Модуль-функция должен содержать по крайней мере один оператор возврата.

8.3.2. Ссылки на внешние функции. Для ссылки на внешнюю функцию используется ее указатель (п.5.2) в качестве первичного выражения в арифметическом выражении. Фактические параметры, образующие список фактических параметров в указателе функции, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами модуля-функции. Фактическим параметром в указателе внешней функции может быть:

имя переменной;

имя элемента массива;

имя массива;

любое другое выражение.

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

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

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

8.3.3. Основные внешние функции. Процессоры Базисного ФОРТРАНа должны быть снабжены внешними функциями, перечисленными в табл.4. Ссылки на эти функции производятся так же, как было описано в п.8.3.2. Фактические параметры, для которых значение этих функций математически не определено или имеет тип, отличный от приведенного в таблице, являются недопустимыми.

Таблица 4

Основная внешняя функция

Определение

Число параметров

Символическое имя

Тип

параметров

функции

Экспоненциальная функция

1

Вещ.

Вещ.

Натуральный логарифм

1

Вещ.

Вещ.

Тригонометрический синус

1

Вещ.

Вещ.

Тригонометрический косинус

1

Вещ.

Вещ.

Гиперболический тангенс

1

Вещ.

Вещ.

Квадратный корень

1

Вещ.

Вещ.

Арктангенс

1

Вещ.

Вещ.

8.4. Подпрограммы. Внешняя подпрограмма определяется вне того программного модуля, который ссылается на нее. Для определения внешней подпрограммы средствами Базисного ФОРТРАНа служит отдельный программный модуль, называемый модулем-подпрограммой; первым предложением этого модуля является заголовок подпрограммы.

8.4.1. Структура модулей-подпрограмм. Заголовок подпрограммы имеет вид:

или

( - символическое имя определяемой подпрограммы;

каждое - символическое имя, называемое формальным параметром).

Каждый формальный параметр должен быть именем переменной либо именем массива. Все формальные параметры в одном заголовке подпрограммы должны быть различными.

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

8.4.2. Ссылки на внешние подпрограммы. Для ссылки на внешнюю подпрограмму используется оператор вызова подпрограммы (п.7.1.2.4). Фактические параметры, образующие список фактических параметров этого оператора, должны согласовываться по порядку, числу и типу с соответствующими формальными параметрами модуля-подпрограммы.

Фактическим параметром при ссылке на внешнюю подпрограмму может быть:

а) имя переменной;

б) имя элемента массива;

в) имя массива;

г) любое другое выражение.

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

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

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

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

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

8.5. Модуль-блок данных - отсутствует; определение - по ГОСТ 23056-78.

9. ПРОГРАММА

9.1. Строение программных модулей. Программный модуль состоит из заголовка модуля и тела модуля.

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

9.1.1. Раздел операторов. Раздел операторов должен содержать хотя бы один оператор и может (но не обязан) содержать объявления форматов. Раздел операторов не должен содержать объявлений спецификаций.

9.1.2. Тело модуля. Тело модуля состоит из (возможно, пустой) совокупности объявлений спецификаций, за которой могут (но не обязаны) следовать совокупность объявлений внутренних функций, за которой следует раздел операторов с заключительной строкой после него. Объявления спецификаций должны располагаться в следующем порядке: объявления массивов, объявления общих объектов, объявления эквивалентности.

9.1.3. Программный модуль. Программный модуль является либо головным модулем (п.9.1.4), либо модулем-процедурой (п.9.1.6).

9.1.4. Головной модуль. Головной модуль состоит только из тела модуля.

9.1.5. Модуль-блок данных - отсутствует; определение - по ГОСТ 23056-78.

9.1.6. Модуль-процедура. Модуль-процедура состоит из заголовка функции или заголовка подпрограммы, за которым следует тело модуля.

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

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

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

10. ВНУТРИ- И МЕЖМОДУЛЬНЫЕ СООТНОШЕНИЯ

10.1. Символические имена. Символическое имя было определено (п.3.5) как последовательность, содержащая от одной до пяти буквенно-цифровых символов, первый из которых должен быть буквой. Последовательности символов, образующие описатели полей в объявлениях формата или начальные ключевые слова конкретных типов предложений, например, , , , не являются символическими именами в этих позициях и не образуют начала символических имен. В любом программном модуле символическое имя (возможно, дополненное индексом) должно обозначать элемент одного (и, как правило, только одного) из следующих классов:

I - массив и элементы этого массива;

II - переменная;

III - внутренняя функция;

IV - встроенная функция;

V - внешняя функция;

VI - подпрограмма.

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

10.1.1. Соотношения между классами. Если в программном модуле символическое имя из класса V встречается непосредственно после слова в заголовке функции, то оно обязано принадлежать также классу II того же программного модуля.

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

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

10.1.2. Эффект употребления символических имен в объявлениях спецификаций. Символическое имя принадлежит классу I тогда и только тогда, когда оно употребляется в описании массива в качестве имени описания. Для каждого символического имени в одном модуле допускается только одно такое употребление.

Символическое имя, употребляемое в объявлении общих объектов, принадлежит либо классу I, либо классу II, но не классу V (п.8.3.1). Для каждого символического имени в одном модуле допускается только одно такое употребление.

Символическое имя, употребленное в объявлении эквивалентности, принадлежит либо классу I, либо классу II, но не классу V (п.8.3.1).

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

в список оператора ввода/вывода;

в список формальных параметров;

в список фактических параметров при ссылке на внешнюю процедуру;

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

Формальный параметр внешней процедуры может быть именем массива только в том случае, когда соответствующий фактический параметр при ссылке на эту внешнюю процедуру является именем массива. Если фактический параметр является именем массива, то длина массива - формального параметра должна быть не больше длины массива - фактического параметра.

10.1.4. Внешние процедуры. При выполнении любой выполнимой программы не допускаются два таких обращения к одному и тому же модулю-процедуре, между которыми не был бы выполнен оператор возврата из этого модуля.

10.1.5. Подпрограмма. Символическое имя принадлежит классу VI, если оно встречается непосредственно после слова в заголовке подпрограммы или непосредственно после слова в операторе вызова подпрограммы.

10.1.6. Внутренняя функция. Символическое имя принадлежит классу III в некотором программном модуле, если оно:

не принадлежит ни классу I, ни классу IV;

за каждым его вхождением непосредственно следует левая скобка;

в рассматриваемом модуле имеется объявление внутренней функции (п.8.1.1) с этим именем.

10.1.7. Встроенная функция. Символическое имя принадлежит классу IV в некотором программном модуле, если оно:

встречается в колонке имен табл.3;

за каждым его вхождением непосредственно следует левая скобка.

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

10.1.8. Внешняя функция. Символическое имя принадлежит классу V, если оно:

встречается непосредственно после слова в заголовке функции;

не принадлежит ни одному из классов I, III, IV или VI и имеется хотя бы одно его вхождение, непосредственно за которым следует левая скобка. Левая скобка должна непосредственно следовать за каждым его вхождением.

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

10.1.9. Переменная. В программном модуле символическое имя принадлежит классу II, если оно:

не принадлежит классу VI;

за ним никогда непосредственно не следует левая скобка, если только это имя не следует непосредственно за словом в заголовке функции.

10.1.10. Имя блока - отсутствует; определение - по ГОСТ 23056-78.

10.2. Понятие определения. Для числовых величин существует два уровня определения - первый и второй. Понятие определения на первом уровне применимо к любым элементам массивов и переменным; понятие определения на втором уровне - только к переменным типа целый. Для объяснения смысла этих понятий необходимо рассмотреть выполнимую программу в процессе ее выполнения.

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

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

10.2.1. Определение процедур. Если выполнимая программа содержит информацию, описывающую внешнюю процедуру, то такая внешняя процедура с соответствующим символическим именем определена для использования в этой выполнимой программе. Ссылка на внешнюю функцию или ссылка на подпрограмму (выбирается подходящий случай) с этим символическим именем может встречаться в выполнимой программе, если число параметров в определении и ссылке совпадает. Остальные ограничения содержатся в пп.8.3.1, 8.3.2, 8.4.1, 8.4.2 и 10.1.3.

Основные внешние функции, перечисленные в п.8.3.3, определены всегда и на них можно ссылаться при условии выполнения ограничений, указанных выше.

Для указанного использования определено символическое имя из класса III или IV.

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

связи через общий блок;

связи через эквивалентность;

подстановки параметров.

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

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

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

В дальнейшем переменные и элементы массивов, связанные на основании пп.7.2.1.3.1 и 7.2.1.4, будут считаться эквивалентными только при условии совпадения типов.

Если объект данного типа становится определенным, то в этот же момент все связанные с ним объекты иного типа становятся неопределенными, а все связанные с ним объекты того же самого типа становятся, если не оговорено противное, определенными.

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

10.2.3. События, обеспечивающие определение. Любой объект является неопределенным к началу первого выполнения первого оператора головного модуля. Переопределение определенного объекта допускается всегда, за исключением некоторых случаев для переменных типа целый (пп.7.1.2.8 и 7.1.3.2.1), а также объектов программных модулей (пп.5.4, 8.3.2 и 8.4.2).

10.2.3.1. Переменные и элементы массивов становятся определенными (или переопределенными) в следующих случаях:

завершение выполнения арифметического оператора присваивания вызывает определение объекта, расположенного слева от знака равенства;

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

завершение выполнения оператора цикла способом, приведенным в п.7.1.2.8.2е, вызывает определение управляющей переменной этого цикла;

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

10.2.3.2. Переменные и элементы массивов становятся неопределенными в следующих случаях:

в момент завершения оператора цикла способом, приведенным в п.7.1.2.8.2г, управляющая переменная этого цикла становится неопределенной;

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

когда объект, связанный с данным объектом и имеющий иной тип, становится определенным;

когда объект, связанный с данным объектом и имеющий такой же тип, становится неопределенным.

10.2.4. Объекты непомеченного общего блока - отсутствует; определение - по ГОСТ 23056-78.

10.2.5. Объекты помеченного общего блока - отсутствует; определение - по ГОСТ 23056-78.

10.2.6. Объекты не из общего блока. Любой объект не из общего блока начально неопределен.

Такие объекты, ставшие однажды определенными по любому из приведенных выше правил, остаются определенными до тех пор, пока не станут неопределенными в соответствии с этими же правилами.

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

Необходимо подчеркнуть, что связь между формальными и фактическими параметрами прекращается в момент начала выполнения оператора возврата.

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

10.2.7.1. Конечными операторами основы являются:

оператор цикла;

оператор вызова подпрограммы;

оператор перехода любого типа;

условный арифметический оператор;

оператор останова;

оператор возврата;

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

арифметический оператор присваивания, в котором слева от знака равенства стоит переменная типа целый;

оператор ввода, в списке которого содержится переменная типа целый.

10.2.7.2. Начальными операторами основы являются:

первый оператор в программном модуле;

первый из операторов (если он существует), непосредственно следующий за конечным оператором некоторой другой основы.

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

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

10.2.8. Второй уровень определения. В момент использования в индексах и вычисляемых операторах перехода переменные типа целый должны быть определены на втором уровне.

10.2.8.1. Если при выполнении некоторой основы выполнимой программы происходит переопределение переменной типа целый, то эта переменная и все связанные с ней переменные становятся неопределенными на втором уровне во всей этой основе.

В момент выполнения начального оператора основы переменная типа целый является определенной на втором уровне, если выполняются следующие условия:

в этой основе указанная переменная употребляется в индексе или вычисляемом операторе перехода;

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

10.2.8.2. Такое определение сохраняется до тех пор, пока не произойдет одно из следующих событий:

завершение выполнения конечного оператора этой основы;

указанная переменная становится неопределенной или переопределяется на первом уровне.

В этот момент указанная переменная становится неопределенной на втором уровне.

10.2.8.3. Вхождение переменной типа целый в список оператора ввода, в котором эта переменная употребляется также и в индексе, означает, что эта переменная станет определенной на втором уровне. Такое определение сохраняется до тех пор, пока не произойдет одно из следующих событий:

завершение выполнения конечного оператора основы, содержащей этот оператор ввода;

указанная переменная становится неопределенной или переопределяется на первом уровне.

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

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

10.3. Требования определенности используемых объектов. Любая переменная, употребляемая в индексе или вычисляемом операторе перехода, должна быть определена на втором уровне в момент ее использования.

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

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

Любая переменная, употребляемая для идентификации устройства ввода/вывода, должна быть определена в момент ее использования.

В момент выполнения оператора возврата в модуле-функции значение (п.8.3.1) этой функции должно быть определено.

В момент выполнения оператора вывода каждый объект, значение которого передается вовне, должен быть определен. Для вывода форматных записей требуется правильная связь кода преобразования с типом объекта. Следующие связи являются правильными: - с типом целый; и - с типом вещественный.

АЛФАВИТНЫЙ УКАЗАТЕЛЬ ТЕРМИНОВ

Алфавит Базисного ФОРТРАНа 3.1

Арифметический оператор присваивания 7.1.1.1

Арифметическое выражение 6.1

Безусловный оператор перехода 7.1.2.1.1

Буквенно-цифровые символы 3.1.3

Буквы 3.1.2

Вещественное число без знака 5.1.1.2

Взаимодействие форматного управления со списком ввода/вывода 7.2.3.4

Внешняя процедура 2.3, 10.1.4

Внешняя функция 8.3, 10.1.8

Внутренняя функция 8.1, 10.1.6

Вспомогательный оператор ввода/вывода 7.1.3.3

Встроенная функция 8.2, 10.1.7

Выполнимая программа 9.1.7

Выражение 6

Вычисляемый оператор перехода 7.1.2.1.3

Головной модуль 9.1.4

Дробная черта 3.1.4

Заключительная строка 3.2.2

Запятая 3.1.4

Звездочка 3.1.4

Идентификация данных 5

Идентификация процедур 5

Имя данного 5.1

Имя процедуры 5.1

Индекс 5.1.3.2

Индексное выражение 5.1.3.3

Класс 10.1

Комментарий 3.2.1

Комплексное число 5.1.1.4

Константа 5.1.1

Круглая скобка левая 3.1.4

Круглая скобка правая 3.1.4

Логическая константа 5.1.1.5

Логический оператор присваивания 7.1.1.2

Логическое выражение 6.3

Массив 5.1.3, 10.1.3

Масштабный множитель 7.2.3.5

Метка предложения 3.4

Минус 3.1.4

Модуль-блок данных 8.5, 9.1.5

Модуль-подпрограмма 8.4.1

Модуль-процедура 9.1.6

Модуль-функция 8.3.1

Начальная строка 3.2.3

Общий блок 7.2.1.3.1

Общий объект 7.2.1.3.1

Объявление 7.2

Объявление внешних имен 7.2.1.5

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

Объявление начальных данных 7.2.2

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

Объявление спецификаций 7.2.1

Объявление типа 7.2.1.6

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

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

Оператор 7.1

Оператор бесформатного ввода 7.1.3.2.4

Оператор бесформатного вывода 7.1.3.2.5

Оператор ввода/вывода 7.1.3

Оператор возврата 7.1.2.5

Оператор вызова подпрограммы 7.1.2.4

Оператор останова 7.1.2.7.1

Оператор паузы 7.1.2.7.2

Оператор перемотки 7.1.3.3.1

Оператор перехода 7.1.2.1

Оператор перехода по предписанию 7.1.2.1.2

Оператор предписания 7.1.1.3

Оператор присваивания 7.1.1

Оператор продолжения 7.1.2.6

Оператор разметки 7.1.3.3.3

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

Оператор управления 7.1.2

Оператор форматного ввода 7.1.3.2.2

Оператор форматного вывода 7.1.3.2.3

Оператор цикла 7.1.2.8

Операторы останова и паузы 7.1.2.7.1, 7.1.2.7.2

Описание массива 7.2.1.1

Описатель поля 7.2.3.1

Описатель поля пробелов 7.2.3.9

Описатель текстового поля 7.2.3.8

Определение 10.2

Основа 10.2.7

Основная внешняя функция 8.3.3

Основной оператор ввода/вывода 7.1.3.2

Отношение 6.2

Переменная 5.1.2, 10.1.9

Печать форматной записи 7.1.3.4

Плюс 3.1.4

Подпрограмма 8.4, 10.1.5

Последний оператор 10.2.7.3

Правила типов 5.3

Предложение 3.3, 7

Преобразование данных типа логический 7.2.3.7

Преобразования чисел 7.2.3.6

Пробел 3.1.4

Программный модуль 9.1

Процедура 5.1.4

Процессор 1.2

Равно 3.1.4

Разделитель поля 7.2.3.2

Раздел операторов 9.1.1

Регулируемый размер 7.2.1.1.2

Символ пробела 3.1.4

Символическое имя 3.5, 10.1

Символы 3.1

Соответствие общих блоков 7.2.1.3.1

Специальные символы 3.1.4

Спецификация повторения 7.2.3.3

Спецификация формата в массивах 7.2.3.10

Список ввода/вывода 7.1.3.2.1

Ссылка 5

Ссылка на функцию 5.2

Строка 3.2

Строка - продолжение 3.2.4

Текстовая константа 5.1.1.6

Тело модуля 9.1.2

Тип вещественный 4.2.2

Тип данных 4

Тип двойной точности 4.2.3

Тип комплексный 4.2.4

Тип логический 4.2.5

Тип текстовой 4.2.6

Тип целый 4.2.1

Точка 3.1.4

Условный арифметический оператор 7.1.2.2

Условный логический оператор 7.1.2.3

Устройства ввода/вывода 7.1.3.1

Формальный параметр 5.4

Функция 8

Функция линеаризации 7.2.1.1.1

Целое число без знака 5.1.1.1

Цифра 3.1.1

Число 5.1.1

Число без знака 5.1.1

Число двойной точности без знака 5.1.1.3

Число со знаком 5.1.1

Элемент массива 5.1.3.1, 10.1.3

Электронный текст документа

и сверен по:

Языки программирования. Фортран

и Базисный Фортран:

ГОСТ 23056-78, ГОСТ 23057-78. -

М.: Издательство стандартов, 1992

Превью ГОСТ 23057-78 Язык программирования Базисный Фортран