Оператор IF (ЕСЛИ)
Назначение
Оператор IF (ЕСЛИ) приводит к вычислению условия (см. п. 6.3 настоящей части).
Последующие действия рабочей программы зависят от истинности условия.
Общий формат
IF vpnnnup 1 then / {оператор-1}... 1
IF условие-1 THEN I NEXT SENTENCE }
ELSE оператор-2 . . . [END-IF] ELSE NEXT SENTENCE END-IF
РГ ПМ 1 f {оператор-1}. ..
—условие-1 і СЛЕдуЮщЕЕ ПРЕДЛОЖЕНИЕ
ИНАЧЕ {оператор-2}... [КОНЕЦ-ЕСЛИ] ИНАЧЕ СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ КОНЕЦ-ЕСЛИ
С
условные I
и н т а к с и ч е с к и е правилаОператор-1 и оператор-2 представляют собой
операторы или повелительные операторы, | за которыми, Без-можно, следуют условные операторы . Дальнейшее описание правил управления выполнением оператора-1 и оператора-2 дается в другом месте (см. ч. 4, п. 6.4.3).
Фраза ELSE NEXT SENTENCE (ИНАЧЕ СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ) может быть опущена, если она непосредственно предшествует точке, ограничивающей предложение.
Если задана фраза END-IF (К.ОНЕЦ-ЕСЛИ), фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ) не должна задаваться.
Общие правила
Область действия оператора IF (ЕСЛИ) может ограничиваться одним из следующих способов:
фразой END-IF (КОНЕЦ-ЕСЛИ) на том же уровне вложенности;
разделителем точкой;
если оператор вложенный, то фразой ELSE (ИНАЧЕ) оператора IF (ЕСЛИ) на более высоком уровне вложенности (см. ч. 4, п. 6.4.3).
При выполнении оператора IF (ЕСЛИ) имеют место следующие передачи управления:
если условие истинно и задан оператор-1, управление передается первому оператору оператора-1 и выполнение продолжается в соответствии с правилами для каждого оператора из операто- ра-1. Если выполняется оператор ветвления процедур или условный оператор J , который осуществляет явную передачу управления, управление передается явно в соответствии с правилами для этого оператора. После завершения выполнения оператора-1 фраза ELSE (ИНАЧЕ), даже если она указана, игнорируется и управление передается на конец оператора IF (ЕСЛИ);
если условие истинно и вместо оператора-1 задана фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ), фраза ELSE (ИНАЧЕ), если она задана, игнорируется и управление передается на следующее выполнимое предложение;
если условие ложно и задан оператор-2, оператор-1 или заменяющая его фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ) игнорируется, управление передается на первый оператор оператора-2 и выполнение продолжается в соответствии с правилами для каждого оператора из оператора-2. Если выполняется оператор ветвления процедур или условный оператор, который осуществляет явную передачу управления, управление передается явно в соответствии с правилами для этого оператора. После завершения выполнения оператора-2 управление передается на конец оператора IF (ЕСЛИ);
если условие ложно, а фраза ELSE (ИНАЧЕ) не указана, оператор-1 игнорируется и управление передается на конец оператора IF (ЕСЛИ);
если условие ложно и задана фраза ELSE NEXT SENTENCE (ИНАЧЕ СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ), оператор-1 игнорируется, а управление передается на следующее выполнимое предложение.
Оператор-1 и (или) оператор-2 могут содержать оператор IF (ЕСЛИ). Оператор IF (ЕСЛИ) в этом случае называется вложенным. Более детальные правила вложенности даются в соответствующем параграфе (см. ч. 4, п. 6.4.3). Вложенные операторы могут рассматриваться как парные комбинации IF (ЕСЛИ), ELSE (ИНАЧЕ) и END-IF (КОНЕЦ-ЕСЛИ), задаваемые слева направо. Таким образом, любое встретившееся ELSE (ИНАЧЕ) или END- IF (КОНЕЦ-ЕСЛИ) рассматривается как связанное с непосредственно предшествующим IF (ЕСЛИ), которому еще нет парной фразы ELSE (ИНАЧЕ) или END-IF (КОНЕЦ-ЕСЛИ).
6 17. Оператор INITIALIZE (ИНИЦИИРОВАТЬ)
Назначение
Оператор INITIALIZE (ИНИЦИИРОВАТЬ) обеспечивает возможность присваивать выбранным типам полей данных заранее определенные значения, например, числовым данным нули, буквенно-цифровым данным — пробелы.
Общий формат
INITIALIZE {идентификатор-1} . . .
{ ALPHABETIC
I ALPHANUMERIC
REPLACING I { NUMERIC
I I ALPHANUMERIC-EDITED [
■ NUMERIC-EDITED J
DATA BY ! ВДентификаторД 1 }
— I литерал-1 I J
ИНИЦИИРОВАТЬ {идентификатор-1} . . .
{БУКВЕННОЕ'
I
ЗАМЕНЯЯ
БЦ I{ЧИСЛОВОЕ }ДАННОЕ НА
IБЦР ’ I
' ЧР I
идентификатор-2 литерал-1
С и н т а к с и ч е с к и е правила
Литер ал-1 и данное, на которое ссылается идентификатор-2, задают посылающую область; данное, на которое ссылается идентификатор-1, представляет принимающую область.
Каждая категория, заданная во фразе REPLACING (ЗАМЕНЯЯ), должна быть допустимой для принимающего операнда в операторе MOVE (ПОМЕСТИТЬ), в котором литерал-1 или данное, на которое ссылается идентификатор-2, используется как посылаемый операнд (п. 6.19 настоящей части).
Одна и та же категория не может повторяться во фразе REPLACING (ЗАМЕНЯЯ).
Описание данного, заданного идентификатором-1 или подчиненного идентификатору-1, не должно содержать фразу OCCURS (ПОВТОРЯЕТСЯ) с вариантом DEPENDING (В ЗАВИСИМОСТИ ОТ).
Индексное данное не может быть операндом оператора INITIALIZE (ИНИЦИИРОВАТЬ).
Статья описания данного для данного, заданного идентификатором-1, не должна содержать фразу RENAMES (ПЕРЕИМЕНОВЫВАЕТ).
Общие правила
Ключевое слово, следующее за словом REPLACING (ЗАМЕНЯЯ), соответствует категориям данных, как они определяются в этом документе (см. я. 4, п. 4.3.3).
В зависимости от того, ссылается ли идентификатор-1 на элементарное или групповое данное, все действия выполняются, как если бы была написана последовательность операторов MOVE (ПОМЕСТИТЬ), каждый из которых имеет в качестве принимающего поля элементарное данное, подчиняющееся следующим правилам:
если задана фраза REPLACING (ЗАМЕНЯЯ):
если идентификатор-1 ссылается на групповое данное, любое подчиненное ему элементарное данное инициируется только в том случае, если оно принадлежит к категории, заданной во фразе REPLACING (ЗАМЕНЯЯ);
если идентификатор-1 ссылается на элементарное данное, то это данное инициируется, только если оно принадлежит к категории, заданной во фразе REPLACING (ЗАМЕНЯЯ).
Эта инициация производится следующим образом.
Данное, на которое ссылается идентификатор-2 или литерал-1, действует как посылаемый операнд соответствующего неявного оператора MOVE (ПОМЕСТИТЬ).
Это действие распространяется на все принимающие элементарные поля, включая все вхождения элементов таблицы в групповом данном за исключением полей, перечисленных в пунктах (3) и (4) общих правил.
Действие оператора INITIALIZE (ИНИЦИИРОВАТЬ) не распространяется на индексные данные и элементарные данные FILLER (ЗАПОЛНИТЕЛЬ).
Любое данное, которое подчиняется идентификатору принимающего данного и содержит фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ), или любое подчиненное ему данное исключается из операции инициации. Однако принимающее данное или содержащее его данное может иметь в своем описании фразу REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ).
Если оператор задан без фразы REPLACING (ЗАМЕНЯЯ), в данные буквенной, буквенно-цифровой и буквенно-цифровой редактируемой категорий посылаются пробелы, а в данные числовой и числовой редактируемой категории посылаются нули. В этом случае операция выполняется так, как если бы каждое принимающее данное было бы принимающей областью элементарного оператора MOVE (ПОМЕСТИТЬ) с пробелом или нулем в качестве посылаемого данного.
Во всех случаях содержимое данных, на которые ссылается идентификатор-1, устанавливается на указанные значения в порядке (слева направо) появления идентификатора-1 в операторе INITIALIZE (ИНИЦИИРОВАТЬ). В пределах этой последовательности, если идентификатор-1 ссылается на групповое данное, подчиненные ему элементарные данные инициируются в порядке их определения внутри группы.
Если идентификатор-1 занимает ту же область памяти, что идентификатор-2, результат выполнения оператора не определен, даже если эти данные описаны одной статьей описания данных (см. п. 6.4.5 настоящей части).
6 18. Оператор INSPECT (ПРОСМОТРЕТЬ)
Назначение
Оператор INSPECT (ПРОСМОТРЕТЬ) обеспечивает возможность подсчета или замены вхождений единичных литер или це- почек литер в данном.
Общий форматФормат 1
INSPECT идентификатор-1 TALLYING
CHARACTERS INITIAL
AFTER
идентификатор-2 FOR •
идентификатор-4 литерал-2
ALL I fl идентификатор-3
LEADING I (( литерал-1
идентификатор-4 литерал-2
ПРОСМОТРЕТЬ идентификатор-1 СЧИТАЯ
ЛИТЕРЫ
7 ДО
(после
I В идентификатор-2
/ BEFORE 1 INITIAL jAFTER j
идентификатор-4 литерал-2
ВСЕ I ( I идентификатор-3
ВЕДУЩИЕ / (( литер ал-1 идентификатор-4 литерал-2
7 до
I ПОСЛЕ
СлЗ
О Формат 2
INSPECT идентификатор-1 REPLACING
CHARACTERS BY ( иДентиФикатоР-5 |
[ литерал-3 j
идентификатор-4 литерал-2
ALL LEADING FIRST
f BEFORE 1
I AFTER )
INITIAL
340 ГОСТ 22558—89
идентификатор-3 1 j$y f ВДентификатор-5
литерал-1 I 1 литерал-3
Гf BEFORE
{ AFTER
INITIAL
идентификатор-4 литерал-2
ПРОСМОТРЕТЬ идентификатор-1 ЗАМЕНЯЯ
ЛИТЕРЫ НА
идентификатор-5 литерал-3
ДО. 1 І идентификатор-4
ПОСЛЕ JI литерал-2
ВСЕ ВЕДУЩИЕ ПЕРВЫЙ
идентификатор-3 литерал-1
. 1 идентификатор-5
НА { о
— I литерал-3
( ДО 1 ( идентификатор-4 I ПОСЛЕ I I литерал-2
Формат З
INSPECT идентификатор-1 TALLYING
CHARACTERS
fBEFORE 1
(AFTER J
INITIAL
идентификатор-2 FOR
I
REPLACING
f идентификатор-4 1 .
I литерал-2 J 1-І LEADING ] ft идентификатор-3 ALL I Ц литерал-1
( идентификатор-4 11 .—.. 1 .—.
I литерал-2 J l—i 1-І
CHARACTERS BY ( иДентиФикатоР-5 ]
[ литерал-3 )
идентификатор-4 литерал-2
ALL LEADING FIRST
'J BEFORE
(AFTER
идентификатор-3 литерал-1
идентификатор-5 литерал-3
BEFORE
AFTER
INITIAL
J BEFORE 1
I AFTER )
INITIAL
INITIAL / иден'тиФикатоР‘4
і литерал-2
ГОСТ 22558—89 C.
ю ПРОСМОТРЕТЬ идентификатор-1 СЧИТАЯ
ЛИТЕРЫ
ДО 1 J идентификатор-4 ПОСЛЕ JI литерал-2
I В идентификатор-2
( ВСЕ
1 ВЕДУЩИЕ
идентификатор-31 Г| ДО литерал-1 J I ПОСЛЕ
идентификатор-4 литерал-2
342 ГОСТ 22558—89
ВСЕ ВЕДУЩИЕ ПЕРВЫЙ
I ДО I j идентификатор-4
I ПОСЛЕ J I литерал-2
ЗАМЕНЯЯ
ЛИТЕРЫ НА І
[ литерал-3
[[ идентификатор-3 ) | идентификатор-5 1 ГJ ДО
Ц литерал-1 /—I литерал-3 J | ПОСЛЕ
идентификатор-4 литерал-
2
Формат 4
INSPECT идентификатор-1 CONVERTING ( ВДен™ФИІ<атор-6 1 TQ ( идентификатор-7
— 1 литерал-4 J 1 литерал-5
' ( BEFORE I initial / идентификатор-4
( AFTER J [ литерал-2
ПРОСМОТРЕТЬ идентификатор-1 ПРЕВРАЩАЯ ! идентиФикатоР-6 1 в ( идентификатор-7
[литерал-4 j—[литерал-5
{ ДО [ I идентификатор-4
[
ОО
ОО
ГОСТ 22558—89
ПОСЛЕ ( [ литерал-2Синтаксические правилаДля всех форматов:
Идентификатор-1 должен относиться к групповому данному или к элементарному данному любой категории с заданным (явно или неявно) использованием DISPLAY (ДЛЯ ВЫДАЧИ).
Идентификатор-3, идентификатор-4 и так далее должны относиться к элементарному данному с заданным (явно или неявно) использованием DISPLAY (ДЛЯ ВЫДАЧИ).
Каждый литерал должен быть нечисловым и может быть любой стандартной константой, кроме константы ALL (ВСЕ). Если литерал-1, литерал-2 или литерал-4 являются стандартными константами, они неявно относятся к однолитерным элементарным данным.
Для каждой из фраз ALL (ВСЕ), LEADING (ВЕДУЩИЕ), CHARACTERS (ЛИТЕРЫ), FIRST (ПЕРВЫЙ), CONVERTING (ПРЕВРАЩАЯ) могут быть определены одна фраза BEFORE (ДО) и одна фраза AFTER (ПОСЛЕ).
На уровне 1 ядра литерал-1, литерал-2, литерал-3 и данные, представляемые идентификатором-3, идентификатором-4 и иден- тификатором-5, должны состоять из одной литеры.[ Это ограничение не применяется на уровне 2, кроме случаев, специально оговоренных в синтаксических и общих правилах. |
При использовании форматов 1 и 3 идентификатор-2 должен представлять элементарное числовое данное.
При использовании форматов 2 и 3 размер литерала-3 или данного, представляемого идентификатором-5, должны быть равны размеру литерала-1 или данного, представляемого идентификатором-3. Если вместо литерала-3 используется стандартная константа, размер данного, представленного стандартной константой, равен размеру литерала-1 или размеру данного, представляемого. идентификатором-3.
Если используется фраза CHARACTERS (ЛИТЕРЫ), то литерал-2, литерал-3 или значение данных, представляемых идентификатором-4, идентификатором-5, должны состоять из одной литеры.
При использовании формата 4 размер литерала-5 или данного, представляемого идентификатором-?, должен быть равен размеру литерала-4 или данного, представляемого идентификатором-6. Если вместо литерала-5 используется стандартная константа, размер данного, представленного стандартной константой, равен размеру литерала-4 или размеру данного, представляемого идентификатором-6.
Одна и та же литера не должна содержаться дважды ни в литерале-4, ни в данном, представляемом идентификатором-6.