Перейти до вмісту
ГОСТ 22558-89
/ 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 (DESCEN­DING) 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 указано в варианте INDE­XED (ИНДЕКСИРУЕТСЯ) фразы 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.

Побачили розбіжність з офіційним текстом?

Повідомити про неточність

Напишіть, що саме розходиться з офіційною публікацією. Код документа вкажіть у повідомленні — так ми швидше знайдемо потрібне місце.

Перейти до форми зворотного зв'язку

Дивіться також

Весь розділ →