01 / 14
Lógica de Programação · Sem 8 · Aula 1/2

O Laço
Infinito

Quando o computador precisa repetir uma ação enquanto algo for verdade — e o que dá errado quando esquecemos de parar.

ProfessorGuilherme Antunes CursoEnsino Médio Técnico — Informática Duração100 minutos (2 aulas)
02 / 14
Objetivos da Aula

Ao final, você será capaz de.

01

Entender o que é uma estrutura de repetição (laço/loop)

02

Diferenciar laços fixos (for) de condicionais (while)

03

Escrever um while em Visualg e em Python

04

Identificar e corrigir loops infinitos com depuração

03 / 14
Introdução · Analogia

Playlist no Shuffle 🎵

Imagine o Spotify no modo aleatório:

  • Ele toca uma música, depois outra, depois outra…
  • Ninguém disse quantas tocar — pode ser 5, pode ser 500
  • Ele só para quando você aperta pausa

Isso é um laço condicional: continua enquanto uma condição for verdade. Em programação, chamamos de while.

Tocando agora…3:42
Música 1tocou
Música 2tocou
Música 3tocou
Música Nenquanto != pause
04 / 14
Conceito Principal

O que é uma estrutura de repetição?

É um recurso que executa um bloco de código várias vezes, enquanto uma condição booleana for verdadeira. Quando a condição vira falsa, o laço termina.

SEM LAÇO

Repetir na mão

print(1)
print(2)
print(3)
# ... e assim até 100? 😱
COM LAÇO

Deixar o computador repetir

n = 1
while n <= 100:
    print(n)
    n = n + 1
❓ Pergunta

E se eu pedir para somar 1+2+3+…+1000 sem usar laço — quanto tempo leva pra escrever?

05 / 14
Dois Tipos de Laço

Fixo vs Condicional

FOR · LAÇO FIXO

Sei quantas vezes vou rodar

Usado quando o número de repetições já é conhecido (um contador ou uma coleção).

for i in range(5):
    print("Volta", i)
WHILE · LAÇO CONDICIONAL

Rodo enquanto algo for verdade

Usado quando não sabemos o número de repetições — depende de uma condição.

resposta = ""
while resposta != "sair":
    resposta = input("> ")

Hoje vamos focar no while.

06 / 14
Sintaxe

Como se escreve um while?

A mesma lógica em Visualg (pseudocódigo) e em Python:

algoritmo "ContaAteTres"
var
   n: inteiro
inicio
   n <- 1
   enquanto n <= 3 faca
      escreval("Volta ", n)
      n <- n + 1
   fimenquanto
fimalgoritmo
n = 1

while n <= 3:
    print("Volta", n)
    n = n + 1
🧠 Anatomia: uma condição (n <= 3) e algo dentro do laço que muda essa condição (n = n + 1). Sem isso, o laço nunca para.
07 / 14
Aplicações

Onde o while aparece de verdade?

🎮

Jogos

O loop principal do jogo roda enquanto vida > 0. A cada frame: lê controle, atualiza tela, verifica colisão.

🌐

Servidores

Um servidor web fica escutando conexões indefinidamente — enquanto não for desligado.

⌨️

Leitura de dados

Lê linha após linha de um arquivo até encontrar o fim, ou pede entradas do usuário até ele digitar "sair".

Em comum: ninguém sabe de antemão quantas voltas o laço vai dar.

08 / 14
Cuidado

Loop Infinito 🔥

Acontece quando a condição nunca fica falsa. O programa trava e roda para sempre.

algoritmo "Bug"
var
   n: inteiro
inicio
   n <- 1
   enquanto n <= 3 faca
      escreval("Olá!")
      // esqueci de mudar o n 😱
   fimenquanto
fimalgoritmo
n = 1

while n <= 3:
    print("Olá!")
    # esqueci de mudar o n 😱
⚠️ Cuidado: sempre que você escreve um while, garanta que algo dentro dele muda a variável da condição.
09 / 14
Mão na massa · Prática

🟢 Praticar: Contagem Regressiva

Fácil

Situação: simule a contagem regressiva de um foguete. Mostre 5, 4, 3, 2, 1 e depois "Lançar!".

algoritmo "Foguete"
var
   contador: inteiro
inicio
   contador <- 5
   enquanto contador > 0 faca
      escreval(contador)
      contador <- contador - 1
   fimenquanto
   escreval("Lançar!")
fimalgoritmo
contador = 5

while contador > 0:
    print(contador)
    contador = contador - 1

print("Lançar!")
10 / 14
Técnica do Detetive

Como descobrir o que está errado?

A forma mais simples de depurar um while é fazer ele contar pra você o que está acontecendo em cada volta. Adicione uma linha de impressão dentro do laço:

enquanto contador > 0 faca
   escreval("Contando ", contador)
   escreval("DEBUG: contador=", contador)
fimenquanto
while contador > 0:
    print("Contando", contador)
    print(f"DEBUG: contador={contador}")
🔍 Regra do detetive: se a variável da condição não muda entre as voltas do DEBUG, achou o bug — falta atualizá-la dentro do laço.
11 / 14
Mão na massa · Crie do zero

🟡 Jogo da Adivinhação 🎯

Médio

Situação: você vai criar um mini-Akinator! O programa "pensa" num número secreto (você escolhe — ex: 7). O usuário digita palpites e, enquanto errar, o programa pede outro. Quando acertar, celebra com "Acertou! 🎉".

Passo a passo — abra o Visualg / VS Code e digitem:

  • Crie a variável numero_secreto com o valor que você escolher
  • Crie palpite com um valor inicial diferente do segredo (para o while começar)
  • Faça um while com a condição palpite ≠ numero_secreto
  • Dentro do laço, peça o palpite com leia / input
  • Fora do laço, imprima a mensagem de vitória
algoritmo "Adivinha"
var
   numero_secreto, palpite: inteiro
inicio
   numero_secreto <- 7
   palpite <- 0
   enquanto ... faca
      escreva("Seu palpite: ")
      leia(palpite)
   fimenquanto
   escreval(...)
fimalgoritmo
numero_secreto = 7
palpite = 0

while ... :
    palpite = int(input("Seu palpite: "))

print(...)
12 / 14
Resolução · Adivinhação

Solução do jogo

O while roda enquanto o palpite estiver errado. Assim que palpite ficar igual ao segredo, a condição vira falsa e o laço termina:

algoritmo "Adivinha"
var
   numero_secreto, palpite: inteiro
inicio
   numero_secreto <- 7
   palpite <- 0
   enquanto palpite <> numero_secreto faca
      escreva("Seu palpite: ")
      leia(palpite)
   fimenquanto
   escreval("Acertou! 🎉")
fimalgoritmo
numero_secreto = 7
palpite = 0

while palpite != numero_secreto:
    palpite = int(input("Seu palpite: "))

print("Acertou! 🎉")
🧠 Lição: a variável da condição (palpite) precisa existir antes do while, com valor que faça o laço entrar — e precisa mudar dentro dele (via input/leia) para um dia parar.
13 / 14
Combinando Tudo

Senha do Wi-Fi 🔐

Um while pode esperar uma resposta correta do usuário. Aqui o laço só termina quando a senha bate:

algoritmo "WiFi"
var
   senha: caractere
inicio
   senha <- ""
   enquanto senha <> "consa2026" faca
      escreval("Digite a senha:")
      leia(senha)
   fimenquanto
   escreval("✅ Acesso liberado!")
fimalgoritmo
senha = ""

while senha != "consa2026":
    senha = input("Digite a senha: ")

print("✅ Acesso liberado!")
❓ Pergunta

O que muda na condição se eu quiser limitar a 3 tentativas? (Pista: precisa de mais uma variável.)

14 / 14
Encerramento

O que aprendemos hoje

  • Estrutura de repetição → o computador faz por nós o que seria longo demais à mão
  • For × While → fixo (sei quantas) × condicional (rodo enquanto algo for verdade)
  • Sintaxe do while em Visualg e Python
  • Loop infinito → quando a condição nunca fica falsa
  • DEBUG por impressão → técnica do detetive para encontrar o bug
📚 Próxima aula

Os 3 padrões clássicos do while: contador, acumulador e sentinela.

❓ Pergunta de fechamento

Em quais situações do dia a dia você já viu um "loop infinito" acontecendo (no celular, em jogo, no app)?