Przejdź do głównej treści
eLearner.app
Moduł 4 · Lekcja 2 z 28/10 w kursie~15 min
Lekcje modułu (2/2)

Tabele i Klauzula OCCURS

W COBOL-u nie istnieje słowo kluczowe "array" ani "wektor" do definiowania list jednorodnych danych. W tym celu używa się klauzuli OCCURS, która określa liczbę powtórzeń zmiennej lub struktury w pamięci.

Definiowanie tabeli za pomocą OCCURS

Klauzulę OCCURS dodaje się do deklaracji zmiennej podrzędnej (na przykład poziomu 05 lub wyższego) wewnątrz struktury grupowej (poziom 01):

Code
01 WS-SALES-DATA.
    05 WS-MONTHLY-SALES PIC 9(4) OCCURS 12 TIMES.

W tym przykładzie WS-MONTHLY-SALES to tabela składająca się z 12 elementów numerycznych o długości 4 cyfr każdy. Pamięć przydzielona dla tego rekordu wyniesie dokładnie 12 * 4 = 48 znaków.

Dostęp do elementów i indeksy

Aby uzyskać dostęp do konkretnego elementu w tabeli, podaje się indeks w nawiasie bezpośrednio po nazwie pola.

[!IMPORTANT] W przeciwieństwie do większości nowoczesnych języków, które używają indeksowania od 0, COBOL używa indeksowania od 1. Pierwszy element znajduje się pod indeksem 1, drugi pod indeksem 2 i tak dalej.

Code
MOVE 1500 TO WS-MONTHLY-SALES(1).
MOVE 2400 TO WS-MONTHLY-SALES(2).

Iterowanie po tabeli (Pętle)

Aby przejść przez elementy tabeli, można użyć instrukcji PERFORM VARYING oder ręcznie zarządzać licznikiem w pętli PERFORM UNTIL :

Code
PERFORM UNTIL WS-INDEX > 12
    DISPLAY "Sales: " WS-MONTHLY-SALES(WS-INDEX)
    ADD 1 TO WS-INDEX
END-PERFORM.

Spróbuj sam

Ćwiczenie#cobol.m4.l2.e1
Próby: 0Ładowanie...

Zadeklaruj tabelę zawierającą 5 temperatur dziesiętnych (3 cyfry całkowite i 1 dziesiętna) pod strukturą grupową WS-WEATHER-DATA za pomocą klauzuli OCCURS.

Ładowanie edytora...
Pokaż wskazówkę

Wpisz: 05 WS-TEMPERATURE PIC 9(3)V9 OCCURS 5 TIMES.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#cobol.m4.l2.e2
Próby: 0Ładowanie...

Zainicjalizuj trzy pierwsze elementy tabeli WS-MONTHLY-SALES odpowiednio wartościami 1200, 1500 i 1800 przy użyciu instrukcji MOVE. Pamiętaj, że indeksy w COBOL-u zaczynają się od 1.

Ładowanie edytora...
Pokaż wskazówkę

Użyj MOVE 1200 TO WS-MONTHLY-SALES(1). dla pierwszego elementu, a następnie powtórz to dla drugiego i trzeciego elementu, używając indeksów (2) i (3).

Rozwiązanie dostępne po 3 próbach