Capítulo 10: Repetição II (REPITA-ATE)

🎯 Objetivo da Aula

Às vezes você precisa que uma ação aconteça pelo menos uma vez antes de verificar se deve repetir. Nesta aula, você aprenderá sobre o laço REPITA-ATE. O objetivo é dominar essa estrutura, muito usada para validação de senhas e menus que precisam aparecer na tela antes da escolha do usuário.


🏢 O Cenário Prático (Seu Desafio)

Situação: O sistema WMS da FastLog exige uma senha de acesso para liberar a saída de veículos. O Problema: O sistema deve pedir a senha e, se estiver errada, continuar pedindo ATÉ QUE a senha correta seja digitada.

Missão: Criar um bloqueio de segurança que se repete até o usuário acertar a credencial.


🧠 Fundamentos: A Teoria Traduzida

1. A Lógica Inversa do REPITA

Diferente do enquanto, o laço repita executa os comandos primeiro e só faz a pergunta no final. Atenção: Ele repete ATÉ QUE a condição seja Verdadeira. (No momento em que a condição for atingida, ele para).

🍜 Exemplo 1: Cotidiano (Sopa)

repita comer_colherada ate (prato_vazio = verdadeiro)

🔐 Exemplo 2: Técnico (Login de Sistema)

repita pedir_senha ate (senha = "1234")

graph TD
    A[Início] --> B[Pedir Token de Acesso]
    B --> C{Token Correto?}
    C -- "Não" --> B
    C -- "Sim" --> D[Sistema WMS Liberado]
    D --> E[Fim]
    
    style C fill:#f39c12,stroke:#fff,color:#fff

2. A Sintaxe no VisuAlg

1
2
3
repita
   // comandos aqui (executa pelo menos uma vez)
ate (condicao_de_parada)

📖 Exemplo Guiado: Validação de Senha

O laço repita executa primeiro e pergunta no fim. Ele repete até que a condição seja verdadeira.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
algoritmo "Validar_Acesso"
var
   senha : caractere
inicio
   repita
      escreva("Digite a senha secreta: ")
      leia(senha)
      se (senha <> "admin123") entao
         escreval(">> SENHA INCORRETA!")
      fimse
   ate (senha = "admin123")
   escreval("=== ACESSO LIBERADO ===")
fimalgoritmo

🛠️ Prática Obrigatória 1: Validador de Pesagem

Crie um algoritmo chamado “Validador_Pesagem”. O programa deve pedir o peso de uma caixa e só parar de pedir quando o peso digitado for maior que 0.

✅ Resultado Esperado

1
2
3
4
Peso: -5
Peso: 0
Peso: 12
Peso registrado: 12.0

🛠️ Prática Obrigatória 2: Validação de Nota Fiscal FastLog

Peça o número de uma nota fiscal. Se o número for zero ou negativo, o programa deve continuar pedindo até que o usuário digite um número válido (maior que zero).

✅ Resultado Esperado

1
2
3
4
NF: 0
NF: -1
NF: 1050
Nota Fiscal Aceita.

🔥 Desafio de Fixação (Opcional): Menu com Opção de Sair

Crie um programa que exiba um menu de opções (1. Iniciar, 2. Ajuda, 0. Sair). Use o laço repita para manter o menu ativo até que o usuário digite a opção 0.


📤 Instruções de Entrega (Microsoft Teams)

Após validar seus códigos:

  1. Lembre-se: o repita para quando a condição é verdadeira.
  2. Salve os arquivos com a extensão .alg (Ex: Atividade_10_SeuNome.alg).
  3. Envie no Microsoft Teams na tarefa “VisuAlg Cap 10 - Laço Repita”.

🔑 Gabarito de Código

Prática 1:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
algoritmo "Validador_Pesagem"
var
   peso : real
inicio
   repita
      escreva("Digite um peso válido (>0): ")
      leia(peso)
   ate (peso > 0)
   escreva("Peso registrado: ", peso)
fimalgoritmo

Desafio:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
algoritmo "MenuSair"
var
   op : inteiro
inicio
   repita
      escreval("1. Iniciar | 2. Ajuda | 0. Sair")
      leia(op)
   ate (op = 0)
   escreval("Fim do programa")
fimalgoritmo