Условный арифметический оператор. Условный арифметический оператор имеет вид
IF (е) к,, к2, к3
(е — арифметическое выражение типа целый, вещественный или двойной точности;
каждое к; — метка оператора).
Условный арифметический оператор служит для разветвления вычислительного процесса по трем возможным путям. При выполнении этого оператора сначала вычисляется выражение е, после чего в качестве следующего выполняется оператор, помеченный меткой к1; к2 или к3 при значении е меньшем нуля, равном нулю или большем нуля соответственно.
Условный логический оператор. Условный логический оператор имеет вид
IF(e) S
(е — логическое выражение;
S — любой оператор, кроме оператора цикла и условного логического оператора).
При выполнении этого оператора сначала вычисляется логическое выражение е. Если е принимает значение «истина», то выполняется оператор S. Если е принимает значение «ложь», то оператор S выполняется так, как если бы он был оператором продолжения (п. 7.1.2.6) (т. е. в этом случае оператор S фактически не выполняется).
Оператор вызова подпрограммы. Оператор вызова подпрограммы имеет вид
CALL s(a], а2,..., ап) или
CALL s
(s — имя подпрограммы;
каждое Э; — фактический параметр (п. 8.4.2)).
В начале выполнения оператора вызова подпрограммы происходит обращение к указанному модулю-подпрограмме. Возврат управления из этого модуля завершает выполнение оператора вызова подпрограммы.
(Измененная редакция, Изм. № 1).
Оператор возврата. Оператор возврата имеет вид
RETURN
Оператор возврата используется только в модуле-процедуре и предназначен для того, чтобы отмечать его логический конец.
Если этот оператор используется в модуле-подпрограмме, то результат его выполнения состоит в возврате управления в тот модуль, из которого было произведено обращение к рассматриваемому модулю-подпрограмме.
Если этот оператор используется в модуле-функции, то результат его выполнения состоит в возврате управления в тот программный модуль, из которого было произведено обращение к рассматриваемому модулю-функции, и в этот момент становится доступным значение функции (п. 8.3.1), определенное этим модулем.
Оператор продолжения. Оператор продолжения имеет вид
CONTINUE
В результате выполнения этого оператора просто продолжается нормальный порядок выполнения операторов, т. е. этот оператор не вызывает никаких иных действий.
Операторы останова и паузы. Существует два вида операторов:
оператор останова;
оператор паузы.
(Измененная редакция, Изм. № 1).
Оператор останова. Оператор останова имеет вид
STOP п или
STOP
(п — последовательность от одной до пяти восьмеричных цифр).
В результате выполнения этого оператора завершается выполнение программы.
Оператор паузы. Оператор паузы имеет вид
PAUSE п или
PAUSE
(п — последовательность от одной до пяти восьмеричных цифр).
Выполнение этого оператора состоит из двух этапов. В результате выполнения первого из них происходит приостановка выполнения программы. На время этой приостановки становится доступной последовательность восьмеричных цифр п. Для возобновления выполнения программы необходимы действия, внешние по отношению к ней. Если выполнение возобновляется без каких- либо изменений состояния процессора, то выполняется второй этап оператора паузы, в результате чего продолжается нормальный порядок выполнения операторов (п. 9.2).
Оператор цикла
Оператор цикла имеет вид
DO п 1 = 01], т2, т3 или
DO п І = ГП|, т2
(п — метка оператора;
і — имя переменной типа целый;
каждое nij—целое без знака либо имя переменной типа целый).
Оператор, помеченный меткой п и называемый закрывающим оператором тела цикла, должен находиться в том же программном модуле, что и рассматриваемый оператор цикла, и физически должен помещаться после него. Закрывающий оператор не может быть оператором перехода, возврата, останова, паузы, цикла, условным арифметическим оператором, а также условным логическим оператором, содержащим какой-либо из указанных здесь операторов. Переменная і называется управляющей переменной; ГП] называется начальным параметром, т2 — конечным параметром и т3— параметром приращения. При использовании оператора цикла второго вида, в котором ш3 явно не указывается, считается, что параметр приращения есть единица. Во время выполнения оператора цикла значения Ш], т2 и т3 должны быть больше нуля.
Под телом оператора цикла понимается последовательность операторов, начиная с первого по порядку оператора, следующего за рассматриваемым оператором цикла, и кончая его закрывающим оператором. В частности, если тело одного оператора цикла содержит другой оператор цикла, то тело этого другого оператора цикла должно быть подмножеством тела первого.
Правильным гнездом называется множество операторов цикла и их тел — таких, что первый встречающийся закрывающий оператор какого-либо из этих операторов цикла физически следует за последним встречающимся оператором цикла из этого множества (этот оператор цикла называется самым внутренним), а первый встречающийся оператор цикла из этого множества не входит в тело никакого другого оператора цикла. В теле самого внутреннего оператора цикла не может встречаться оператор цикла.
, 7.1.2.8.2. Оператор цикла служит для задания цикла в программе. Действия, порождаемые выполнением оператора цикла, описываются следующими шестью шагами:
управляющей переменной присваивается значение, представленное начальным параметро.м; это значение не должно превышать значения, представленного конечным параметром;
выполняется тело оператора цикла;
если управление достигает закрывающего оператора, то после его выполнения управляющая переменная того оператора цикла, который начал выполняться позже всех и тело которого заканчивается этим закрывающим оператором, увеличивается на значение, представленное соответствующим параметром приращения;
если значение управляющей переменной, полученное в результате выполнения шага, указанного в подпункте н, не превышает значения, представленного соответствующим конечным параметром, то повторяются описанные выше действия, начиная с указанных в подпункте б, с учетом того, что под телом цикла, о котором идет речь, понимается тело того оператора цикла, управляющая переменная которого позже всех получила приращение. Если же значение управляющей переменной оказалось больше значения, представленного соответствующим конечным параметром, то оператор цикла считается завершенным и значение его управляющей переменной становится неопределенным;
если имеются другие операторы цикла, тела которых заканчиваются упомянутым закрывающим оператором, то значение управляющей переменной того из этих операторов цикла, выполнение которого началось позже всех, увеличивается на значение, представленное соответствующим параметром приращения, и повторяются действия, указанные в подпункте г, до тех пор, пока не будут завершены все операторы цикла, тела которых заканчиваются упомянутым закрывающим оператором. После этого выполняется оператор, следующий за этим закрывающим оператором.
В оставшейся части данного пункта (п. 7.1.2.8) под оператором перехода или условным арифметическим оператором понимается также и условный логический оператор, содержащий соответственно оператор перехода или условный арифметический оператор;
после выхода из тела оператора цикла в результате выполнения оператора перехода или условного арифметического оператора, т. е. способом, отличным от завершения оператора цикла, значение управляющей переменной этого оператора цикла опре- делено и равно последнему ее значению, достигнутому по правилам предыдущих шагов.
Считается, что оператор цикла имеет расширенное тело, если выполнены следующие условия:
в правильном гнезде внутри тела самого внутреннего оператора цикла имеется оператор перехода или условный арифметический оператор, который может передать управление вовне этого гнезда;
вне гнезда имеется оператор перехода или условный арифметический оператор, который с учетом всех возможных последовательностей выполнения операторов в данном программном модуле может быть выполнен после оператора, указанного в подпункте а, и его выполнение может привести к возврату управления в тело самого внутреннего оператора цикла того же правильного гнезда.
Если оба эти условия выполнены, то расширенное тело определяется как тело оператора цикла вместе с его расширением, т. е. множеством всех операторов, которые могут быть выполнены между всеми парами операторов, передающих управление, первый из которых удовлетворяет условию, указанному в подпункте а, а второй — условию, указанному в подпункте б. Первый оператор пары не включается в расширение тела, а второй — включается. Оператор перехода или условный арифметический оператор не могут приводить к передаче управления вовнутрь тела оператора цикла, за исключением того случая, когда эти операторы выполняются как часть расширенного тела данного оператора цикла. Кроме того, расширение тела оператора цикла не может содержать оператор цикла (того же самого программного модуля), который в свою очередь имеет расширенное тело. Если в теле оператора цикла встречается обращение к процедуре, то действия, определяемые этой процедурой, считаются временно, т. е. на время выполнения этой процедуры, включенными в тело оператора цикла.
Управляющая переменная, начальный и конечный параметры, а также параметр приращения оператора цикла не могут переопределяться при выполнении тела или расширенного тела этого оператора цикла.
Если оператор является закрывающим более чем для одного оператора цикла, то метка этого закрывающего оператора не может использоваться ни в каком операторе перехода или в условном арифметическом операторе, за исключением случая, когда такой оператор встречается в теле самого внутреннего оператора цикла с этим закрывающим оператором.
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).
Свойства устройств ввода/вывода. Считается, что с конкретным устройством ввода/вывода связан только один последовательный файл. Такое устройство обладает следующими свойствами:
если устройство содержит записи, то они считаются упорядоченными;
существует единственная позиция устройства, называемая начальной. Если устройство не содержит записей, то оно находится в начальной позиции. Если устройство находится в начальной позиции и содержит записи, то первая запись устройства считается очередной записью;
если устройство находится в позиции, не являющейся начальной, то существует единственная предыдущая запись, связанная с этой позицией. Наименьшая из всех записей в смысле порядка, подразумеваемого в подпункте а, следующая за этой предыдущей записью, считается очередной записью;
по завершении выполнения оператора вывода или оператора разметки не существует записи, следующей за записью, образованной этим оператором;
при любой передаче очередной записи позиция устройства изменяется так, что эта очередная запись становится предыдущей записью.
Если какое-либо устройство не обладает каким-то из перечисленных выше свойств, то некоторые из определенных ниже one- раторов не могут содержать ссылку на это устройство; действие таких операторов для этого устройства не определено.
Основные операторы ввода/вывода. Основные операторы ввода/вывода служат для передачи записей. Каждый такой оператор может содержать список имен переменных, массивов и элементов массивов. При вводе именованным элементам присваиваются значения, а при выводе их значения передаются вовне.
Записи могут быть форматными и бесформатными. Форматная запись состоит из последовательности символов, допускающих представление в процессоре. Передача такой записи требует ссылки на спецификацию формата, которая определяет необходимые преобразования и размещение записи (п. 7.2.3). Число записей, передаваемых при выполнении операторов форматного чтения или записи, зависит от списка ввода/вывода и указанной спецификации формата (п. 7.2.3.4). Бесформатная запись состоит из последовательности значений в виде, определяемом процессором. Когда выполняется оператор форматного или бесформатного ввода, требуемые записи на указанном устройстве должны быть соответственно форматными или бесформатными.