ГОСТ 22558-89 сторінка 48 з 116
Операторы, выполняемые в результате передачи управления по оператору EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ), не принадлежат области действия оператора PERFORM (ВЫПОЛНИТЬ) в том случае, когда:
оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) определен в той же программе, что и оператор PERFORM (ВЫПОЛНИТЬ);
оператор EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) принадлежит области действия оператора PERFORM (ВЫПОЛНИТЬ).
Имя-процедуры-1 и имя-процедуры-2 не должны быть именами секций или параграфов в любой другой программе данной единицы исполнения независимо от того, содержит ли другая программа программу, включающую оператор PERFORM (ВЫПОЛНИТЬ), или сама содержится в ней. Операторы из других программ в единице исполнения могут быть доступны только в результате выполнения оператора PERFORM (ВЫПОЛНИТЬ), область действия которого включает операторы CALL (ВЫЗВАТЬ) и EXIT PROGRAM (ВЫЙТИ ИЗ ПРОГРАММЫ) (ч. 10, п. 1.3.8).
Если область действия оператора PERFORM (ВЫПОЛНИТЬ) включает другой оператор PERFORM (ВЫПОЛНИТЬ), то последовательность процедур, связанная с внутренним оператором PERFORM (ВЫПОЛНИТЬ), должна полностью включаться в логическую последовательность, определяемую первым оператором PERFORM (ВЫПОЛНИТЬ), или полностью находиться вне этой последовательности. Таким образом, активный оператор PERFORM (ВЫПОЛНИТЬ), выполнение которого начинается внутри области действия другого активного в данный момент оператора PERFORM (ВЫПОЛНИТЬ), не должен передавать управление на точку выхода последнего; более того, несколько та-
ких активных операторов PERFORM (ВЫПОЛНИТЬ) не могут иметь общую точку выхода. Ниже приведены примеры возможных комбинаций областей действия нескольких операторов PERFORM (ВЫПОЛНИТЬ).
x PERFORM a THRU m ВЫПОЛНИТЬ а ПО m
a
d PERFORM f THRU j ВЫПОЛНИТЬ f ПО j
h
m
Л
PERFORM
f THRU j
ВЫПОЛНИТЬ f ПО j f
j I
m
:x PERFORM a THRU m
ВЫПОЛНИТЬ а ПО m
;a
f
m
j
Л PERFORM f THRU j
ВЫПОЛНИТЬ f HO j
х
PERFORM
a THRU m ВЫПОЛНИТЬ
а ПО m
Оператор PERFORM (ВЫПОЛНИТЬ), который появляется в секции, не являющейся независимым сегментом, может иметь внутри своей области действия кроме декларативных секций, вызываемых из его области действия, только следующие процедуры:
секции и (или) параграфы, содержащиеся полностью в одном или в нескольких сегментах, не являющихся независимыми;
секции и (или) параграфы, полностью содержащиеся в одном независимом сегменте.
<(16) Оператор PERFORM (ВЫПОЛНИТЬ), который появляется в независимом сегменте, может иметь внутри своей области действия кроме декларативных секций, вызываемых из области действия, только следующие процедуры:
секции и (или) параграфы, полностью содержащиеся в одном или нескольких сегментах, не являющихся независимыми;
секции и (или) параграфы, полностью содержащиеся в том же независимом сегменте, что и оператор PERFORM (ВЫПОЛНИТЬ).
Оператор SEARCH (ИСКАТЬ)
Назначение
Оператор SEARCH (ИСКАТЬ) используется для поиска в таблице некоторого элемента таблицы, который удовлетворяет заданному условию, и установления соответствующего значения индекса, указывающего этот элемент таблицы.
Общий формат
Формат 1
SEARCH идентификатор-1 [VARYING ( илентификатор-2 I ]
| имя-индекса-1 |
[AT END повелительный-оператор-1]
( WHEN условие-1
повелительный-оператор-2 ]]
I NEXT SENTENCE )/ • • ■
[END-SEARCH]
МЕНЯЯ |™"T"*"KaTT’2!
[ имя-индекса-1 |
ИСКАТЬ
В идентификатор-1
[В КОНЦЕ повелительный-оператор-1]
|..лгп. , Iповелительный-оператор-2 1]
[]$2ГДА Условие-1 )СЛЕдуЮщЕЕ ПРЕДЛОЖЕНИЕ) )'''
[КОНЕЦ-ИСКАТЬ]
Формат 2
SEARCH ALL идентификатор-1
[AT END повелительный-оператор-1]
WHEN
( IS EQUAL ТО ]
имя-данного-1 _ >
идентификатор-3 )
литерал-1 арифметическое- выражение-1
имя-условия-1
ч
п [ IS EQUAL ТО ) имя-данного-2 j — і
и AND
дентификатор-4 литерал-2 арифметическое- выражение-2
имя условия-2
І повелительный-оператор-2 ( NEXT SENTENCE
[END-SEARCH]
ИСКАТЬ ОСОБО В идентификатор-1 [В КОНЦЕ
повелительный-опер атор-1 ]
и идентификатор-3 ' ] литерал-1 арифметическое- [
выражение-1 J
I >
1 - I I
n
(РАВНО
имя-данного-2 [
РАВНО
имя-данного-1
| имя-условия-1
КОГДА
дентификатор-4
литерал-2 арифметическое- выражение-2
имя-условия-2
[ повелительный-оператор-2
I СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ
[КОНЕЦ-ИСКАТЬ]
С и н т а к с и ч е с к и е правила
В форматах 1 и 2 идентификатор-1 не должен быть индексирован или представлять модифицированную ссылку, но его описание должно содержать фразу OCCURS (ПОВТОРЯЕТСЯ) с вариантом INDEXED (ИНДЕКСИРУЕТСЯ). Описание идентификатора-1 в формате 2 должно содержать также вариант ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) во фразе OCCURS (ПОВТОРЯЕТСЯ).
Идентификатор-2 должен ссылаться на данное, описанное с фразой USAGE IS INDEX (ДЛЯ ИНДЕКСА) или как числовое элементарное данное, не имеющее позиций справа от подразумеваемой десятичной точки. Идентификатор-2 не может индексироваться первым (или единственным) именем-индекса, определенным вариантом INDEXED BY (ИНДЕКСИРУЕТСЯ) во фразе OCCURS (ПОВТОРЯЕТСЯ), соответствующей идентификатору-1.
В формате 1 условие-1 может быть любым допустимым в Коболе условием (см. п. 6.3 настоящей части).
В формате 2 все упоминаемые имена-условий должны быть определены как имеющие только одно значение. Имя-дан- ного, связанное с именем-условия, должно быть указано во фразе ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) идентификатор а-1. Каждое имя-данного-1, имя-данного-2 может уточняться. Каждое имя- данного-1, имя-данного-2 должно быть индексировано первым именем-индекса, связанным с идентификатором-1, вместе с другими требующимися индексами и должно быть указано во фразе ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) идентификатора-1. Идентификатор-3, идентификатор-4 или идентификаторы, задаваемые в арифметическом-выражении-1, арифметическом-выражении-2 не должны быть указаны во фразе ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) идентификатора-1 или индексироваться первым именем-индекса, связанным с идентификатором-1.
Если в формате 2 ссылаются на некоторое имя-данного, указанное в варианте ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) для данного, представленного идентификатором-1, или на связанное с ним имя- условия, то все предшествующие имена-данных, указанные во фразе ASCENDING (DESCENDING) KEY (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА) для данного, представленного идентификатором-1, или соответствующие им имена-условий тоже должны быть указаны.
Если указана фраза END-SEARCH (КОНЕЦ-ИСКАТЬ), то нельзя указывать фразу NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ).
Общие правила
Оператор SEARCH (ИСКАТЬ) может завершаться:
фразой END-SEARCH (КОНЕЦ-ИСКАТЬ) на соответст- ■; вующем уровне вложенности;
разделителем точка; ’
фразами ELSE (ИНАЧЕ) и END-IF (КОНЕЦ-ЕСЛИ), соответствующими предшествующему оператору IF (ЕСЛИ) (см. Ч. 4, П. 6.4.3) . :
Если используется формат 1 оператора SEARCH (ИС- ; КАТЬ), то имеет место последовательный тип поиска (перебор), ; начиная с текущей установки индекса.
а) Если в начале выполнения оператора SEARCH (ИСКАТЬ) имя-индекса, связанное с идентификатором-1, содержит ! значение, которое соответствует номеру вхождения, большему чем наибольший допустимый номер вхождения для идентифика- і тора-1, то оператор SEARCH (ИСКАТЬ) сразу завершается. , Наибольший допустимый номер вхождения определяется во фразе OCCURS (ПОВТОРЯЕТСЯ) (см. п. 5.8 настоящей части). Тогда, если в операторе указана фраза AT END (В КОН- ЦЕ), выполняется повелительный-оператор-1, иначе управление передается на конец оператора SEARCH (ИСКАТЬ).
б) Если в начале выполнения оператора SEARCH (ИСКАТЬ) имя-индекса, связанное с идентификатором-1, содержит значение, которое соответствует номеру вхождения, не превосходящему наибольший допустимый номер вхождения для идеи- тификатора-1, то оператор SEARCH (ИСКАТЬ) вычисляет ус- ( ловия в том порядке, в каком они написаны, используя установ- . ленные индексы, чтобы определить вхождения проверяемых дан- , ных. Если ни одно из условий не удовлетворено, имя-индекса ’ для идентификатора-1 увеличивается, чтобы обеспечить ссылку на следующее вхождение. Этот процесс повторяется с использованием вновь установленного имени-индекса до тех пор, пока очередное значение имени-индекса для идентификатора-1 не превзойдет наибольшего допустимого. В этом последнем случае поиск заканчивается как указывалось выше. Если одно из условий удовлетворено при его вычислении, поиск заканчива- ‘ ется и управление передается на повелительный оператор, связанный с этим условием, если он указан, или на следующее выполнимое предложение, если указана фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ); имя-индекса остается установленным на тот номер вхождения, при котором удовлетво- . рилось условие.
В формате 2 оператора SEARCH (ИСКАТЬ) результат операции SEARCH ALL (ИСКАТЬ ОСОБО) определен только в следующих ситуациях:
данные в таблице упорядочены таким же образом, как это описано в варианте KEY IS (ПО ВОЗРАСТАНИЮ (УБЫВАНИЮ) КЛЮЧА), связанном с идентификатором-1;
значения ключа (ключей), упомянутого во фразе WHEN (КОГДА), достаточны, чтобы однозначно идентифицировать < элемент таблицы.
’ (4) Если используется формат 2 оператора SEARCH (ИС
КАТЬ), то может иметь место непоследовательный тип поиска;
і начальная установка имени-индекса для идентификатора-1 иг- ; норируется, и установка имени-индекса меняется в ходе опера- і ции поиска способом, определяемым реализацией, с теми огра- ’ ничениями, что никогда значение имени-индекса не превзойдет значение, которое соответствует последнему элементу в табли- ! це, и не будет меньше значения, которое соответствует первому ( элементу таблицы. Длина таблицы определяется во фразе OCCURS (ПОВТОРЯЕТСЯ) (см. п. 5.8 настоящей части). Ес- , ли для каждой установки индекса в разрешенном интервале ка- ' кое-либо условие, задаваемое во фразе WHEN (КОГДА), не > удовлетворено, то управление передается повелительному-опе- , ратору-1 фразы AT END (В КОНЦЕ), если она указана, или ; на конец оператора SEARCH (ИСКАТЬ), если эта фраза не за- • дана. В любом случае конечная установка индекса не определена. Если все условия могут быть удовлетворены, то индекс ус- ■ танавливается на соответствующее вхождение, которое позволя- ■ ет удовлетворить условия, и управление передается повелитель- ному-оператору-2, если он указан, или следующему выполнимо- ; му предложению, если указана фраза NEXT SENTENCE (СЛЕДУЮЩЕЕ ПРЕДЛОЖЕНИЕ).
(5) После выполнения повелительного-оператора-1 или по- : велительного-оператора-2, которые не кончаются оператором ; GO ТО (ПЕРЕЙТИ), управление передается на конец операто- i pa SEARCH (ИСКАТЬ).
і (6) В формате 2 имя-индекса, которое используется в опера- ; ции поиска, есть первое (или единственное) имя-индекса, указанное в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1.
і Все другие имена-индексов для идентификатора-1 остаются не- ; изменными.
Если в формате 1 фраза VARYING (МЕНЯЯ) не исполь- ; зуется, имя-индекса, которое используется в операции поиска, есть первое (или единственное) имя-индекса, указанное в ва- ; рианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1. Все другие имена-индексов для идентификатора-1 остаются неизменными.
Если в формате 1 задана фраза VARYING (МЕНЯЯ) имя-индекса-1 и это имя-индекса-1 указано в варианте INDEXED (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1, то оно используется для поиска. Если имя-индекса-1 не указано в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) идентификатора-1 или задана фраза VARYING (МЕНЯЯ) идентификатор-2, то для поиска используется первое (или единственное) имя-индекса, заданное в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной с идентификатором-1. Кроме того, имеют место следующие операции:
если используется фраза VARYING (МЕНЯЯ) имя-индек- са-1 и это имя-индекса-1 появляется в варианте INDEXED BY (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ), связанной со статьей другой таблицы, то номер вхождения, представляемый именем-индекіса-1, увеличивается на такую же величину и в то же время, что и номер ^вхождения, представляемый именем-индекса, связанным с идентификатором-1;
если задана фраза VARYING (МЕНЯЯ) идентификатор-2 и идентификатор-2 есть индексное данное, то данное, представленное идентификатором-2, увеличивается на такую же величину и в то же время, что и индекс, связанный с идентификатором-1. Если идентификатор-2 не является индексным данным, то значение, представленное идентификатором-2, увеличивается на единицу в то же время, что и индекс, связанный с идентификатором-1.
Область действия оператора SEARCH (ИСКАТЬ) ограничивается фразой END-SEARCH (КОНЕЦ-ИСКАТЬ) (см. ч. 4, п. 6.4.3).
На рис. 1 приведена схема выполнения формата 1 оператора SEARCH (ИСКАТЬ), содержащего две фразы WHEN (КОГДА). Эта схема не должна рассматриваться как предписание по реализации оператора. На приведенном рисунке звездочками помечены следующие операции:
— операции, включаемые только тогда, когда соответствующий вариант указан в формате оператора;
* — каждая из этих передач ведет к точке выхода оператора SEARCH (ИСКАТЬ), если только повелительный-оператор не заканчивается оператором GO ТО (ПЕРЕЙТИ).
6.23. Оператор SET (УСТАНОВИТЬ)
Назначение
Оператор SET (УСТАНОВИТЬ) учреждает точки обращений для операций обработки таблиц, устанавливая имена-ин- дексов, соответствующие элементам таблицы
.
О SET
(2) Оператор SET (УСТАНОВИТЬ) используется для изменения состояния внешних переключателей.
бщий формат Формат 1
имя-индекса-1
и идентификатор-2 имя-индекса-2 целое-1
дентификатор-1
УСТАНОВИТЬ ( идентиФикатоР'7 8 9 10 11 12 I НА
[ имя-индекса-1 ) —
Ф идентификатор-2 имя-индекса-2 целое-1
ормат 2
сит , I UP BY 1 І идентификатор-3
SET {имя-индекса-3}... ктл,™
' ’ ( DOWN BY I I целое-2
TAunmrn. ( QI [ПРИБАВЛЯЯ]
УСТАНОВИТЬ {имя-индекса-3}. . . { тттг,т-. п >
[ ВЫЧИТАЯ J
[ идентификатор-3 ]
] целое-2 J
Формат 3
SET {{мнемоническое-имя-1}. . . ТО | ! } • • •
— OFF
УСТАНОВИТЬ {{мнемоническое-имя-1}. . . НА
I ВКЛЮЧЕНО 1
( ВЫКЛЮЧЕНО j } ‘ ■ -
Формат 4
SET {имя-условия-1} . .. ТО TRUE
УСТАНОВИТЬ {имя-условия-1}... НА ИСТИНА
(6) Имя-условия-1 должно соответствовать условной переменной.
6.23.4. Общие правила
Форматы 1 и 2
Имена-индексов рассматриваются относительно конкретной таблицы и определяются заданием варианта INDEXED (ИНДЕКСИРУЕТСЯ) фразы OCCURS (ПОВТОРЯЕТСЯ) для этой таблицы.
Если задано имя-индекса-1, то его значение после выполнения оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, соответствующую имени-индекса-1. Значение индекса, соответствующего имени-индекса,, после выполнения оператора PERFORM (ВЫПОЛНИТЬ) или оператора SEARCH (ИСКАТЬ) может быть установлено на номер вхождения, выходящий за пределы области допустимых значений для индексов соответствующей таблицы (см. п. 6.21 настоящей части). Если указано имя-индекса-2, то его значение перед выполнением оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, связанную с именем- индекса-1.
Если задано имя-индекса-3, то его значение до и после выполнения оператора SET (УСТАНОВИТЬ) должно соответствовать номеру вхождения элемента в таблицу, связанную с именем-ин- декса-3.
Побачили розбіжність з офіційним текстом?