Условные операторы используются для изменения потока выполнения в зависимости от определенных условий, указанных программистом. Условные операторы всегда будут иметь значение true или false. Условия используются в выражениях IF, Evaluate и Perform. Различные типы условий следующие:
- IF Условие
- Условие отношений
- Условие подписи
- Состояние класса
- Условие-Название Условие
- Отрицательное состояние
- Комбинированное условие
IF Условие
Оператор IF проверяет условия. Если условие истинно, выполняется блок IF; и если условие ложно, выполняется блок ELSE.
END-IF используется для завершения блока IF. Чтобы завершить блок IF, вместо END-IF можно использовать точку. Но всегда предпочтительно использовать END-IF для нескольких блоков IF.
Nested-IF — блоки IF, появляющиеся внутри другого блока IF. Нет ограничений на глубину вложенных выражений IF.
Синтаксис
Ниже приводится синтаксис операторов условия IF:
IF [condition] THEN [COBOL statements] ELSE [COBOL statements] END-IF.
пример
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(9). 01 WS-NUM2 PIC 9(9). 01 WS-NUM3 PIC 9(5). 01 WS-NUM4 PIC 9(6). PROCEDURE DIVISION. A000-FIRST-PARA. MOVE 25 TO WS-NUM1 WS-NUM3. MOVE 15 TO WS-NUM2 WS-NUM4. IF WS-NUM1 > WS-NUM2 THEN DISPLAY 'IN LOOP 1 - IF BLOCK' IF WS-NUM3 = WS-NUM4 THEN DISPLAY 'IN LOOP 2 - IF BLOCK' ELSE DISPLAY 'IN LOOP 2 - ELSE BLOCK' END-IF ELSE DISPLAY 'IN LOOP 1 - ELSE BLOCK' END-IF. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
IN LOOP 1 - IF BLOCK IN LOOP 2 - ELSE BLOCK
Условие отношений
Условие отношения сравнивает два операнда, каждый из которых может быть идентификатором, литералом или арифметическим выражением. Алгебраическое сравнение числовых полей выполняется независимо от размера и условия использования.
Для нечисловых операндов
Если сравниваются два нечисловых операнда одинакового размера, то символы сравниваются слева с соответствующими позициями до достижения конца. Операнд, содержащий большее количество символов, объявляется большим.
Если сравниваются два нечисловых операнда неравного размера, к более короткому элементу данных добавляются пробелы в конце, пока размер операндов не станет равным, а затем сравниваются в соответствии с правилами, упомянутыми в предыдущем пункте.
Синтаксис
Ниже приведен синтаксис операторов условий отношения —
[Data Name/Arithmetic Operation] [IS] [NOT] [Equal to (=),Greater than (>), Less than (<), Greater than or Equal (>=), Less than or equal (<=) ] [Data Name/Arithmetic Operation]
пример
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(9). 01 WS-NUM2 PIC 9(9). PROCEDURE DIVISION. A000-FIRST-PARA. MOVE 25 TO WS-NUM1. MOVE 15 TO WS-NUM2. IF WS-NUM1 IS GREATER THAN OR EQUAL TO WS-NUM2 THEN DISPLAY 'WS-NUM1 IS GREATER THAN WS-NUM2' ELSE DISPLAY 'WS-NUM1 IS LESS THAN WS-NUM2' END-IF. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
WS-NUM1 IS GREATER THAN WS-NUM2
Условие подписи
Условие знака используется для проверки знака числового операнда. Он определяет, является ли данное числовое значение большим, меньшим или равным нулю.
Синтаксис
Ниже приводится синтаксис операторов условия Sign.
[Data Name/Arithmetic Operation] [IS] [NOT] [Positive, Negative or Zero] [Data Name/Arithmetic Operation]
пример
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC S9(9) VALUE -1234. 01 WS-NUM2 PIC S9(9) VALUE 123456. PROCEDURE DIVISION. A000-FIRST-PARA. IF WS-NUM1 IS POSITIVE THEN DISPLAY 'WS-NUM1 IS POSITIVE'. IF WS-NUM1 IS NEGATIVE THEN DISPLAY 'WS-NUM1 IS NEGATIVE'. IF WS-NUM1 IS ZERO THEN DISPLAY 'WS-NUM1 IS ZERO'. IF WS-NUM2 IS POSITIVE THEN DISPLAY 'WS-NUM2 IS POSITIVE'. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
WS-NUM1 IS NEGATIVE WS-NUM2 IS POSITIVE
Состояние класса
Условие класса используется для проверки, содержит ли операнд только алфавиты или числовые данные. Пространства рассматриваются в ALFHABETIC, ALFHABETIC-LOWER и ALPHABETIC-UPPER.
Синтаксис
Ниже приводится синтаксис операторов условий класса:
[Data Name/Arithmetic Operation>] [IS] [NOT] [NUMERIC, ALPHABETIC, ALPHABETIC-LOWER, ALPHABETIC-UPPER] [Data Name/Arithmetic Operation]
пример
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC X(9) VALUE 'ABCD '. 01 WS-NUM2 PIC 9(9) VALUE 123456789. PROCEDURE DIVISION. A000-FIRST-PARA. IF WS-NUM1 IS ALPHABETIC THEN DISPLAY 'WS-NUM1 IS ALPHABETIC'. IF WS-NUM1 IS NUMERIC THEN DISPLAY 'WS-NUM1 IS NUMERIC'. IF WS-NUM2 IS NUMERIC THEN DISPLAY 'WS-NUM2 IS NUMERIC'. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
WS-NUM1 IS ALPHABETIC WS-NUM1 IS NUMERIC
Условие-имя Условие
Условное имя — это пользовательское имя. Он содержит набор значений, указанных пользователем. Он ведет себя как булевы переменные. Они определены с уровнем номер 88. У него не будет условия PIC.
Синтаксис
Ниже приведен синтаксис определяемых пользователем операторов условия:
88 [Condition-Name] VALUE [IS, ARE] [LITERAL] [THRU LITERAL].
пример
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM PIC 9(3). 88 PASS VALUES ARE 041 THRU 100. 88 FAIL VALUES ARE 000 THRU 40. PROCEDURE DIVISION. A000-FIRST-PARA. MOVE 65 TO WS-NUM. IF PASS DISPLAY 'Passed with ' WS-NUM ' marks'. IF FAIL DISPLAY 'FAILED with ' WS-NUM 'marks'. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
Passed with 065 marks
Отрицательное состояние
Отрицательное условие задается с помощью ключевого слова NOT. Если условие истинно, а мы перед ним НЕ указали, то его окончательное значение будет ложным.
Синтаксис
Ниже приведен синтаксис операторов отрицательных условий:
IF NOT [CONDITION] COBOL Statements END-IF.
пример
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(2) VALUE 20. 01 WS-NUM2 PIC 9(9) VALUE 25. PROCEDURE DIVISION. A000-FIRST-PARA. IF NOT WS-NUM1 IS LESS THAN WS-NUM2 THEN DISPLAY 'IF-BLOCK' ELSE DISPLAY 'ELSE-BLOCK' END-IF. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
ELSE-BLOCK
Комбинированное условие
Комбинированное условие содержит два или более условий, связанных с использованием логических операторов И или ИЛИ.
Синтаксис
Ниже приводится синтаксис объединенных операторов условия:
IF [CONDITION] AND [CONDITION] COBOL Statements END-IF.
пример
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-NUM1 PIC 9(2) VALUE 20. 01 WS-NUM2 PIC 9(2) VALUE 25. 01 WS-NUM3 PIC 9(2) VALUE 20. PROCEDURE DIVISION. A000-FIRST-PARA. IF WS-NUM1 IS LESS THAN WS-NUM2 AND WS-NUM1=WS-NUM3 THEN DISPLAY 'Both condition OK' ELSE DISPLAY 'Error' END-IF. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —
Both condition OK
Оценить глагол
Глагол Evaluate является заменой серии операторов IF-ELSE. Может использоваться для оценки более одного условия. Это похоже на оператор SWITCH в программах на Си.
пример
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. DATA DIVISION. WORKING-STORAGE SECTION. 01 WS-A PIC 9 VALUE 0. PROCEDURE DIVISION. MOVE 3 TO WS-A. EVALUATE TRUE WHEN WS-A > 2 DISPLAY 'WS-A GREATER THAN 2' WHEN WS-A < 0 DISPLAY 'WS-A LESS THAN 0' WHEN OTHER DISPLAY 'INVALID VALUE OF WS-A' END-EVALUATE. STOP RUN.
JCL для выполнения вышеуказанной программы COBOL —
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO
Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —