Els arrays multidimensionals en COBOL permeten emmagatzemar dades en una estructura de taula amb més d'una dimensió. Això és útil per representar matrius, taules de dades i altres estructures complexes. En aquest tema, aprendrem com definir i utilitzar arrays multidimensionals en COBOL.

Definició d'Arrays Multidimensionals

En COBOL, els arrays multidimensionals es defineixen utilitzant la clàusula OCCURS dins d'una altra clàusula OCCURS. A continuació es mostra un exemple de com definir un array bidimensional:

01  SALES-TABLE.
    05  SALES-RECORD OCCURS 12 TIMES.
        10  MONTHLY-SALES OCCURS 4 TIMES.
            15  SALES-AMOUNT  PIC 9(5)V99.

En aquest exemple:

  • SALES-TABLE és l'element principal que conté l'array.
  • SALES-RECORD és un array que conté 12 elements (per als 12 mesos de l'any).
  • MONTHLY-SALES és un array dins de SALES-RECORD que conté 4 elements (per a 4 setmanes de cada mes).
  • SALES-AMOUNT és l'element que emmagatzema la quantitat de vendes, amb un format de 5 dígits enters i 2 decimals.

Accés a Elements d'Arrays Multidimensionals

Per accedir a un element específic d'un array multidimensional, cal especificar els índexs de cada dimensió. A continuació es mostra un exemple de com assignar un valor a un element específic i com llegir-lo:

MOVE 12345.67 TO SALES-AMOUNT (5, 2).
DISPLAY 'Sales Amount for Week 2 of Month 5: ' SALES-AMOUNT (5, 2).

En aquest exemple:

  • SALES-AMOUNT (5, 2) fa referència a l'element de la cinquena fila (mes) i la segona columna (setmana).
  • El valor 12345.67 es mou a aquest element.
  • El valor es mostra a la pantalla.

Exemple Pràctic

A continuació es presenta un programa complet que defineix un array bidimensional, assigna valors i mostra els resultats:

IDENTIFICATION DIVISION.
PROGRAM-ID. MultiDimArrayExample.

DATA DIVISION.
WORKING-STORAGE SECTION.
01  SALES-TABLE.
    05  SALES-RECORD OCCURS 12 TIMES.
        10  MONTHLY-SALES OCCURS 4 TIMES.
            15  SALES-AMOUNT  PIC 9(5)V99.

PROCEDURE DIVISION.
MAIN-PARA.
    MOVE 1000.50 TO SALES-AMOUNT (1, 1).
    MOVE 2000.75 TO SALES-AMOUNT (1, 2).
    MOVE 1500.25 TO SALES-AMOUNT (1, 3).
    MOVE 1750.00 TO SALES-AMOUNT (1, 4).

    DISPLAY 'Sales Amount for Week 1 of Month 1: ' SALES-AMOUNT (1, 1).
    DISPLAY 'Sales Amount for Week 2 of Month 1: ' SALES-AMOUNT (1, 2).
    DISPLAY 'Sales Amount for Week 3 of Month 1: ' SALES-AMOUNT (1, 3).
    DISPLAY 'Sales Amount for Week 4 of Month 1: ' SALES-AMOUNT (1, 4).

    STOP RUN.

Exercicis Pràctics

Exercici 1

Defineix un array tridimensional per emmagatzemar les temperatures diàries de diverses ciutats durant una setmana. Assigna valors a alguns elements i mostra'ls.

Solució

IDENTIFICATION DIVISION.
PROGRAM-ID. ThreeDimArrayExample.

DATA DIVISION.
WORKING-STORAGE SECTION.
01  TEMPERATURE-TABLE.
    05  CITY-RECORD OCCURS 3 TIMES.
        10  WEEK-RECORD OCCURS 7 TIMES.
            15  DAILY-TEMPERATURE OCCURS 24 TIMES.
                20  TEMPERATURE  PIC 99V9.

PROCEDURE DIVISION.
MAIN-PARA.
    MOVE 25.5 TO TEMPERATURE (1, 1, 1).
    MOVE 26.0 TO TEMPERATURE (1, 1, 2).
    MOVE 24.8 TO TEMPERATURE (1, 2, 1).
    MOVE 23.5 TO TEMPERATURE (2, 1, 1).

    DISPLAY 'Temperature for City 1, Day 1, Hour 1: ' TEMPERATURE (1, 1, 1).
    DISPLAY 'Temperature for City 1, Day 1, Hour 2: ' TEMPERATURE (1, 1, 2).
    DISPLAY 'Temperature for City 1, Day 2, Hour 1: ' TEMPERATURE (1, 2, 1).
    DISPLAY 'Temperature for City 2, Day 1, Hour 1: ' TEMPERATURE (2, 1, 1).

    STOP RUN.

Exercici 2

Crea un programa que calculi la mitjana de les vendes setmanals per a cada mes utilitzant un array bidimensional. Mostra la mitjana de vendes per a cada mes.

Solució

IDENTIFICATION DIVISION.
PROGRAM-ID. AverageSalesExample.

DATA DIVISION.
WORKING-STORAGE SECTION.
01  SALES-TABLE.
    05  SALES-RECORD OCCURS 12 TIMES.
        10  MONTHLY-SALES OCCURS 4 TIMES.
            15  SALES-AMOUNT  PIC 9(5)V99.
01  TOTAL-SALES  PIC 9(7)V99 VALUE 0.
01  AVERAGE-SALES  PIC 9(7)V99 VALUE 0.

PROCEDURE DIVISION.
MAIN-PARA.
    MOVE 1000.50 TO SALES-AMOUNT (1, 1).
    MOVE 2000.75 TO SALES-AMOUNT (1, 2).
    MOVE 1500.25 TO SALES-AMOUNT (1, 3).
    MOVE 1750.00 TO SALES-AMOUNT (1, 4).

    PERFORM VARYING I FROM 1 BY 1 UNTIL I > 12
        MOVE 0 TO TOTAL-SALES
        PERFORM VARYING J FROM 1 BY 1 UNTIL J > 4
            ADD SALES-AMOUNT (I, J) TO TOTAL-SALES
        END-PERFORM
        DIVIDE TOTAL-SALES BY 4 GIVING AVERAGE-SALES
        DISPLAY 'Average Sales for Month ' I ': ' AVERAGE-SALES
    END-PERFORM.

    STOP RUN.

Conclusió

Els arrays multidimensionals en COBOL són una eina poderosa per gestionar dades complexes. Hem après com definir-los, accedir-hi i utilitzar-los en programes pràctics. Amb aquests coneixements, estàs preparat per abordar problemes més complexos que requereixen estructures de dades avançades.

© Copyright 2024. Tots els drets reservats