Capítulo 10: Laço Pós-Testado (REPITA-ATE / Do-While / Until Loop)
🎯 Objetivo da Aula
Em muitas situações práticas de software, precisamos que uma ação aconteça pelo menos uma vez antes de qualquer teste. É o caso clássico de um Menu Principal de Sistema (o menu precisa aparecer na tela para o usuário escolher o que fazer) ou de uma Tela de Login / Senha (o sistema precisa pedir a senha antes de testar se ela está certa).
Nesta aula, você aprenderá a:
- Compreender o funcionamento do Laço Pós-Testado (
repita-ate). - Dominar a Inversão da Lógica de Parada do comando
ate(ele repete enquanto for Falso e encerra quando se torna Verdadeiro). - Construir Menus de Navegação Contínuos que só fecham quando o usuário escolhe a opção “Sair”.
- Implementar rotinas de Validação de Entrada e Limite de Tentativas de Acesso.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.alg): Baixar Capitulo_10.alg (abra diretamente no VisuAlg 3.0)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_10.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O terminal do almoxarifado da FastLog precisa de um sistema contínuo que permita ao conferente registrar entradas e saídas de mercadorias sem que o programa encerre após uma única operação. O programa só deve fechar a janela quando o operador escolher explicitamente a opção 0 (Encerrar Sistema). Além disso, o acesso ao terminal exige uma senha de 4 dígitos com no máximo 3 tentativas.
Missão: Você deve programar o Painel do Operador FastLog, combinando o laço repita-ate com validação de senha e menu de ações contínuo.
🧠 Fundamentos: A Teoria do Laço Pós-Testado
1. enquanto (Pré-testado) vs repita (Pós-testado)
| Característica | Laço enquanto-faca (While) | Laço repita-ate (Until / Do-While) |
|---|---|---|
| Momento do Teste | No início (antes de rodar). | No final (depois de rodar). |
| Garantia de Execução | Pode rodar 0 vezes (se a condição for falsa logo de cara). | Garantido rodar pelo menos 1 vez. |
| Critério de Continuação | Continua rodando enquanto for VERDADEIRO. | Continua rodando enquanto for FALSO (para quando vira VERDADEIRO!). |
| Uso Mais Indicado | Leitura de arquivos, varredura de dados com sentinela. | Menus interativos, validação de senhas e confirmações. |
graph TD
A[Início do Bloco] --> B[1. Exibir Menu de Opções]
B --> C[2. Ler Opção do Usuário]
C --> D[3. Processar Opção com Escolha]
D --> E{ate: Opcao = 0?}
E -- "FALSO (Continua)" --> B
E -- "VERDADEIRO (Encerra)" --> F[Fim do Algoritmo]
style B fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style D fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style E fill:#f39c12,stroke:#fff,stroke-width:2px,color:#fff
style F fill:#217346,stroke:#fff,stroke-width:2px,color:#fff2. A Pegadinha da Condição Invertida no repita-ate!
Atenção Máxima à Condição:
- No
enquanto, você escreve a condição para CONTINUAR:enquanto (opcao <> 0) faca. - No
repita, você escreve a condição para PARAR:ate (opcao = 0).
📖 Exemplo Guiado: Menu Contínuo de Almoxarifado
Código do Algoritmo:
🛠️ Prática Obrigatória 1: Validador de Senha com Limite de Tentativas
Passo 1: O Desafio
Crie um algoritmo "Autenticacao_Operador" que solicite a senha numérica do crachá (a senha correta é 1234).
O laço repita-ate deve rodar até que:
- O usuário acerte a senha (
senha = 1234) OU - O usuário atinja o limite máximo de 3 tentativas.
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Validação de Entrada de Dados (Entrada Blindada)
O operador precisa registrar o peso de uma carga. Por regras físicas, o peso deve ser estritamente maior que 0 e menor ou igual a 30.000 kg.
Crie um algoritmo "Validacao_Peso" com repita-ate que continue exigindo a digitação do peso enquanto o usuário digitar valores negativos, zero ou acima de 30.000 kg.
✅ Resultado Esperado (Prática 2):
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_10_SeuNome_SeuSobrenome.alg. - Teste o menu executando várias operações seguidas e certifique-se de que ele só encerra no
0. - No Microsoft Teams, envie na tarefa “VisuAlg Cap 10 - Laço Repita-Até”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o padrão REPL (Read-Eval-Print Loop). Todos os interpretadores de linguagens modernas (como o terminal interativo do Python, Node.js e SQL CLI) utilizam um laço pós-testado contínuo para manter a sessão do desenvolvedor aberta.
🔥 Desafio de Fixação: Caixa Rápido de Abastecimento
Crie um programa com repita-ate que simule a bomba de diesel do pátio:
- Exibe menu com:
1 - Abastecer 50 Litros (R$ 290,00),2 - Abastecer 100 Litros (R$ 580,00)e0 - Fechar Conta. - O programa vai acumulando os abastecimentos até o motorista pedir para fechar a conta.
🔑 Gabarito de Código Completo
Prática 1:
Prática 2:
Desafio:
📝 Atividade Extra: Questionário de Fixação (Caderno)
Instruções: Responda no caderno, de próprio punho, as 10 perguntas abaixo com base no que foi estudado neste capítulo. Ao concluir, leve o caderno até o professor para correção e visto.
- Segundo a tabela comparativa do capítulo, qual é a diferença no “Momento do Teste” entre o laço
enquanto-facae o laçorepita-ate? - Segundo a tabela do capítulo, quantas vezes o laço
repita-ateé garantido a executar, no mínimo? - Segundo o aviso do capítulo sobre a “Pegadinha da Condição Invertida”, no
repita-atea condição escrita após oaterepresenta o critério para continuar ou para parar o laço? - Segundo a tabela comparativa, para qual tipo de aplicação o laço
repita-ateé mais indicado? - No Exemplo Guiado (Menu Contínuo de Almoxarifado), qual condição foi escrita após o
atepara encerrar o laço do menu? - No Exemplo Guiado, quais são as quatro opções apresentadas no menu do Sistema de Estoque FastLog?
- Na Prática Obrigatória 1 (Validador de Senha com Limite de Tentativas), quais são as duas condições que fazem o laço
repita-ateparar de solicitar a senha? - Na Prática Obrigatória 2 (Validação de Entrada de Dados), qual é a faixa de peso considerada válida para a carga?
- Segundo o Checkpoint de Lógica, o que é o padrão REPL (Read-Eval-Print Loop), e quais exemplos de interpretadores o capítulo cita como aplicação desse padrão?
- Segundo as Instruções de Entrega, ao testar o menu, o que deve ser garantido quanto ao encerramento do programa?