Pular para o conteúdo principal
Módulo 3 · Lição 2 de 26/10 no curso~15 min
Lições do módulo (2/2)

Loops e Iterações

Loops e construções iterativas em COBOL não são definidos por palavras-chave como for ou while, mas em vez disso usam variações sintáticas da mesma instrução PERFORM.

Loops Numéricos Fixos (PERFORM TIMES)

Se precisarmos repetir a execução de um parágrafo um número fixo de vezes, podemos adicionar o modificador TIMES ao comando PERFORM.

COBOL
PERFORM PROCESS-LINE 10 TIMES.

Neste caso, o compilador executará o parágrafo PROCESS-LINE exatamente 10 vezes e depois retomará a execução linear do código.

Loops Condicionais (PERFORM UNTIL)

Para iterar até que uma determinada condição se torne verdadeira (equivalente a um loop while invertido), usamos a instrução 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."
/>