In this section, we will delve into multi-dimensional arrays in COBOL. Multi-dimensional arrays are a powerful feature that allows you to handle complex data structures efficiently. By the end of this section, you will understand how to declare, initialize, and manipulate multi-dimensional arrays in COBOL.

Key Concepts

  1. Definition: Multi-dimensional arrays are arrays of arrays, allowing for more complex data structures.
  2. Declaration: How to declare multi-dimensional arrays in COBOL.
  3. Initialization: Methods to initialize multi-dimensional arrays.
  4. Accessing Elements: Techniques to access and manipulate elements within multi-dimensional arrays.
  5. Practical Examples: Real-world scenarios where multi-dimensional arrays are useful.

Declaration of Multi-dimensional Arrays

In COBOL, multi-dimensional arrays are declared using the OCCURS clause. Here is the syntax for declaring a two-dimensional array:

01  MULTI-DIM-ARRAY.
    05  FIRST-DIMENSION OCCURS 10 TIMES.
        10  SECOND-DIMENSION OCCURS 5 TIMES.
            15  ELEMENT PIC 9(2).

Explanation

  • MULTI-DIM-ARRAY: The name of the array.
  • FIRST-DIMENSION OCCURS 10 TIMES: The first dimension of the array, which can hold 10 elements.
  • SECOND-DIMENSION OCCURS 5 TIMES: The second dimension of the array, nested within the first dimension, which can hold 5 elements.
  • ELEMENT PIC 9(2): The data type and size of each element in the array.

Initialization of Multi-dimensional Arrays

Initialization of multi-dimensional arrays can be done using the VALUE clause or through procedural code. Here is an example of initializing a two-dimensional array:

01  MULTI-DIM-ARRAY.
    05  FIRST-DIMENSION OCCURS 2 TIMES.
        10  SECOND-DIMENSION OCCURS 3 TIMES.
            15  ELEMENT PIC 9(2) VALUE ZEROS.

Procedural Initialization

PROCEDURE DIVISION.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 2
        PERFORM VARYING J FROM 1 BY 1 UNTIL J > 3
            MOVE 0 TO ELEMENT (I, J)
        END-PERFORM
    END-PERFORM.

Explanation

  • PERFORM VARYING I FROM 1 BY 1 UNTIL I > 2: Outer loop to iterate over the first dimension.
  • PERFORM VARYING J FROM 1 BY 1 UNTIL J > 3: Inner loop to iterate over the second dimension.
  • MOVE 0 TO ELEMENT (I, J): Initializes each element to zero.

Accessing Elements in Multi-dimensional Arrays

Accessing elements in a multi-dimensional array involves specifying the indices for each dimension. Here is an example:

PROCEDURE DIVISION.
    MOVE 25 TO ELEMENT (1, 1).
    DISPLAY ELEMENT (1, 1).

Explanation

  • MOVE 25 TO ELEMENT (1, 1): Assigns the value 25 to the element at the first row and first column.
  • DISPLAY ELEMENT (1, 1): Displays the value of the element at the first row and first column.

Practical Example

Let's consider a practical example where we use a two-dimensional array to store and display a multiplication table.

Code Example

IDENTIFICATION DIVISION.
PROGRAM-ID. MULTIPLICATION-TABLE.

DATA DIVISION.
WORKING-STORAGE SECTION.
01  MULTI-DIM-ARRAY.
    05  ROW OCCURS 10 TIMES.
        10  COLUMN OCCURS 10 TIMES.
            15  ELEMENT PIC 99.

PROCEDURE DIVISION.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
        PERFORM VARYING J FROM 1 BY 1 UNTIL J > 10
            COMPUTE ELEMENT (I, J) = I * J
        END-PERFORM
    END-PERFORM.

    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
        PERFORM VARYING J FROM 1 BY 1 UNTIL J > 10
            DISPLAY ELEMENT (I, J) WITH NO ADVANCING
            IF J < 10 THEN
                DISPLAY " " WITH NO ADVANCING
            ELSE
                DISPLAY ""
            END-IF
        END-PERFORM
    END-PERFORM.

    STOP RUN.

Explanation

  • Data Division: Declares a two-dimensional array MULTI-DIM-ARRAY with 10 rows and 10 columns.
  • Procedure Division:
    • First Loop: Fills the array with the product of the row and column indices.
    • Second Loop: Displays the multiplication table.

Exercises

Exercise 1: Initialize and Display a 3x3 Identity Matrix

Task: Write a COBOL program to initialize a 3x3 identity matrix and display it.

Solution:

IDENTIFICATION DIVISION.
PROGRAM-ID. IDENTITY-MATRIX.

DATA DIVISION.
WORKING-STORAGE SECTION.
01  MATRIX.
    05  ROW OCCURS 3 TIMES.
        10  COLUMN OCCURS 3 TIMES.
            15  ELEMENT PIC 9 VALUE 0.

PROCEDURE DIVISION.
    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
        MOVE 1 TO ELEMENT (I, I)
    END-PERFORM.

    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 3
        PERFORM VARYING J FROM 1 BY 1 UNTIL J > 3
            DISPLAY ELEMENT (I, J) WITH NO ADVANCING
            IF J < 3 THEN
                DISPLAY " " WITH NO ADVANCING
            ELSE
                DISPLAY ""
            END-IF
        END-PERFORM
    END-PERFORM.

    STOP RUN.

Explanation

  • Data Division: Declares a 3x3 matrix initialized to zero.
  • Procedure Division:
    • First Loop: Sets the diagonal elements to 1.
    • Second Loop: Displays the matrix.

Summary

In this section, we covered the following key points about multi-dimensional arrays in COBOL:

  • How to declare multi-dimensional arrays using the OCCURS clause.
  • Methods to initialize multi-dimensional arrays both declaratively and procedurally.
  • Techniques to access and manipulate elements within multi-dimensional arrays.
  • Practical examples and exercises to reinforce the concepts.

Understanding multi-dimensional arrays is crucial for handling complex data structures in COBOL, and mastering these concepts will significantly enhance your programming skills.

© Copyright 2024. All rights reserved