Учебники

КОБОЛ — Условные заявления

Условные операторы используются для изменения потока выполнения в зависимости от определенных условий, указанных программистом. Условные операторы всегда будут иметь значение 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.

пример

Live Demo

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] 

пример

Live Demo

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]

пример

Live Demo

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]

пример

Live Demo

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].

пример

Live Demo

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.

пример

Live Demo

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.

пример

Live Demo

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 в программах на Си.

пример

Live Demo

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

Когда вы компилируете и запускаете вышеуказанную программу, она дает следующий результат —