VARYING is a COBOL clause used with PERFORM statements to create controlled loops that automatically modify variables during iteration. It provides a convenient way to implement counting loops, array processing, and other iterative operations with automatic variable management.
VARYING clause syntax and usage patterns for different loop control scenarios.
1234567891011121314IDENTIFICATION DIVISION. PROGRAM-ID. VARYING-EXAMPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 COUNTER PIC 9(3) VALUE 1. 01 TOTAL PIC 9(5) VALUE 0. PROCEDURE DIVISION. PERFORM VARYING COUNTER FROM 1 BY 1 UNTIL COUNTER > 10 ADD COUNTER TO TOTAL END-PERFORM DISPLAY "Total: " TOTAL STOP RUN.
Basic VARYING loop that counts from 1 to 10 and accumulates the total.
123456789101112131415IDENTIFICATION DIVISION. PROGRAM-ID. VARYING-RANGE. DATA DIVISION. WORKING-STORAGE SECTION. 01 INDEX-VAR PIC 9(2) VALUE 1. 01 ARRAY-DATA. 05 ARRAY-ELEMENT PIC 9(3) OCCURS 10 TIMES. PROCEDURE DIVISION. PERFORM VARYING INDEX-VAR FROM 1 TO 10 MOVE INDEX-VAR TO ARRAY-ELEMENT(INDEX-VAR) DISPLAY "Element " INDEX-VAR ": " ARRAY-ELEMENT(INDEX-VAR) END-PERFORM STOP RUN.
VARYING loop with range specification to process array elements.
12345678910111213141516171819IDENTIFICATION DIVISION. PROGRAM-ID. VARYING-MULTIPLE. DATA DIVISION. WORKING-STORAGE SECTION. 01 ROW-INDEX PIC 9(2) VALUE 1. 01 COL-INDEX PIC 9(2) VALUE 1. 01 MATRIX-DATA. 05 MATRIX-ROW OCCURS 5 TIMES. 10 MATRIX-ELEMENT PIC 9(3) OCCURS 5 TIMES. PROCEDURE DIVISION. PERFORM VARYING ROW-INDEX FROM 1 TO 5 AFTER COL-INDEX FROM 1 TO 5 MOVE ROW-INDEX TO MATRIX-ELEMENT(ROW-INDEX, COL-INDEX) DISPLAY "Matrix[" ROW-INDEX "," COL-INDEX "]: " MATRIX-ELEMENT(ROW-INDEX, COL-INDEX) END-PERFORM STOP RUN.
Nested VARYING loops to process a two-dimensional matrix.
Loops that execute within a specified range.
1PERFORM VARYING var FROM start TO end
Loops that execute until a condition is met.
1PERFORM VARYING var UNTIL condition
Loops with custom increment values.
1PERFORM VARYING var FROM start BY increment
Loops within loops for complex iteration.
12PERFORM VARYING var1 FROM 1 TO 5 AFTER var2 FROM 1 TO 3
Loop Type | Syntax | Use Case |
---|---|---|
Range | VARYING var FROM start TO end | Fixed iteration count |
Condition | VARYING var UNTIL condition | Condition-based termination |
Increment | VARYING var FROM start BY increment | Custom step values |
Nested | VARYING var1 AFTER var2 | Multi-dimensional processing |
1. What is the primary purpose of VARYING in COBOL?
2. Which statement is VARYING most commonly used with?
3. What happens to the VARYING variable after each iteration?
4. What is the syntax for VARYING in a PERFORM statement?
5. When does a VARYING loop terminate?