Two Dimension Table
Problem Description
Create and work with a two-dimensional table.
Expected Output
2D array for matrix operations
Hints
Nested OCCURS for multi-dimensional tables.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. TABLE2D.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 WS-MATRIX.
05 WS-ROW OCCURS 3 TIMES.
10 WS-COL PIC 9(2) OCCURS 3 TIMES.
01 WS-I PIC 9.
01 WS-J PIC 9.
01 WS-VAL PIC 9(2) VALUE 1.
01 WS-SUM PIC 9(3) VALUE 0.
01 WS-LINE PIC X(20).
PROCEDURE DIVISION.
* Fill matrix with sequential values
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 3
PERFORM VARYING WS-J FROM 1 BY 1 UNTIL WS-J > 3
MOVE WS-VAL TO WS-COL(WS-I, WS-J)
ADD 1 TO WS-VAL
END-PERFORM
END-PERFORM.
* Display matrix
DISPLAY "MATRIX:".
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 3
MOVE SPACES TO WS-LINE
STRING WS-COL(WS-I, 1) " " WS-COL(WS-I, 2) " "
WS-COL(WS-I, 3) DELIMITED SIZE INTO WS-LINE
DISPLAY WS-LINE
END-PERFORM.
* Sum diagonal elements
PERFORM VARYING WS-I FROM 1 BY 1 UNTIL WS-I > 3
ADD WS-COL(WS-I, WS-I) TO WS-SUM
END-PERFORM.
DISPLAY "DIAGONAL SUM: " WS-SUM.
* Access specific element
DISPLAY "ELEMENT(2,3): " WS-COL(2, 3).
STOP RUN.
Explanation:
Nested OCCURS creates 2D table. Access with two subscripts: TABLE(row, col).