Capítulo 09: Laço Pré-Testado (ENQUANTO / While Loop)
🎯 Objetivo da Aula
No gerenciamento logístico, processar uma única caixa por vez manualmente é inviável. Quando um caminhão descarrega dezenas ou centenas de paletes na esteira, o software precisa repetir as instruções de leitura e pesagem continuamente até que a carga seja finalizada.
Nesta aula, você aprenderá a:
- Compreender o conceito de Estrutura de Repetição (Loop / Laço).
- Dominar a sintaxe do laço pré-testado
enquanto (condicao) { ... }(While Loop). - Utilizar Contadores (
i++) e Acumuladores (soma += valor). - Aplicar a técnica do Valor Sentinela para interrupção de loops e prevenção de Loop Infinito.
📥 Material de Apoio e Código-Fonte da Aula:
- 📄 Arquivo Pronto (.por): Baixar Capitulo_09.por (abra diretamente no Portugol Studio)
- 📦 Exercícios Separados (.zip): Baixar Capitulo_09.zip
🏢 O Cenário Prático (Seu Desafio)
Situação: O operador da esteira de descarga do galpão da FastLog precisa registrar o peso de cada pacote que passa pela balança automática. O operador não sabe quantas caixas o caminhão trouxe. Ele deseja digitar os pesos um a um e, quando terminar a carga, digitar 0.0 para sinalizar o fim da sessão.
Missão: Você deve construir o Conferente de Esteira FastLog, recebendo os pesos continuamente, acumulando o Peso Total e a Quantidade de Caixas, calculando a Média de Peso por Caixa ao final da operação.
🧠 Fundamentos: O Laço Pré-Testado enquanto
1. Como Funciona o enquanto?
O laço é chamado de pré-testado porque o computador avalia a condição ANTES de executar as instruções:
- Se for
verdadeiro, ele entra nas chaves{ }, executa o bloco e retorna para o topo para testar novamente. - Assim que for
falso, ele pula fora do bloco e continua o programa.
graph TD
A[Início: Ler Primeiro Peso] --> B{Peso != 0.0?}
B -- "Sim (verdadeiro)" --> C["1. Acumular Peso Total (soma += peso)<br/>2. Incrementar Contador (qtd++)<br/>3. Ler Próximo Peso"]
C --> B
B -- "Não (falso / Sentinela)" --> D["Exibir Relatório Final:<br/>Total de Caixas e Peso Acumulado"]
D --> E[Fim do Programa]
style B fill:#8e44ad,stroke:#fff,color:#fff
style C fill:#2980b9,stroke:#fff,color:#fff
style D fill:#27ae60,stroke:#fff,color:#fff2. Contadores vs Acumuladores
| Tipo de Variável | O que faz? | Inicialização Típica | Sintaxe C / Portugol |
|---|---|---|---|
| Contador | Conta a quantidade de repetições (soma +1). | inteiro cont = 0 | cont++ ou cont = cont + 1 |
| Acumulador | Soma valores variáveis a cada ciclo (dinheiro, peso). | real total = 0.0 | total += valor |
3. Prevenindo o Loop Infinito!
Um loop infinito ocorre quando a condição do enquanto nunca se torna falsa, travando a máquina.
📖 Exemplo Guiado: Leitor de Esteira com Sentinela
Código do Programa:
🛠️ Prática Obrigatória 1: Somador de Fretes com Sentinela Negativo
Passo 1: O Desafio
Crie um programa auditoria_fretes.por que receba os valores de fretes faturados. O programa deve parar quando o operador digitar qualquer valor negativo (ex: -1.0).
Ao final, o programa deve exibir:
- A quantidade total de fretes faturados.
- O total bruto arrecadado.
✅ Resultado Esperado (Prática 1):
🛠️ Prática Obrigatória 2: Monitor de Temperatura da Câmara Fria
Crie um programa alarme_temperatura.por que leia a temperatura de um sensor continuamente. Enquanto a temperatura estiver segura (entre -20.0 e -10.0 graus), continue lendo e exibindo ">> Temperatura Estável". Se o operador digitar uma temperatura fora desse intervalo, encerre o laço imediatamente e exiba: "[ALARME ACIONADO] Risco de Descongelamento!".
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_09_SeuNome_SeuSobrenome.por. - Teste o laço com sentinelas para garantir que ele não trava em loop infinito.
- No Microsoft Teams, envie na tarefa “Portugol 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. Servidores Web e sistemas operacionais mantêm laços while(servidorRodando) em execução contínua para escutar requisições de rede e eventos do mouse/teclado.
🔥 Desafio de Fixação: Simulador de Financiamento de Frota
Crie um programa que receba o saldo devedor de um caminhão (ex: R$ 80.000,00) e o valor 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 foram necessários para quitar o veículo.
🔑 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 o capítulo? - Qual é a diferença fundamental entre um Contador e um Acumulador, segundo a tabela do capítulo?
- Dê um exemplo de sintaxe de inicialização típica de um Contador e de um Acumulador, conforme a tabela do capítulo.
- O que causa um Loop Infinito, segundo o exemplo de código incorreto mostrado no capítulo?
- O que é necessário adicionar dentro do laço para evitar um Loop Infinito, segundo o exemplo de código corrigido?
- Com base no Cenário Prático e no Exemplo Guiado, qual valor sinaliza o fim da leitura de pesos na esteira (o “Valor Sentinela”)?
- Na Prática Obrigatória 1 (Somador de Fretes com Sentinela Negativo), que valor o operador deve digitar para encerrar a leitura de fretes?
- Na Prática Obrigatória 2 (Monitor de Temperatura da Câmara Fria), qual é a faixa de temperatura considerada segura?
- Segundo o Checkpoint de Lógica, a que conceito (usado por servidores web e sistemas operacionais) o laço
enquantocontínuo é comparado? - No Exemplo Guiado (Leitor de Esteira com Sentinela), qual comando é repetido dentro do laço a cada iteração, logo antes de o laço testar a condição novamente?