Значение Значение
истинности истинности
it истина" }1 ложь”
Рис. 1. Вычисление уровня иерархии
и
Значение Значение
истинности пижъ”
стинностиР
условие-1 OR условие-2 OR ... условие-п
(условие-1 ИЛИ условие-2 ИЛИ ... условие-п>
условие-1 AND условие-2 AND ... условие-п
(условие-1 И условие-2 И ... условие-п)
Рис. 3. Вычисление выражения условие-1 OR условие-2 AND условие-3 (условие-] ИЛИ условие-2 И условие-3)
Значение Значение
истинности истинности
„ложь" „ истина”
(
Рис. 4. Вычисление выражения
Значение Значение
истинности истинности
* ложь” „ „истина”
условие-] OR NOT условие-2) AND условие-3 AND условие-4 ((услэвие-1 ИЛИ НЕ условие-2) И условие-3 И условие-4)Если фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) не задана и во время выполнения арифметической операции в арифметическом операторе возникает условие переполнения, значения результирующих идентификаторов не определены. Значения результирующих идентификаторов, для которых ситуация переполнения не возникала, будут такими же, как если бы ситуация переполнения не возникала бы ни для какого результирующего идентификатора. После завершения арифметических операций управление передается на конец арифметического оператора, а фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ), если она и задана, игнорируется.
Если при выполнении арифметических операций в арифметическом операторе переполнения не возникает, фраза ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ), если она и задана, игнорируется, а управление передается на конец арифметического оператора или, если задана фраза NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ), повелительному оператору, определенному в этой фразе. Во втором случае выполнение продолжается в соответст« вии с правилами выполнения каждого оператора, указанного в этом повелительном операторе. Если выполняется оператор ветвления процедуры или условный оператор, управление передается в соответствии с правилами этого оператора, в противном случае после завершения выполнения повелительного оператора, заданного во фразе NOT ON SIZE ERROR (БЕЗ ПЕРЕПОЛНЕНИЯ), управление передается на конец арифметического оператора.
Если при выполнении операторов ADD (СЛОЖИТЬ) и SUBTRACT (ОТНЯТЬ) с фразой CORRESPONDING (СООТВЕТСТВЕННО) хоть одна отдельная операция вырабатывает условие переполнения, повелительный-оператор фразы ON SIZE ERROR (ПРИ ПЕРЕПОЛНЕНИИ) не выполняется до тех пор, пока не завершатся все сложения или вычитания.
Фраза CORRESPONDING (СООТВЕТСТВЕННО)
Идентификаторы групповых данных для удобства изложения обозначим dx и d2. Два данных, одно из d] и одно из d2, определяются как соответствующие, если выполняются следующие условия:
данное в d и данное в d2 не определяются ключевым словом FILLER (ЗАПОЛНИТЕЛЬ) и имеют одно и то же имя и одни и те же уточнители вплоть до di и d2, но исключая последние;
в случае использования оператора MOVE CORRESPONDING (ПОМЕСТИТЬ СООТВЕТСТВЕННО) по крайней мере одно из данных является элементарным и соответствующая пересылка допустима по правилам пересылки; оба данных являются элементарными числовыми данными в случае оператора ADD CORRESPONDING (СЛОЖИТЬ СООТВЕТСТВЕННО) или SUBTRACT CORRESPONDING (ОТНЯТЬ СООТВЕТСТВЕННО);
ни di, ни d2 не могут быть описаны с номером уровня 66, 77 или 88 или с фразой USAGE IS INDEX (ДЛЯ ИНДЕКСА);
данные, подчиненные di или d2 и содержащие в описании одну из фраз REDEFINES (ПЕРЕОПРЕДЕЛЯЕТ), RENAMES (ПЕРЕИМЕНОВЫВАЕТ), OCCURS (ПОВТОРЯЕТСЯ), USAGE IS INDEX (ДЛЯ ИНДЕКСА), или подчиненные данным, описанным с такими фразами, не рассматриваются как соответствующие. Ссылки на di и d2 не могут модифицироваться;
имя каждого данного, удовлетворяющего вышеперечисленным условиям, должно быть однозначным, с учетом его под- разумеваемого уточнения.
Арифметические операторы
Арифметическими операторами являются операторы ADD (СЛОЖИТЬ), I COMPUTE (ВЫЧИСЛИТЬ)Г| DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ), SUBTRACT (ОТНЯТЬ). Они имеют несколько общих особенностей.
Описания операндов могут быть различными. При вычислении обеспечивается необходимое преобразование и выравнивание по десятичной точке.
Максимальный размер каждого операнда — 18 десятичных цифр. Композиция операндов, представляющая собой гипотетическое данное, порождаемое суперпозицией указанных операндов оператора, выровненных по их десятичным точкам, не должна содержать более 18 цифр (пп. 6.6, 6.11, 6.20, 6.26 настоящей части).
Перекрывающиеся операнды
Если посылаемое и принимающее данное в любом операторе имеют общую часть или всю область памяти, то, даже если они не определены в одной статье описания данного, результат выполнения такого оператора не определен. Кроме того, будут не определены результаты выполнения некоторых операторов, в которых посылаемые и принимающие данные определены одной и той же статьей описания данного. Эти случаи будут рассматриваться в общих правилах соответствующих операторов.
Несколько результатов арифметических операторов
Операторы ADD (СЛОЖИТЬ), COMPUTE (ВЫЧИСЛИТЬ^! DIVIDE (РАЗДЕЛИТЬ), MULTIPLY (УМНОЖИТЬ) и SUBTRACT (ОТНЯТЬ) могут иметь несколько результатов.
Эти операторы выполняются так, как если бы они были заданы следующим образом:
оператор, при выполнении которого осуществляется доступ к данным, которые являются частью начальных вычислений этого оператора, выполняет необходимые арифметические операции или комбинирование этих данных и запоминает результат этой операции в промежуточном поле памяти. Элементы, которые принимают участие в начальном вычислении, определяются правилами конкретных операторов;
выполняется последовательность операторов, выполнение которых передает или комбинирует значение в этом промежуточном поле с каждым отдельным результирующим данным. Эти операторы рассматриваются, как если бы они были записаны слева направо в той же последовательности, в которой заданы множественные результаты.
Результат оператора
ADD а, Ь, с, ТО с, d(c), е
(СЛОЖИТЬ А, Б, М, С М, Д(М), Е) эквивалентен результатам
следующих операторов:
ADD а, Ь, с GIVING temp
ADD temp TO c
ADD temp TO d (c)
ADD temp TO e
(СЛОЖИТЬ А, Б, M ПОЛУЧАЯ пром
СЛОЖИТЬ пром С М
СЛОЖИТЬ пром С Д (М)
СЛОЖИТЬ пром С Е) и результат оператора MULTIPLY a (i) BY і, а(І) УМНОЖИТЬ А(М) НА М, А(М) эквивалентен
MOVE a (і) ТО temp
MULTIPLY temp BY і
MULTIPLY temp BY a(i)
(ПОМЕСТИТЬ A(M) в пром
УМНОЖИТЬ пром НА М
УМНОЖИТЬ пром НА А(М)
где в обоих случаях «temp» (пром) есть обозначение промежуточного результата, обеспечиваемого реализацией.
Несовместимые данные
Если значения данных, к которым происходит обращение в разделе процедур, не соответствуют классу, определенному при описании этих данных с фразой PICTURE (ШАБЛОН), результат обращения не определен. Исключение составляет условие класса (см. п. 6.3.1.2 настоящей части).
Оператор ACCEPT (ПРИНЯТЬ)
Назначение
Оператор ACCEPT (ПРИНЯТЬ) позволяет передать небольшой объем информации от некоторого устройства в указанное данное.
О б щ и й формат Формат 1
A
[FROM мнемоническое-имя-1]
[С мнемоническое-имя-1]
CCEPT идентификатор-1ПРИНЯТЬ идентификатор-1
Формат 2 ACCEPT идентификатор-2 FROM |
РАТЕ ї DAY DAY-OF-WEEK і TIME ! |
ДАТУ
Д
ПРИНЯТЬ В идентификатор-2
ЕНЬДЕНЬ-НЕДЕЛИ
ВРЕМЯ
Синтаксическое правило
Мнемоническое-имя-1 должно указываться в параграфе SPECIAL-NAMES (СПЕЦИАЛЬНЫЕ-ИМЕНА) раздела оборудования и должно связываться с устройством оборудования.
Общие правила
Формат 1
Оператор ACCEPT (ПРИНЯТЬ) вызывает передачу данного с указанного устройства; это данное замещает значение данного, представленного идентификатором-1.
Любое преобразование данных, требуемое при их перемещении с внешнего устройства в данное, представленное идентификатором-1, определяется реализацией.
Размер одной передачи для каждого устройства оборудования определяет реализация.
Если устройство может передавать данные того же размера, что и размер принимающих данных, передаваемое данное запоминается в поле принимающего данного.
Если устройство не может передавать данные такого же размера, как и принимающие данные, то:
если размер принимающего данного { (или части принимаю-) |щего данного, еще не занятой передаваемым данным) | превышает размер передаваемого данного, передаваемое данное запоми- нается в принимающем поле выровненным влево | (или в части принимающего поля, которая еще не занята) и запрашивается дополнительное данное. | На уровне 1 осуществляется только одна передача данных;
если размер передаваемого данного превышает размер при- нимающего поля (или части принимающего поля, еще не заня- | |той передаваемым данным) , в поле принимающего данного или в оставшейся его части запоминаются только самые левые позиции передаваемого данного; остальные его литеры, не помещающиеся в принимающем данном, игнорируются.
если фраза FROM (С) не задана, то используется устройство, которое определяется реализацией как стандартное.
при использовании формата 2 оператор ACCEPT (ПРИНЯТЬ) вызывает передачу запрашиваемой информации в данное, заданное идентификатором-2, согласно правилам оператора MOVE (ПОМЕСТИТЬ); дата, день, день недели и время автоматически обеспечиваются реализацией и не описываются в Ко- бол-программе.
дата содержит год столетия, месяц года и день месяца.
Последовательность кодов, представляющая DATE (ДАТУ), такова, как если бы это данное было описано как элементарное целое числовое данное размером в шесть цифр, первые две из которых представляют год столетия, следующие две — месяц, года, и последние две — число месяца. Например, дата 1 июля 1987 года изображается последовательностью цифр 870701.
день содержит год столетия и порядковый номер дня в году.
Последовательность кодов, представляющая DAY (ДЕНЬ), такова, как если бы это данное было описано как элементарное целое числовое данное размером в пять цифр, первые две из которых (слева направо) представляют год столетия и последние три — порядковый номер дня в году. Например, 1 июля 1987 года представляется последовательностью цифр 87182.
Время содержит часы, минуты, секунды и сотые доли секунды. Время отсчитывается на 24-часовой основе, начиная от полуночи. Последовательность кодов, представляющих TIME (ВРЕМЯ), такова, как если бы это данное было описано как элементарное целое число без знака размером в 8 цифр, из которых первые две (слева направо) представляют часы, следующие две — минуты, следующие две — секунды и последние две — сотые доли секунды. Минимальное значение данного (ВРЕМЯ) равно 00000000, максимальное — 23595999. Если система не поддерживает возможности работы с долями секунды, те разряды, которые не могут быть определены, полагаются равными нулю.
DAY-OF-WEEK (ДЕНЬ-НЕДЕЛИ) состоит из одного данного, содержимое которого представляет день недели. DAY- OF-WEEK (ДЕНЬ-НЕДЕЛИ) доступен Кобол-программе. как если бы он был описан в ней как элементарное целое числовое данное без знака из одной цифры.
В DAY-OF-WEEK (ДЕНЬ-НЕДЕЛИ) значением 1 задается понедельник, значением 2 вторник, . . ., 7 — воскресенье.
Оператор ADD (СЛОЖИТЬ)
Назначение
Оператор ADD (СЛОЖИТЬ) позволяет просуммировать два или более числовых операнда и запомнить результат.
О б щ и й формат
Формат 1
ADD Г идентификатор-1 [
[ литерал-1 J
ТО {идентификатор-2 [ROUNDED]}...
[ON SIZE ERROR повелительный-оператор-1]
[NOT ON SIZE ERROR повелительный-оператор-2]
[END-ADD]
СЛОЖИТЬ / идентификатор-1 j
[ литерал-1 J
С {идентификатор-2 [ОКРУГЛЯЯ]} •. •
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1]
[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]
[КОНЕЦ-СЛОЖИТЬ]
Формат 2
ADD I идентификатор-1 'І I идентификатор-2 1
[литерал-1 J ■ • ■ [литерал-2 J
GIVING {идентификатор-3 [ROUNDED]} . . .
[ON SIZE ERROR повелительный-оператор-1]
[NOT ON SIZE ERROR повелительный-оператор-2]
[END-ADD]
СЛОЖИТЬ ( идентификатор-1 [ £ ( идентификатор-2 [ [литерал-1 j [литерал-2 (
ПОЛУЧАЯ {идентификатор-3 [ОКРУГЛЯЯ]} •..
[ПРИ ПЕРЕПОЛНЕНИИ повелительный-оператор-1]
[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]
[КОНЕЦ-СЛОЖИТЬ]
Формат 3
.^[CORRESPONDING]
ADD r I идентификатор-1
I С»О1К. j
TO идентификатор-2 [ROUNDED]
[ON SIZE ERROR повелительный-оператор-1]
[NOT ON SIZE ERROR повелительный-оператор-2]
[END-ADD]
I СООТВЕТСТВЕННО ! ,
СЛОЖИТЬ идентификатор-! С
I CUUId і —
идентификатор-2
[ОКРУГЛЯЯ] [ПРИ ПЕРЕПОЛНЕНИИ повелительный-опер атор-1 ]
[БЕЗ ПЕРЕПОЛНЕНИЯ повелительный-оператор-2]
[КОНЕЦ-СЛОЖИТЬ]
Синтаксические правила
В форматах 1 и 2 каждый идентификатор должен представлять элементарно^ числовое данное, за исключением . идентификаторов, которые следуют за словом GIVING (ПОЛУЧАЯ) и должны представлять элементарное числовое или элементарное числовое редактируемое данное. В формате 3 каждый идентификатор дол- [жен представлять групповое данное.
Каждый литерал должен быть числовым литералом.
Максимальный размер каждого операнда — восемнадцать десятичных цифр.