Уроки модуля (2/2)
Таблицы и предложение OCCURS
В COBOL нет ключевых слов «массив» или «вектор» для определения списков однородных данных. Для этой цели вы используете предложение OCCURS, которое указывает, сколько раз переменная или структура повторяется в памяти.
Определение таблицы с помощью OCCURS
Предложение OCCURS добавляется к объявлению подчиненной переменной (например, уровень 05 или выше) внутри структуры группы (уровень 01):
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и так далее.
MOVE 1500 TO WS-MONTHLY-SALES(1).
MOVE 2400 TO WS-MONTHLY-SALES(2).Обход таблицы (итерация)
Чтобы перебирать элементы таблицы, вы можете использовать оператор PERFORM VARYING или управлять счетчиком вручную в цикле PERFORM UNTIL:
PERFORM UNTIL WS-INDEX > 12
DISPLAY "Sales: " WS-MONTHLY-SALES(WS-INDEX)
ADD 1 TO WS-INDEX
END-PERFORM.Попробуйте сами
Объявите таблицу из 5 десятичных температур (3 целых цифры и 1 десятичную) в структуре группы WS-WEATHER-DATA, используя предложение OCCURS.
Показать подсказку
Напишите: 05 WS-ТЕМПЕРАТУРА PIC 9(3)V9 ПРОИСХОДИТ 5 РАЗ.
Решение доступно после 3 попыток
Инициализируйте первые три элемента таблицы WS-MONTHLY-SALES значениями 1200, 1500 и 1800 соответственно, используя операторы MOVE. Помните, что индексы COBOL начинаются с 1.
Показать подсказку
Используйте MOVE 1200 TO WS-MONTHLY-SALES(1). для первого элемента, затем повторите для второго и третьего, используя индексы (2) и (3).
Решение доступно после 3 попыток