Модуль 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."
/>