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

Циклы и итерации

Циклы и итеративные конструкции в COBOL не определяются такими ключевыми словами, как for или while, а вместо этого используют синтаксические варианты того же оператора PERFORM.

Фиксированные числовые циклы (ВРЕМЯ ВЫПОЛНЕНИЯ)

Если нам нужно повторить выполнение абзаца фиксированное количество раз, мы можем добавить модификатор TIMES к команде PERFORM.

COBOL
PERFORM PROCESS-LINE 10 TIMES.

В этом случае компилятор выполнит параграф PROCESS-LINE ровно 10 раз, а затем возобновит линейное выполнение кода.

Условные циклы (PERFORM UNTIL)

Чтобы выполнять итерацию до тех пор, пока определенное условие не станет истинным (эквивалент обратного цикла while), мы используем оператор PERFORM ... UNTIL.

COBOL
PERFORM INCR-COUNTER UNTIL WS-COUNTER > 5.
COBOL
PROCEDURE DIVISION.
MAIN-PROCEDURE.
    PERFORM PROCESS-ITEM UNTIL WS-COUNTER > 3.
    STOP RUN.

PROCESS-ITEM.
    DISPLAY "Counter: " WS-COUNTER.
    ADD 1 TO WS-COUNTER.

---

## Try it yourself

<CobolExercise
  id="cobol.m3.l2.e1"
  prompt="Write a statement inside MAIN-PROCEDURE to execute the PROCESS-ITEM paragraph exactly 10 times."
  starter={`       PROCEDURE DIVISION.\n       MAIN-PROCEDURE.\n           * WRITE CODE HERE\n           STOP RUN.\n`}
  solution={`       PROCEDURE DIVISION.\n       MAIN-PROCEDURE.\n           PERFORM PROCESS-ITEM 10 TIMES.\n           STOP RUN.\n`}
  rules={{
    requiredKeywords: ['PERFORM PROCESS-ITEM', '10', 'TIMES.', 'STOP RUN.'],
  }}
  hint="Use the syntax: PERFORM PROCESS-ITEM 10 TIMES."
/>

<CobolExercise
  id="cobol.m3.l2.e2"
  prompt="Repeatedly execute the PROCESS-STEP paragraph until the WS-COUNTER variable becomes greater than 5."
  starter={`       PROCEDURE DIVISION.\n       MAIN-PROCEDURE.\n           * WRITE CODE HERE\n           STOP RUN.\n`}
  solution={`       PROCEDURE DIVISION.\n       MAIN-PROCEDURE.\n           PERFORM PROCESS-STEP UNTIL WS-COUNTER > 5.\n           STOP RUN.\n`}
  rules={{
    requiredKeywords: ['PERFORM PROCESS-STEP', 'UNTIL', 'WS-COUNTER', '>', '5', 'STOP RUN.'],
  }}
  hint="Use the syntax: PERFORM PROCESS-STEP UNTIL WS-COUNTER > 5."
/>