EVALUATE Statement
Problem Description
Use EVALUATE for multiple condition checking (like switch-case).
Expected Output
Menu-driven program using EVALUATE
Hints
EVALUATE is cleaner than nested IF for multiple conditions.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. EVALTEST.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-CHOICE PIC 9.
01 WS-GRADE PIC 9(3).
01 WS-RESULT PIC X(15).
01 WS-DAY PIC 9.
01 WS-DAY-NAME PIC X(10).
PROCEDURE DIVISION.
* EVALUATE with single value
DISPLAY "ENTER DAY (1-7): ".
ACCEPT WS-DAY.
EVALUATE WS-DAY
WHEN 1 MOVE "MONDAY" TO WS-DAY-NAME
WHEN 2 MOVE "TUESDAY" TO WS-DAY-NAME
WHEN 3 MOVE "WEDNESDAY" TO WS-DAY-NAME
WHEN 4 MOVE "THURSDAY" TO WS-DAY-NAME
WHEN 5 MOVE "FRIDAY" TO WS-DAY-NAME
WHEN 6 MOVE "SATURDAY" TO WS-DAY-NAME
WHEN 7 MOVE "SUNDAY" TO WS-DAY-NAME
WHEN OTHER MOVE "INVALID" TO WS-DAY-NAME
END-EVALUATE.
DISPLAY "DAY: " WS-DAY-NAME.
* EVALUATE TRUE for ranges
DISPLAY "ENTER MARKS (0-100): ".
ACCEPT WS-GRADE.
EVALUATE TRUE
WHEN WS-GRADE >= 90 MOVE "EXCELLENT" TO WS-RESULT
WHEN WS-GRADE >= 80 MOVE "VERY GOOD" TO WS-RESULT
WHEN WS-GRADE >= 70 MOVE "GOOD" TO WS-RESULT
WHEN WS-GRADE >= 60 MOVE "AVERAGE" TO WS-RESULT
WHEN WS-GRADE >= 50 MOVE "PASS" TO WS-RESULT
WHEN OTHER MOVE "FAIL" TO WS-RESULT
END-EVALUATE.
DISPLAY "RESULT: " WS-RESULT.
STOP RUN.
Explanation:
EVALUATE with literal values or TRUE for condition ranges. WHEN OTHER is default.