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

IF (е) к,, к2, к3

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

каждое к; — метка оператора).

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

  1. Условный логический оператор. Условный логический оператор имеет вид

IF(e) S

(е — логическое выражение;

S — любой оператор, кроме оператора цикла и условного логи­ческого оператора).

При выполнении этого оператора сначала вычисляется логи­ческое выражение е. Если е принимает значение «истина», то выполняется оператор S. Если е принимает значение «ложь», то оператор S выполняется так, как если бы он был оператором продолжения (п. 7.1.2.6) (т. е. в этом случае оператор S факти­чески не выполняется).

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

CALL s(a], а2,..., ап) или

CALL s

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

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

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

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

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

RETURN

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

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

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

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

CONTINUE

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

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

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

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

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

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

STOP п или

STOP

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

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

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

PAUSE п или

PAUSE

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

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

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

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

DO п 1 = 01], т2, т3 или

DO п І = ГП|, т2

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

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

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

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

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

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

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

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

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

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

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

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

В оставшейся части данного пункта (п. 7.1.2.8) под операто­ром перехода или условным арифметическим оператором пони­мается также и условный логический оператор, содержащий соот­ветственно оператор перехода или условный арифметический оператор;

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

  1. Считается, что оператор цикла имеет расширенное тело, если выполнены следующие условия:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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