Open In App

Conditional Statements in COBOL

Improve
Improve
Like Article
Like
Save
Share
Report

While writing a program a programmer needs to check for various conditions, if the condition is true then a particular block of statement/s are executed, or else another block of statement/s is execute. To check these conditions we use Conditional Statements. These statements return either true or false. There are various types of Conditional statements in Cobol :

  1. Relational condition.
  2. Sign condition.
  3. Class condition.
  4. Condition-name condition.
  5. Negated condition.
  6. Compound condition.
  7. If condition.
  8. If-else condition.
  9. Nested If condition.

Relational condition :

 If the programmer wants to make a relational comparison between operand/s or literal/s then we use relational operators i.e. < , > , < = , >= , ==. We can either use the particular relational symbol or we can spell it out in words. 

For example : 

  • (a > b ) can also be written as  (a GREATER THAN b).
  • (a !< b) can also be written as (a IS NOT LESS THAN b).
  • (a == b) can also be written as (a IS EQUAL TO b).

Syntax:

Operand-1 [IS][NOT] relational-operator Operand-2.

Example:

Cobol




IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
    77 OPERAND3 PIC 99.
    77 OPERAND4 PIC 99.
PROCEDURE DIVISION.
    MOVE 8 TO OPERAND1.
    MOVE 5 TO OPERAND2.
    MOVE 4 TO OPERAND3.
    MOVE 4 TO OPERAND4.
    IF (OPERAND1 > OPERAND2)
            DISPLAY "OPERAND1 IS GREATER THAN OPERAND2"
    ELSE
            DISPLAY "OPERAND2 IS GREATER THAN OPERAND2".
    IF (OPERAND3 IS EQUAL TO OPERAND4)
            DISPLAY "OPERAND3 AND OPERAND4 ARE EQUAL"
    ELSE
            DISPLAY "OPERAND3 AND OPERAND4 ARE NOT EQUAL".
    STOP RUN.


Output:

OPERAND1 IS GREATER THAN OPERAND2
OPERAND3 AND OPERAND4 ARE EQUAL

Sign condition: 

Sign-condition determines whether a particular operand or arithmetic expression is Positive, Negative, or Zero. In the Sign condition, the Positive condition is determined to be true only when the value of the operand is strictly true i.e. the value Zero is not treated positively in this case.

Syntax:

Operand1/Arithmetic expression IS [NOT] POSITIVE/NEGATIVE/ZERO

Example:

Cobol




IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORLD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 8 TO OPERAND1.
    MOVE 5 TO OPERAND2.
    IF (OPERAND1 IS POSITIVE)
            DISPLAY "OPERAND1 IS POSITIVE".
    IF (OPERAND2 IS NOT ZERO)
            DISPLAY "OPERAND2 IS NOT ZER0".
    STOP RUN.


Output:

OPERAND1 IS POSITIVE
OPERAND2 IS NOT ZERO

Class condition: 

 If the programmer wants to check whether an entered value is alphabet or number then we use Class Conditions. It helps to check whether the entered value is valid or not. The numeric condition is true only when the entered value contains digits from 0-9,(irrespective of sign) or is alphanumeric. Similarly, the alphabetic condition is true only when the entered value contains alphabets from A-Z or is alphanumeric.

Syntax:

Operand IS [NOT] NUMERIC/ALPHABETIC

Example:

Cobol




IDENTIFICATION DIVISION.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND PIC X9.
PROCEDURE DIVISION.
    DISPLAY "ENTER ANY ALPHABET/NUMBER".
    ACCEPT OPERAND.
    IF (OPERAND IS ALPHABETIC)
            DISPLAY "ALPHABET"
    ELSE
            DISPLAY "NUMBER".
    STOP RUN.


Output: 

ENTER ANY ALPHABET/NUMBER
C
ALPHABET

Condition-name condition: 

 Condition-name is a condition itself and contains either true or false values. The condition-name must always be declared within a data name called Conditional Variable, i.e. it cannot be defined independently. The condition-name becomes true only if the conditional variable assumes any of the assigned values. The LEVEL 88 is used to declare condition-name.

For example;

77 EXPERIENCE PIC 9.
88 BEGINNER VALUE IS 1.
88 INTERMEDIATE VALUE IS 3.
88 PROFESSIONAL VALUES ARE 5,6,7.

Explanation:  In the above example “EXPERIENCE” is a Conditional Variable with level 77, whereas, “BEGINNER “, “INTERMEDIATE”, “PROFESSIONAL” are Condition-name with level 88. Now the BEGINNER condition will be true only when the value of EXPERIENCE is 1 and similarly, the INTERMEDIATE condition will be true only when the value of EXPERIENCE is 3, and the PROFESSIONAL condition will be true only when the value of EXPERIENCE is either 5 or 6 or 7.

Syntax:

77 Conditional Variable PIC 9/A/X.
88 Condition-name1 {VALUE IS/VALUES ARE} Literal-1 [ {THRU/THROUGH} Literal-2][,Literal-3 [{THRU/THROUGH} Literal-4]]
88 Condition-name2 {VALUE IS/VALUES ARE} Literal-1 [ {THRU/THROUGH} Literal-2][,Literal-3 [{THRU/THROUGH} Literal-4]]

Example:

Cobol




IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
      77 WEXP PIC 99.
      88 PROFESSIONAL VALUE 10.
      88 HIGH VALUE 9.
      88 INTERMEDIATE VALUES ARE 6,7,8.
      88 BEGINNER VALUES ARE 1 THRU 5.
      88 UNEXP VALUE IS 0.
PROCEDURE DIVISION.
      DISPLAY "ENTER EXPERIENCE".
      ACCEPT WEXP.
      IF PROFESSIONAL
             DISPLAY "PROFESSIONAL".
      IF HIGH
             DISPLAY "HIGHLY EXPERIENCED".
      IF INTERMEDIATE
               DISPLAY "INTERMEDIATE LEVEL".
      IF  BEGINNER
               DISPLAY "BEGINNER".
      IF UNEXP
               DISPLAY "UNEXPERIENCED".
STOP RUN.


Output:

ENTER EXPERIENCE
7
INTERMEDIATE LEVEL

Negated Condition: 

Any condition that has a NOT operator preceding it is known as Negated Condition. This condition always produces the reverse of the condition, i.e. if the condition is true the final output will be false and vice versa. The NOT operator can be used in two ways:

  1. As a part of the condition, as we have seen in the above conditions.
  2. It can simply precede any condition and make it a Negated Condition.

Syntax:

NOT Condition

Example:

Cobol




IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 10 TO OPERAND1.
    MOVE 8 TO OPERAND2.
    IF NOT OPERAND1 > OPERAND2
            DISPLAY "TRUE CONDITION REVERSED"
    ELSE
            DISPLAY "FALSE CONDITION REVERSED".
    STOP RUN.


Output:

FALSE CONDITION REVERSED

Compound Condition: 

When the programmer has to check two or more conditions as a single condition then we use logical operators, AND or OR, two combine the conditions. In the case of AND, the compound condition returns a true value only if all the constituent conditions are true, else it returns false. In the case of OR, the compound condition returns true value if any one of the constituent conditions is true, else it returns false

Syntax:

Condition1 AND/OR Condition2 [AND/OR Condition3....];

Example:

Cobol




IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 9.
    77 OPERAND2 PIC 9.
PROCEDURE DIVISION.
    MOVE 7 TO OPERAND1.
    MOVE 0 TO OPERAND2.
    IF  OPERAND1 IS POSITIVE AND OPERAND2 IS POSITIVE
            DISPLAY "BOTH OPERANDS ARE POSITIVE"
    ELSE
            DISPLAY "BOTH OPERANDS ARE NOT POSITIVE".
    STOP RUN.


Output:

BOTH OPERANDS ARE NOT POSITIVE

If condition: 

If conditional statement checks for conditions, if a particular condition returns a true value only then a particular set of statements are executed. These statements can be simple statements or compound statements. If the condition returns a false value then the control does not go into the IF-block. In this case always remember that PERIOD(.) will only be used at the end of the last statement, to terminate the IF-block.

Syntax:

IF (Condition/s)
  Set of statements
[END IF]

Example:

Cobol




IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 10 TO OPERAND1.
    MOVE 8 TO OPERAND2.
    IF OPERAND1 > OPERAND2
            DISPLAY "OPERAND1 IS GREATER".
 
    STOP RUN.


Output:

    OPERAND1 IS GREATER

If-else condition:  

If-else conditional statement checks for the condition/s, if the condition is true then it executes the statements of IF-block, if the condition is false then it executes the statement of ELSE-block. In this case always remember that PERIOD(.) will only be used at the end of the last statement, to terminate the IF-ELSE block.

Syntax:

IF (Condition/s)
    Set of Statements
ELSE
    Set of statements
[END IF].

Example:

Cobol




IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
WORKING-STORAGE SECTION.
    77 OPERAND1 PIC 99.
    77 OPERAND2 PIC 99.
PROCEDURE DIVISION.
    MOVE 3 TO OPERAND1.
    MOVE 8 TO OPERAND2.
    IF OPERAND1 > OPERAND2
            DISPLAY "OPERAND1 IS GREATER"
    ELSE
              DISPLAY "OPERAND2 IS GREATER".
    STOP RUN.


Output: 

OPERAND2 IS GREATER

The below syntax is also used for the nested if-condition statements in COBOL:

Syntax:

    IF (Condition1)
        IF (Condition2)
            Set of statement/s
        ELSE
            Set of statement/s
        END-IF
    ELSE
        Set of statement/s
    END-IF.    

Example:

Cobol




IDENTIFICATION DIVISION.
PROGRAM-ID. HELLOWORD.
ENVIRONMENT DIVISION.
DATA DIVISION.
      WORKING-STORAGE SECTION.
          77 OPERAND1 PIC 99.
PROCEDURE DIVISION.
      MOVE 12 TO OPERAND1.
      IF OPERAND1 IS NUMERIC
              DISPLAY "OPERAND IS NUMERIC"
              IF OPERAND1 IS POSITIVE
                  DISPLAY " OPERAND IS POSITIVE"
              ELSE
                  IF OPERAND1 IS NEGATIVE
                      DISPLAY "OPERAND IS NEGATIVE"
                  ELSE
                      DISPLAY "OPERAND IS ZERO"
                  END-IF
              END-IF
      ELSE
              DISPLAY "OPERAND IS NOT NUMERIC"
    END-IF.
STOP RUN.


Output:

OPERAND IS NUMERIC
OPERAND IS POSITIVE


Last Updated : 24 Feb, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads