Перейти к основному содержимому
Модуль 4 · Урок 2 из 28/10 в курсе~15 min
Уроки модуля (2/2)

Таблицы и предложение OCCURS

В COBOL нет ключевых слов «массив» или «вектор» для определения списков однородных данных. Для этой цели вы используете предложение OCCURS, которое указывает, сколько раз переменная или структура повторяется в памяти.

Определение таблицы с помощью OCCURS

Предложение OCCURS добавляется к объявлению подчиненной переменной (например, уровень 05 или выше) внутри структуры группы (уровень 01):

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

В этом примере WS-MONTHLY-SALES представляет собой таблицу, состоящую из 12 числовых элементов по 4 цифры каждый. Памяти, выделенной под эту запись, будет ровно 12*4=48 символов.

Доступ к элементам и индексам

Чтобы получить доступ к определенному элементу таблицы, укажите индекс в круглых скобках сразу после имени поля.

[!ВАЖНО] В отличие от большинства современных языков, использующих индексацию с отсчетом от 0, COBOL использует индексацию с отсчетом от 1. Первый элемент имеет индекс 1, второй — индекс 2 и так далее.

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

Обход таблицы (итерация)

Чтобы перебирать элементы таблицы, вы можете использовать оператор PERFORM VARYING или управлять счетчиком вручную в цикле PERFORM UNTIL:

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

Попробуйте сами

Упражнение#cobol.m4.l2.e1
Попыток: 0Загрузка…

Объявите таблицу из 5 десятичных температур (3 целых цифры и 1 десятичную) в структуре группы WS-WEATHER-DATA, используя предложение OCCURS.

Загрузка редактора…
Показать подсказку

Напишите: 05 WS-ТЕМПЕРАТУРА PIC 9(3)V9 ПРОИСХОДИТ 5 РАЗ.

Решение доступно после 3 попыток

Упражнение#cobol.m4.l2.e2
Попыток: 0Загрузка…

Инициализируйте первые три элемента таблицы WS-MONTHLY-SALES значениями 1200, 1500 и 1800 соответственно, используя операторы MOVE. Помните, что индексы COBOL начинаются с 1.

Загрузка редактора…
Показать подсказку

Используйте MOVE 1200 TO WS-MONTHLY-SALES(1). для первого элемента, затем повторите для второго и третьего, используя индексы (2) и (3).

Решение доступно после 3 попыток