VisuAlg Web

Laço ENQUANTO no Portugol e VisuAlg

Entenda ENQUANTO no VisuAlg com soma de valores, teste de condição, atualização do contador e prevenção de laços infinitos.

O que fazer quando não sabemos quantas voltas precisamos dar? (Ex: "fique esperando no ponto enquanto o ônibus não chega"). O laço enquanto resolve isso. Ele repete o bloco de código indefinidamente enquanto sua condição for VERDADEIRA.

Exemplo de códigoVisuAlg
algoritmo "ContadorManual"

var
  contador: inteiro

inicio
  contador <- 1

  enquanto (contador <= 5) faca
    escreval("Valor atual: ", contador)
    // No Enquanto, NÓS devemos aumentar a variável, senão vira um loop infinito!
    contador <- contador + 1
  fimenquanto

fimalgoritmo

A principal característica do enquanto é que ele faz o teste antes de rodar o código. Ou seja, se a condição for falsa logo de cara, o código não será executado nenhuma vez. Isso é perfeito para criar sistemas de bloqueio de senhas.

Exemplo de códigoVisuAlg
algoritmo "BloqueioSenha"

var
  senha: caractere

inicio
  senha <- ""

  enquanto (senha <> "secreta123") faca
    escreva("Digite a senha para acessar: ")
    leia(senha)
  fimenquanto

  escreval("Acesso Permitido! Bem-vindo.")

fimalgoritmo
Exercício Prático: Crie um programa que vá somando valores digitados pelo usuário enquanto o número digitado for maior que zero.

Erros comuns e escolha do laço

A condição é testada antes do corpo, portanto o laço pode executar zero vezes. Atualize a variável testada ou leia um novo valor dentro do bloco: sem essa mudança, a condição pode permanecer verdadeira indefinidamente.

Compare as três estruturas no guia de estruturas de repetição e pratique os exercícios de repetição.

Exemplo explicado: somar de 1 até um limite

O laço verifica a condição antes de cada volta. Neste exemplo, soma acumula os valores e contador controla quando parar. Inicialize ambos antes da repetição: a soma deve conservar o resultado das voltas anteriores.

Exemplo de códigoVisuAlg
algoritmo "SomarComEnquanto"
var
  contador, limite, soma: inteiro
inicio
  contador <- 1
  limite <- 4
  soma <- 0
  enquanto contador <= limite faca
    soma <- soma + contador
    contador <- contador + 1
  fimenquanto
  escreval("Soma: ", soma)
fimalgoritmo
Estado depois de cada soma
Valor somadoSoma acumuladaPróximo contador
112
233
364
4105

A saída é Soma: 10. Ao testar novamente, o contador vale 5 e a condição é falsa. Se você trocar o limite por zero, o bloco não será executado e a soma continuará zero.

Como evitar repetição infinita

Remover a atualização do contador mantém a condição verdadeira neste programa. Use o botão Parar se estiver experimentando essa alteração. Verifique qual variável altera a condição e em que linha ela muda. Compare esse teste inicial com REPITA ATÉ e acompanhe os valores com depuração e teste de mesa.