Capítulo 10: Laço Pós-Testado (FACA-ENQUANTO / Do-While Loop)
🎯 Objetivo da Aula
Em muitas aplicações reais, precisamos que uma ação aconteça obrigatoriamente pelo menos uma vez antes de qualquer teste. É o caso clássico de um Menu Principal de Sistema (o menu precisa ser desenhado na tela para o usuário escolher o que fazer) ou de uma Tela de Senha (o sistema precisa pedir a digitação antes de avaliar se a senha está correta).
Nesta aula, você aprenderá a:
- Compreender o funcionamento do Laço Pós-Testado (
faca ... enquanto). - Dominar a sintaxe e a semântica de Condição de Permanência (continua rodando ENQUANTO a condição for verdadeira).
- Construir Menus de Navegação Contínuos que só encerram quando o usuário digita a opção
0. - Implementar rotinas de Validação de Entrada e Limite de Tentativas de Acesso.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.por): Baixar Capitulo_10.por (abra diretamente no Portugol Studio)
- 📦 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 dar entrada e saída em paletes de mercadorias sem que o programa feche após uma única operação. O programa só deve fechar quando o operador escolher explicitamente a opção 0 (Sair). Além disso, o acesso ao terminal exige autenticação por senha de 4 dígitos.
Missão: Você deve construir o Painel Operacional Contínuo FastLog, integrando o laço faca-enquanto com menu de navegação e autenticação de segurança.
🧠 Fundamentos: O Laço Pós-Testado faca-enquanto
1. enquanto (Pré-testado) vs faca-enquanto (Pós-testado)
| Característica | Laço enquanto (While) | Laço faca-enquanto (Do-While) |
|---|---|---|
| Momento do Teste | No início (antes de rodar o bloco). | No final (depois de rodar o bloco). |
| Garantia de Execução | Pode rodar 0 vezes (se a condição for falsa logo de cara). | Garantido rodar pelo menos 1 vez. |
| Ponto e Vírgula Final | Não usa. | Opcional/Recomendado ao final do enquanto(condicao). |
| Uso Ideal | Leitura de arquivos e sentinelas. | Menus de navegação e validação de senhas. |
graph TD
A[Início do Bloco faca] --> B[1. Exibir Menu de Opções]
B --> C[2. Ler Opção do Usuário]
C --> D[3. Processar Ação com Escolha]
D --> E{enquanto: opcao != 0?}
E -- "verdadeiro (Continua no Loop)" --> B
E -- "falso (opcao == 0 -> Encerra)" --> F[Fim do Programa]
style B fill:#2980b9,stroke:#fff,color:#fff
style D fill:#8e44ad,stroke:#fff,color:#fff
style E fill:#f39c12,stroke:#fff,color:#fff
style F fill:#27ae60,stroke:#fff,color:#fff2. A Sintaxe no Portugol Studio
📖 Exemplo Guiado: Menu Contínuo de Almoxarifado
Código do Programa:
🛠️ Prática Obrigatória 1: Autenticação de Operador com 3 Tentativas
Passo 1: O Desafio
Crie um programa autenticacao.por que solicite a senha de acesso (a senha correta é 1234).
O laço faca-enquanto deve continuar pedindo a senha enquanto a senha estiver errada E o número de tentativas for menor que 3.
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Validação Defensiva de Peso de Carga
O operador precisa digitar o peso de um caminhão. O peso deve ser maior que 0 e menor ou igual a 30.000 kg.
Crie um programa validacao_peso.por com faca-enquanto que force o operador a redigitar o peso caso ele insira um valor inválido.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_10_SeuNome_SeuSobrenome.por. - Teste o menu com várias operações consecutivas garantindo que ele só encerra no
0. - No Microsoft Teams, envie na tarefa “Portugol Cap 10 - Laço Faça-Enquanto”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de dominar o padrão REPL (Read-Eval-Print Loop). Todos os terminais interativos (como Python CLI, Node REPL e consoles de bancos de dados SQL) rodam sobre um laço pós-testado contínuo.
🔥 Desafio de Fixação: Caixa Rápido de Abastecimento
Crie um programa com faca-enquanto que simule a bomba de abastecimento do pátio:
- Menu:
1 - Abastecer 50L (R$ 290.00),2 - Abastecer 100L (R$ 580.00)e0 - Fechar Conta. - O programa acumula os abastecimentos e exibe o comprovante final ao sair.
🔑 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.
- Qual é a principal diferença entre o laço
enquanto(pré-testado) e o laçofaca-enquanto(pós-testado), segundo a tabela comparativa do capítulo? - Quantas vezes o bloco de um laço
faca-enquantoé garantido a executar, no mínimo? - Na sintaxe
faca { ... } enquanto (condicao), o teste da condição ocorre antes ou depois do bloco de instruções? - Segundo a tabela comparativa do capítulo, para que tipo de situações (dois exemplos citados) o laço
faca-enquantoé mais indicado? - No Exemplo Guiado (Menu Contínuo de Almoxarifado), qual opção do menu o usuário deve escolher para encerrar o programa?
- Na Prática Obrigatória 1 (Autenticação de Operador), qual é a senha correta de acesso e quantas tentativas o operador tem no máximo?
- Na Prática Obrigatória 2 (Validação Defensiva de Peso de Carga), qual é a faixa de peso considerada válida para o caminhão?
- Segundo o Checkpoint de Lógica, a que padrão de terminal interativo (sigla em inglês) o laço pós-testado contínuo é comparado?
- Dê dois exemplos, citados no Checkpoint de Lógica, de terminais interativos reais que seguem esse padrão.
- Segundo o Objetivo da Aula, por que uma Tela de Senha é um exemplo típico de uso do laço pós-testado (o que precisa acontecer antes de qualquer teste da condição)?