Módulo 1 · Lógica de Programação — Capítulo 06

Estruturas de Repetição

Repetição é o que permite processar muitos dados sem escrever o mesmo passo centenas de vezes. Aqui você aprende as três formas universais de laço — ENQUANTO, REPITA...ATÉ e PARA — e quando usar cada uma.

1. Por que repetição existe

Imagine escrever um algoritmo para exibir os números de 1 a 1000. Sem repetição, você precisaria de mil linhas de ESCREVA. Com repetição, três ou quatro linhas resolvem, não importa se são 1000 ou 1 milhão de números. Estruturas de repetição — também chamadas de laços ou loops — executam um bloco de passos repetidamente enquanto uma condição permitir.

2. ENQUANTO — teste no início

O laço ENQUANTO testa a condição antes de cada repetição. Se a condição já começar falsa, o bloco nunca executa nem uma vez.

PSEUDOCÓDIGO enquanto.txt
INÍCIO
    contador ← 1

    ENQUANTO contador <= 5 FAÇA
        ESCREVA contador
        contador ← contador + 1
    FIM ENQUANTO
FIM
// saída: 1 2 3 4 5

Três partes são essenciais em todo ENQUANTO: uma variável inicializada antes do laço (contador ← 1), a condição testada a cada volta (contador <= 5), e uma atualização da variável dentro do laço (contador ← contador + 1). Esqueça a atualização e o laço nunca termina.

INÍCIO contador ← 1 contador <= 5? sim ESCREVA contador contador ← contador + 1 (volta ao teste) não FIM

Fig. 1 — ENQUANTO: a condição é testada antes de cada repetição; o fluxo volta ao losango até a condição falhar.

3. REPITA ... ATÉ — teste no fim

O laço REPITA...ATÉ executa o bloco primeiro e só depois testa a condição, no final de cada volta. Isso garante que o bloco execute pelo menos uma vez, mesmo que a condição já comece "satisfeita".

PSEUDOCÓDIGO repita-ate.txt
INÍCIO
    REPITA
        ESCREVA "Digite um número maior que 0:"
        LEIA numero
    ATÉ numero > 0

    ESCREVA "Você digitou: " + numero
FIM

Esse exemplo é o caso clássico de uso: validação de entrada. Você precisa pedir o dado ao menos uma vez antes de ter algo para validar — por isso ENQUANTO (que testaria antes de ler qualquer coisa) não serviria tão bem aqui.

ENQUANTOREPITA ... ATÉ
Quando testaAntes de cada repetiçãoDepois de cada repetição
Executa ao menos 1 vez?Não, se a condição já for falsaSim, sempre
Bom paraProcessar coleções, condições que podem já começar falsasValidação de entrada, menus que repetem "até sair"

4. PARA — repetição controlada por contador

Quando você já sabe de antemão quantas vezes o laço deve repetir (por exemplo, "de 1 até 10"), a estrutura PARA é mais direta que ENQUANTO — ela já embute a inicialização, a condição e o incremento em uma única linha.

PSEUDOCÓDIGO para.txt
INÍCIO
    PARA i DE 1 ATÉ 5 FAÇA
        ESCREVA i
    FIM PARA
FIM
// saída: 1 2 3 4 5 — equivalente ao exemplo de ENQUANTO da seção 2
Comparando com o que você já sabe

O PARA do pseudocódigo é o for clássico do JavaScript: for (let i = 1; i <= 5; i++) { ... }. A estrutura é idêntica — inicialização, condição de parada e incremento, só que separados em palavras-chave diferentes em vez de um cabeçalho compacto com ponto e vírgula.

5. Qual laço usar

A escolha entre os três não é aleatória — cada um comunica uma intenção diferente para quem lê o código depois:

  • Use PARA quando o número de repetições é conhecido antes de começar.
  • Use ENQUANTO quando o número de repetições depende de uma condição que pode não ser satisfeita nem uma vez.
  • Use REPITA...ATÉ quando o bloco precisa rodar pelo menos uma vez antes de qualquer verificação fazer sentido.

6. O perigo do loop infinito

Um laço que nunca satisfaz sua condição de parada roda para sempre — isso é um loop infinito, e na prática trava o programa (ou consome toda a memória e processamento disponíveis, até o sistema derrubá-lo à força).

PSEUDOCÓDIGO loop-infinito.txt
INÍCIO
    contador ← 1

    ENQUANTO contador <= 5 FAÇA
        ESCREVA contador
        // faltou: contador ← contador + 1
    FIM ENQUANTO
    // contador nunca muda — este laço nunca termina!
FIM
Atenção

Antes de dar como pronto qualquer laço que você escrever, pergunte: "existe algum caminho pelo qual a condição de parada nunca se torna falsa?". Isso vale para os três tipos de laço, em qualquer linguagem — loop infinito é um dos bugs mais comuns em código real, e quase sempre nasce de esquecer de atualizar a variável de controle, ou de atualizá-la na direção errada.

Nota

Loop infinito nem sempre é um erro — servidores web, por exemplo, rodam em um laço propositalmente infinito, esperando novas requisições indefinidamente. O problema é quando o loop infinito é acidental, em um algoritmo que deveria terminar e não termina.

📌 Resumo do capítulo

  • Estruturas de repetição (laços) executam um bloco várias vezes sem repetir código manualmente.
  • ENQUANTO testa a condição antes de cada volta — pode nunca executar.
  • REPITA...ATÉ testa a condição depois de cada volta — sempre executa ao menos uma vez.
  • PARA é ideal quando o número de repetições já é conhecido, combinando inicialização, condição e incremento.
  • Todo laço com condição precisa de uma variável que muda a cada volta, aproximando a condição de se tornar falsa.
  • Loop infinito acontece quando a condição de parada nunca é satisfeita — quase sempre por esquecer de atualizar a variável de controle.
  • A escolha do tipo de laço comunica a intenção do algoritmo para quem lê o código depois.

✏️ Praticando

  1. Escreva um algoritmo com PARA que exiba a tabuada de um número lido pelo usuário (de 1 a 10).
  2. Escreva um algoritmo com ENQUANTO que some os números digitados pelo usuário até que ele digite 0, e então mostre a soma total.
  3. Escreva um algoritmo com REPITA...ATÉ que peça uma senha até o usuário acertar (compare com uma senha fixa definida no início do algoritmo).
  4. Pegue o exemplo de loop infinito da seção 6 e corrija-o, adicionando a linha que faltava.
  5. Desenhe o fluxograma de um REPITA...ATÉ, seguindo o padrão do diagrama da Fig. 1 mas com o losango depois do bloco de processo em vez de antes.