Capítulo 09: Laço Pré-Testado (ENQUANTO-FACA / While Loop)
🎯 Objetivo da Aula
Em sistemas logísticos e administrativos, processar um único item por vez manualmente é impensável. Quando um navio ou caminhão descarrega centenas de caixas no armazém, o software precisa repetir o mesmo processo de leitura e pesagem até que a última caixa seja conferida.
Nesta aula, você aprenderá a:
- Compreender o conceito de Estrutura de Repetição (Loop / Laço).
- Dominar o laço pré-testado
enquanto (condicao) faca ... fimenquanto(While Loop). - Utilizar com maestria Variáveis Contadoras (
cont <- cont + 1) e Variáveis Acumuladoras (soma <- soma + valor). - Aplicar a técnica do Valor Sentinela para interrupção de loops e evitar o temido Loop Infinito.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.alg): Baixar Capitulo_09.alg (abra diretamente no VisuAlg 3.0)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_09.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O operador da esteira rolante do galpão da FastLog precisa registrar o peso de todas as caixas que passam pelo sensor da balança. O operador não sabe previamente se o caminhão trouxe 10, 50 ou 200 caixas. Ele deseja digitar os pesos um a um e, quando terminar o lote, digitar o valor 0 (zero) para indicar que a carga terminou.
Missão: Você deve construir o Leitor de Cargas da Esteira, que receba pesos continuamente, acumule o Peso Total e a Quantidade de Caixas, calculando a Média de Peso por Caixa ao final da operação.
🧠 Fundamentos: A Lógica do Laço enquanto-faca
1. O que é um Laço Pré-Testado?
O laço enquanto é chamado de pré-testado porque o computador testa a condição ANTES de executar o bloco de comandos pela primeira vez:
- Se a condição for
VERDADEIRA, ele entra no bloco, executa as instruções e volta para o topo para testar novamente. - Assim que a condição se tornar
FALSA, ele pula fora do bloco e segue para ofimenquanto.
graph TD
A[Início: Ler Primeiro Peso] --> B{Peso <> 0?}
B -- "Sim (VERDADEIRO)" --> C["1. Acumular Peso Total<br/>2. Incrementar Contador (+1)<br/>3. Ler Próximo Peso"]
C --> B
B -- "Não (FALSO / Sentinela Digitado)" --> D["Exibir Relatório:<br/>Total de Caixas e Peso Acumulado"]
D --> E[Fim do Algoritmo]
style B fill:#8e44ad,stroke:#fff,stroke-width:2px,color:#fff
style C fill:#2980b9,stroke:#fff,stroke-width:2px,color:#fff
style D fill:#217346,stroke:#fff,stroke-width:2px,color:#fff2. Contadores vs Acumuladores (A Diferença Vital)
| Tipo de Variável | O que faz? | Inicialização Típica | Exemplo de Código |
|---|---|---|---|
| Contador | Conta quantas vezes um evento ocorreu (soma um valor fixo, geralmente + 1). | cont <- 0 | totalCaixas <- totalCaixas + 1 |
| Acumulador (Somador) | Soma valores variáveis a cada repetição (acumula o total de dinheiro, peso, etc.). | soma <- 0.0 | pesoTotal <- pesoTotal + pesoCaixa |
3. A Regra de Ouro: Prevenindo o Loop Infinito!
Um Loop Infinito ocorre quando a condição do enquanto nunca se torna falsa. O programa trava e consome 100% da CPU.
📖 Exemplo Guiado: Leitor de Esteira com Sentinela
Código do Algoritmo:
✅ Exemplo de Execução no Console (F9):
🛠️ Prática Obrigatória 1: Somador de Fretes com Sentinela Negativo
Passo 1: O Desafio
Crie um algoritmo "Auditoria_Caixa" que solicite sucessivamente os valores dos fretes faturados no dia. O programa deve parar quando o operador digitar qualquer valor negativo (ex: -1).
Ao final, o programa deve exibir:
- A quantidade total de fretes emitidos.
- O faturamento total bruto arrecadado.
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Monitor de Temperatura da Câmara Fria
Crie um algoritmo "Alerta_Camara_Fria" que leia a temperatura de um sensor térmico continuamente. Enquanto a temperatura estiver segura (entre -20.0 e -10.0 graus), o sistema continua lendo e exibindo "Temperatura Estável". Se o operador digitar uma temperatura fora desse intervalo, o laço deve encerrar imediatamente e emitir: "[ALARME ACIONADO] Temperatura Crítica: <valor> °C" seguido de "RISCO DE DESCONGELAMENTO DE CARGA! Equipe de manutenção notificada.".
✅ Resultado Esperado (Prática 2):
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_SeuNome_SeuSobrenome.alg. - Teste o código no VisuAlg garantindo que a parada por sentinela funciona e que o programa não entra em loop infinito.
- No Microsoft Teams, envie na tarefa “VisuAlg Cap 09 - Laço Enquanto”.
- Clique em Entregar (Turn In).
💡 Checkpoint de Lógica & Engenharia de Software
Você acabou de aplicar o conceito de Event Loop e Polling. Sistemas de mensageria em nuvem (como Apache Kafka, RabbitMQ e WebSockets) mantêm laços while(conectado) continuamente ativos na memória do servidor para processar requisições em tempo real.
🔥 Desafio de Fixação: Simulador de Financiamento de Frota
Crie um algoritmo que receba o saldo devedor de um caminhão (ex: R$ 80.000,00) e o valor fixo da parcela mensal (ex: R$ 2.500,00). Use um laço enquanto para abater a dívida mês a mês e exibir quantos meses serão necessários para quitar o veículo integralmente.
🔑 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.
- Por que o laço
enquantoé chamado de “pré-testado”? - Segundo a tabela do capítulo, qual é a diferença entre uma variável Contadora e uma variável Acumuladora (Somadora)?
- O que é um Loop Infinito, e qual erro comum de programação o causa, segundo o exemplo do capítulo?
- O que é um “Valor Sentinela”, e qual valor foi usado como sentinela no Cenário Prático do Leitor de Cargas da Esteira?
- No Exemplo Guiado, por que o comando
leia(pesoCaixa)aparece tanto antes doenquantoquanto dentro do próprio laço? - No Exemplo Guiado, qual fórmula foi usada para calcular a
mediaPesoao final da leitura das caixas? - Na Prática Obrigatória 1 (Somador de Fretes com Sentinela Negativo), qual valor digitado pelo operador deve encerrar o laço de leitura de fretes?
- Na Prática Obrigatória 2 (Monitor de Temperatura da Câmara Fria), qual é a faixa de temperatura considerada seguro/estável para manter o laço em execução?
- Segundo o Checkpoint de Lógica, o que são “Event Loop e Polling”, e quais sistemas de mensageria em nuvem o capítulo cita como exemplo dessa aplicação?
- Segundo as Instruções de Entrega, além da parada por sentinela, o que mais deve ser garantido ao testar o programa antes do envio?