Laços no pseudocódigo essencial: ENQUANTO, REPITA ATÉ e PARA

Capítulo 8

Tempo estimado de leitura: 7 minutos

+ Exercício

O que é um laço (loop) e por que ele precisa de três partes

Um laço descreve repetição controlada: um bloco de passos é executado várias vezes até que uma condição de parada seja atingida. Para manter o pseudocódigo previsível e evitar erros, descreva laços sempre com três elementos explícitos:

  • Inicialização: define o estado inicial (ex.: contador, acumulador, posição).
  • Condição de parada: define quando o laço termina (ex.: enquanto ainda há itens, até encontrar algo, até validar).
  • Atualização: garante progresso a cada iteração (ex.: incrementar contador, avançar índice, ler nova tentativa).

Quando um desses elementos fica implícito, aumenta o risco de laço infinito ou de resultados incorretos.

ENQUANTO (pré-teste): verifica antes de executar

No laço ENQUANTO, a condição é testada antes de entrar no bloco. Se a condição já for falsa no início, o bloco pode não executar nenhuma vez.

Sintaxe consistente (pré-teste)

INICIALIZE estado
ENQUANTO (condição_de_continuação) FAÇA
    passos
    ATUALIZE estado
FIM ENQUANTO

Note que a condição costuma ser de continuação (ex.: “enquanto ainda não terminou”). Se preferir condição de parada, deixe isso claro com negação bem legível.

Passo a passo prático: contador simples (1 a N)

Objetivo: escrever os números de 1 até N.

Continue em nosso aplicativo e ...
  • Ouça o áudio com a tela desligada
  • Ganhe Certificado após a conclusão
  • + de 5000 cursos para você explorar!
ou continue lendo abaixo...
Download App

Baixar o aplicativo

  1. Inicialização: i ← 1
  2. Condição de continuação: i ≤ N
  3. Atualização: i ← i + 1
i ← 1
ENQUANTO (i ≤ N) FAÇA
    ESCREVA i
    i ← i + 1
FIM ENQUANTO

Acumulação: somar valores até um limite

Acumuladores precisam de inicialização explícita e atualização em toda iteração.

soma ← 0
i ← 1
ENQUANTO (i ≤ N) FAÇA
    soma ← soma + i
    i ← i + 1
FIM ENQUANTO
ESCREVA soma

Busca: procurar um valor em uma lista

Em buscas, é comum usar uma variável booleana para indicar se encontrou e um índice para avançar. Isso torna a condição de parada clara.

pos ← 1
encontrou ← FALSO
ENQUANTO (pos ≤ tamanho E NÃO encontrou) FAÇA
    SE (lista[pos] = alvo) ENTÃO
        encontrou ← VERDADEIRO
    SENÃO
        pos ← pos + 1
    FIM SE
FIM ENQUANTO
SE (encontrou) ENTÃO
    ESCREVA "Encontrado na posição ", pos
SENÃO
    ESCREVA "Não encontrado"
FIM SE

Repare que a atualização do índice ocorre apenas quando não encontra; isso evita avançar além do necessário e mantém o estado coerente.

REPITA ATÉ (pós-teste): executa pelo menos uma vez

No laço REPITA ATÉ, o bloco executa primeiro e a condição é testada ao final. Ele é ideal quando você precisa executar uma ação ao menos uma vez, como pedir uma entrada e validar.

Sintaxe consistente (pós-teste)

REPITA
    passos
    ATUALIZE estado (se necessário)
ATÉ (condição_de_parada)

Aqui a condição costuma ser de parada (ex.: “até estar válido”). Isso reduz negações e deixa a intenção mais direta.

Passo a passo prático: validação de entrada (faixa)

Objetivo: ler uma nota entre 0 e 10. A leitura deve acontecer ao menos uma vez.

  1. Executar: ler a nota.
  2. Parar quando: 0 ≤ nota ≤ 10.
REPITA
    LEIA nota
ATÉ (nota ≥ 0 E nota ≤ 10)
ESCREVA "Nota válida: ", nota

Validação com regra composta: senha com tentativas limitadas

Quando há limite de tentativas, explicite o contador e a condição de parada combinando “sucesso” ou “esgotou tentativas”.

tentativas ← 0
autenticado ← FALSO
REPITA
    LEIA senha
    tentativas ← tentativas + 1
    SE (senha = senha_correta) ENTÃO
        autenticado ← VERDADEIRO
    FIM SE
ATÉ (autenticado OU tentativas = 3)
SE (autenticado) ENTÃO
    ESCREVA "Acesso liberado"
SENÃO
    ESCREVA "Acesso negado"
FIM SE

PARA (contagem): repetição com contador controlado

Use PARA quando você sabe quantas vezes precisa repetir ou quando percorre um intervalo de valores. Ele concentra inicialização, condição e atualização em uma única linha, reduzindo erros de controle.

Sintaxe consistente (contagem)

PARA i DE inicio ATÉ fim PASSO passo FAÇA
    passos
FIM PARA

Regras práticas:

  • Se PASSO for omitido, assuma 1 (mas só omita se isso estiver claro no padrão do seu material).
  • Se inicio > fim e o passo for positivo, o laço não executa; para contagem regressiva, use passo negativo.
  • Evite alterar manualmente o contador i dentro do bloco; isso torna o controle ambíguo.

Passo a passo prático: acumular soma com PARA

soma ← 0
PARA i DE 1 ATÉ N PASSO 1 FAÇA
    soma ← soma + i
FIM PARA
ESCREVA soma

Contagem regressiva

PARA i DE 10 ATÉ 1 PASSO -1 FAÇA
    ESCREVA i
FIM PARA

Percorrer uma lista por índice

PARA pos DE 1 ATÉ tamanho PASSO 1 FAÇA
    ESCREVA lista[pos]
FIM PARA

Como evitar laços infinitos (checklist rápido)

RiscoSinal no pseudocódigoCorreção
Condição nunca mudaCondição depende de variável que não é atualizadaAdicionar/ajustar atualização do estado a cada iteração
Atualização no lugar erradoIncremento só ocorre em um ramo e pode ser puladoGarantir progresso em todos os caminhos ou reestruturar condição
Condição invertidaUso excessivo de negações (NÃO) confusasReescrever como condição de continuação (ENQUANTO) ou de parada (ATÉ) mais direta
Limites incorretosÍndice ultrapassa tamanho ou nunca alcança o fimRevisar início/fim/passo e comparadores (<, ≤, >, ≥)
Entrada não atualizadaValidação repete sem ler novo valorGarantir leitura dentro do laço (geralmente com REPITA ATÉ)

Controles de repetição explícitos: estado, flags e progresso

Para que o leitor entenda por que o laço termina, prefira controles explícitos:

  • Contador: quantas iterações já ocorreram (ex.: tentativas).
  • Acumulador: soma/total parcial (ex.: soma, total, produto).
  • Flag booleana: indica evento (ex.: encontrou, autenticado, valido).
  • Índice/ponteiro: posição atual em uma estrutura (ex.: pos).

Exemplo de laço com dois controles (contador + flag):

pos ← 1
encontrou ← FALSO
ENQUANTO (pos ≤ tamanho E NÃO encontrou) FAÇA
    SE (lista[pos] = alvo) ENTÃO
        encontrou ← VERDADEIRO
    FIM SE
    pos ← pos + 1
FIM ENQUANTO

Neste formato, o progresso é garantido porque pos sempre avança.

Invariantes simples: como descrever o que permanece verdadeiro

Um invariante é uma frase curta que descreve algo que é verdadeiro no início de cada repetição. Ele ajuda a revisar a lógica e identificar atualizações faltando.

Exemplo 1: soma de 1 a i-1 (ENQUANTO)

Invariante: “Antes de cada iteração, soma é a soma dos números de 1 até i-1”.

soma ← 0
i ← 1
ENQUANTO (i ≤ N) FAÇA
    // Invariante: soma = 1 + 2 + ... + (i-1)
    soma ← soma + i
    i ← i + 1
FIM ENQUANTO

Exemplo 2: busca parcial (PARA)

Invariante: “Antes de verificar lista[pos], nenhum elemento nas posições anteriores era o alvo”.

encontrou ← FALSO
PARA pos DE 1 ATÉ tamanho PASSO 1 FAÇA
    // Invariante: se encontrou = FALSO, então alvo não apareceu em 1..(pos-1)
    SE (lista[pos] = alvo) ENTÃO
        encontrou ← VERDADEIRO
    FIM SE
FIM PARA

Exercícios (contadores, acumulação, busca e validação)

1) Contador com ENQUANTO: múltiplos de 3

Escreva um pseudocódigo que mostre todos os múltiplos de 3 entre 3 e N (inclusive). Exija que N seja múltiplo de 3; caso não seja, reduza até o múltiplo anterior (ex.: 20 vira 18) antes de iniciar o laço.

2) Acumulação com PARA: média de valores

Leia Q números e calcule a média. Use PARA para controlar a quantidade de leituras e um acumulador para a soma. Inclua uma variável para contar quantos valores foram lidos (mesmo que seja igual a Q) e escreva um invariante simples.

3) Busca com ENQUANTO: primeira ocorrência

Dada uma lista e um valor alvo, encontre a posição da primeira ocorrência. Se não existir, retorne 0. Use pos e uma flag encontrou. Garanta que o índice sempre avance e escreva a condição de parada de forma legível.

4) Validação com REPITA ATÉ: intervalo e paridade

Leia um número inteiro X até que ele seja par e esteja no intervalo [10, 100]. Use REPITA ATÉ com condição de parada direta (sem dupla negação). Depois escreva X.

5) Evitando loop infinito: depuração de pseudocódigo

O pseudocódigo abaixo pretende somar números até que a soma ultrapasse 100, mas pode entrar em laço infinito. Identifique o problema e reescreva com inicialização, condição e atualização corretas.

soma ← 0
ENQUANTO (soma ≤ 100) FAÇA
    LEIA valor
    // falta algo aqui
FIM ENQUANTO

Agora responda o exercício sobre o conteúdo:

Em qual situação o laço REPITA ATÉ é a escolha mais adequada em pseudocódigo essencial?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

No REPITA ATÉ, o bloco executa primeiro e a condição é verificada no final, garantindo ao menos uma execução. Isso é ideal para leitura e validação de entrada.

Próximo capitúlo

Controle de fluxo no pseudocódigo essencial: interrupções, continuação e retorno

Arrow Right Icon
Capa do Ebook gratuito Pseudocódigo Essencial: Um Padrão Simples para Descrever Soluções
53%

Pseudocódigo Essencial: Um Padrão Simples para Descrever Soluções

Novo curso

15 páginas

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.