PERFORM UNTIL
Problem Description
Loop until a condition becomes true.
Expected Output
Condition-based loop termination
Hints
PERFORM UNTIL condition. Test is before each iteration.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. UNTIL.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-NUM PIC 9(5).
01 WS-SUM PIC 9(6) VALUE 0.
01 WS-COUNT PIC 9(3) VALUE 0.
01 WS-AVG PIC 9(4)V99.
01 WS-CONTINUE PIC X VALUE "Y".
PROCEDURE DIVISION.
* Sum numbers until user enters 0
DISPLAY "ENTER NUMBERS (0 TO STOP):".
PERFORM UNTIL WS-NUM = 0
ACCEPT WS-NUM
IF WS-NUM NOT = 0
ADD WS-NUM TO WS-SUM
ADD 1 TO WS-COUNT
END-IF
END-PERFORM.
IF WS-COUNT > 0
COMPUTE WS-AVG = WS-SUM / WS-COUNT
DISPLAY "SUM: " WS-SUM
DISPLAY "COUNT: " WS-COUNT
DISPLAY "AVERAGE: " WS-AVG
ELSE
DISPLAY "NO NUMBERS ENTERED"
END-IF.
* With TEST AFTER (do-while equivalent)
MOVE "Y" TO WS-CONTINUE.
PERFORM WITH TEST AFTER UNTIL WS-CONTINUE = "N"
DISPLAY "CONTINUE? (Y/N): "
ACCEPT WS-CONTINUE
END-PERFORM.
STOP RUN.
Explanation:
PERFORM UNTIL tests before loop. WITH TEST AFTER tests after (do-while).