E N D
The Relational Condition IS [NOT] GREATER THAN IS [NOT] > IS [NOT] LESS THAN identifier-1 IS [NOT] < identifier-2IF literal-1 IS [NOT] EQUAL TO literal-2 expression-1 IS [NOT] = expression-2 IS [NOT] GREATER THAN OR EQUAL TO IS [NOT] >= IS [NOT] LESS THAN OR EQUAL TO IS [NOT] <= (a) Syntax 05 NUMERIC-FIELD PIC 9(5).05 ALPHANUMERIC-FIELD PIC X(5).. . .IF NUMERIC-FIELD = 10 . . . (valid entry)IF NUMERIC-FIELD = ‘10’ . . . (invalid entry)IF ALPHANUMERIC-FIELD = 10 (invalid entry)IF ALPHANUMERIC-FIELD = ‘10’ (valid entry) (b) Examples
CONDITION? CONDITION? STATEMENT2 STATEMENT1 STATEMENT1 STATEMENT3 STATEMENT2 The IF Statement FALSE TRUE FALSE TRUE (a) With ELSE Option (b) Without ELSE Option
A=B MOVE ZERO TO C MOVE 1 TO C MOVE ZERO TO D MOVE 1 TO D WRITEDETAIL-LINE The ELSE Clause/II FALSE TRUE IF A = B MOVE 1 TO C MOVE 1 TO D ELSE MOVE ZERO TO C MOVE ZERO TO D END-IF. WRITE DETAIL-LINE. (a) IF/ELSE Flowchart (b) COBOL Code
FALSE TRUE A>B? FALSE TRUE ADD 1TO Y C>D? ADD 1TO X Nested IF Statements/II (a) Flowchart IF A > B IF C > D ADD 1 TO X END-IFELSE ADD 1 TO YEND-IF IF A > B IF C > D ADD 1 TO X ELSE NEXT SENTENCEELSE ADD 1 TO Y. (b) NEXT SENTENCE(COBOL-74) (c) Scope Terminators(COBOL-85)
Nested IF’s IBM COBOL Reference Manual: ‘The presence of one or more IF statements within the initial IF statement constitutes a "nested IF statement." Nesting statements is much like specifying subordinate arithmetic expressions enclosed in parentheses and combined in larger arithmetic expressions.’
IF A = B NEXT SENTENCE ELSE PERFORM D0-ARITHMETIC-CALCULATIONSEND-IF. IF condition A = B is true then NEXT SENTENCE is executed and the ELSE phrase is ignored, and control passes to the statement following the END-IF.
The Class Test NUMERICALPHABETICIF identifier IS [NOT] ALPHABETIC-UPPERALPHABETIC-LOWER (a) Syntax 05 NUMERIC-FIELD PIC 9(5).05 ALPHABETIC-FIELD PIC X(5).. . .IF NUMERIC-FIELD IS NUMERIC PERFORM D0-ARITHMETIC-CALCULATIONSEND-IF. IF NUMERIC-FIELD IS NOT NUMERIC DISPLAY ‘ERROR - NUMERIC FIELD CONTAINS INVALID DATA’END-IF. IF ALPHABETIC-FIELD IS ALPHABETIC DISPLAY ‘ALPHABETIC FIELD CONTAINS UPPER AND/OR LOWER CASE LETTERS’END-IF. IF ALPHABETIC-FIELD IS NOTALPHABETIC DISPLAY ‘ERROR - ALPHABETIC FIELD CONTAINS NON-ALPHABETIC DATA’END-IF. (b) Examples
The SignTest identifier POSITIVE IF arithmetic expression IS [NOT] NEGATIVE ZERO (a) Syntax IF NET-PAY IS NOT POSITIVE PERFORM TOO-MUCH-TAXESEND-IF. IF CHECK-BALANCE IS NEGATIVE PERFORM OVERDRAWNEND-IF. (b) Examples
VALUE IS THROUGH 88 data-name VALUES ARE literal-1 THRU literal-2 . . . Condition Names (88-level entries) (a) Syntax 05 YEAR-CODE PIC 9. 88 FRESHMAN VALUE 1. 88 SOPHOMORE VALUE 2. 88 JUNIOR VALUE 3. 88 SENIOR VALUE 4. 88 GRAD-STUDENT VALUES ARE 5 THRU 8. 88 UNDER-CLASSMAN VALUES ARE 1, 2 88 UPPER-CLASSMAN VALUES ARE 3, 4. 88 VALID-CODES VALUES ARE 1 THRU 8. IF FRESHMAN PERFORM WELCOME-NEW-STUDENTSEND-IF IF VALID-CODES PERFORM PROCESS-STUDENT-RECORDELSE DISPLAY ‘INCOMING YEAR CODE IS IN ERROR’END-IF. (b) Examples
Level 88 Identifies any condition-name entry that is associated with a particular value of a conditional variable. Check sample code (program CPCH13B)
The ACCEPT Statement WORKING-STORAGE SECTION. 01 EMPLOYEE-RECORD. . . 05 EMP-DATE-OF-BIRTH. 10 EMP-BIRTH-MONTH PIC 99. 10 EMP-BIRTH-YEAR PIC 99. 01 EMPLOYEE-AGE PIC 99V99. 01 DATE-WORK-AREA. 05 TODAYS-YEAR PIC 99. 05 TODAYS-MONTH PIC 99. 05 TODAYS-DAY PIC 99. . .PROCEDURE DIVISION.. . ACCEPT DATE-WORK-AREA FROM DATE.. . COMPUTE EMPLOYEE-AGE = TODAYS-YEAR - EMP-BIRTH-YEAR + (TODAYS-MONTH - EMP-BIRTH-MONTH) / 12.