Contar, Somar
e Parar
Os três padrões fundamentais para dominar o while: contador, acumulador e sentinela.
Os três padrões fundamentais para dominar o while: contador, acumulador e sentinela.
Na aula passada você aprendeu o que é o while e como evitar loop infinito. Hoje vai dominar os 3 padrões que aparecem em quase todo programa real.
Usar um contador para saber quantas vezes o laço rodou
Usar um acumulador para somar valores a cada iteração
Usar uma sentinela para encerrar a leitura na hora certa
Combinar tudo em um programa real: total da compra com "sair"
Você está no caixa rápido do supermercado. A operadora passa cada produto:
Os 3 padrões que vamos ver hoje estão todos no mesmo cupom fiscal.
Variável numérica que conta quantas vezes o laço já foi executado.
+1)Inicialize com 0 antes do laço; some +1 dentro do laço:
algoritmo "Contar"
var
contador: inteiro
inicio
contador <- 0
enquanto contador < 5 faca
escreval("Volta ", contador + 1)
contador <- contador + 1
fimenquanto
fimalgoritmo
contador = 0
while contador < 5:
print("Volta", contador + 1)
contador = contador + 1
# ou: contador += 1
contador += 1 faz a mesma coisa que contador = contador + 1, só que mais curto.
Situação: o caixa rápido tem limite de 10 itens. Conte os itens passados e alerte se passar do limite.
algoritmo "CaixaRapido"
var
contador: inteiro
inicio
contador <- 0
enquanto contador < 10 faca
escreval("Item ", contador + 1)
contador <- contador + 1
fimenquanto
escreval("Limite atingido!")
fimalgoritmo
contador = 0
while contador < 10:
print("Item", contador + 1)
contador += 1
print("Limite atingido!")
Parecido com o contador, mas soma um valor variável a cada iteração — não um número fixo.
O total começa em 0 e a cada iteração recebe total + valor_lido:
algoritmo "Somar3"
var
total, valor: real
contador: inteiro
inicio
total <- 0
contador <- 0
enquanto contador < 3 faca
escreva("Valor: ")
leia(valor)
total <- total + valor
contador <- contador + 1
fimenquanto
escreval("Total: R$ ", total)
fimalgoritmo
total = 0
contador = 0
while contador < 3:
valor = float(input("Valor: "))
total = total + valor
contador += 1
print("Total: R$", total)
Situação: escreva um programa que pede o preço de 3 produtos e mostra o subtotal da compra. Use um acumulador.
algoritmo "Subtotal"
var
total, preco: real
i: inteiro
inicio
total <- 0
i <- 1
enquanto i <= 3 faca
escreva("Preço do produto ", i, ": ")
leia(preco)
total <- total + preco
i <- i + 1
fimenquanto
escreval("Subtotal: R$ ", total)
fimalgoritmo
total = 0
i = 1
while i <= 3:
preco = float(input(f"Preço do produto {i}: "))
total = total + preco
i += 1
print("Subtotal: R$", total)
Um valor especial combinado para marcar o fim da entrada de dados.
-1 → o -1 é a sentinela"sair" → "sair" é a sentinelaLê a primeira mensagem antes do while; dentro do laço, lê a próxima:
algoritmo "Chat"
var
msg: caractere
inicio
escreval("Inicie a conversa (sair p/ encerrar):")
leia(msg)
enquanto msg <> "sair" faca
escreval("Você disse: ", msg)
escreval("Próxima:")
leia(msg)
fimenquanto
escreval("Chat encerrado.")
fimalgoritmo
msg = input("Inicie a conversa (sair p/ encerrar): ")
while msg != "sair":
print("Você disse:", msg)
msg = input("Próxima: ")
print("Chat encerrado.")
…qual variável é o acumulador?
Discutam: qual é a diferença prática entre contador e acumulador?
Missão: construir um programa que lê o valor de cada item da compra e vai somando ao total. O programa deve parar quando o usuário digitar "sair" e então mostrar o total.
O programa precisa:
"sair""sair" encerra o laço).
Declare as variáveis: total e entrada
Inicialize total = 0
Leia a primeira entrada antes do while
Enquanto entrada != "sair": converta p/ número, some ao total, leia próxima
Ao sair do laço, exiba o total da compra
entrada é lida como texto (para comparar com "sair"). Antes de somar, converta para número — em Python com float(entrada); em VisualG com caracpnum(entrada).
algoritmo "TotalDaCompra"
var
total: real
entrada: caractere
inicio
total <- 0
escreval("Valor do item (sair p/ encerrar):")
leia(entrada)
enquanto entrada <> "sair" faca
total <- total + caracpnum(entrada)
escreval("Próximo item (sair p/ encerrar):")
leia(entrada)
fimenquanto
escreval("Total da compra: R$ ", total)
fimalgoritmo
total = 0
entrada = input("Valor do item (sair p/ encerrar): ")
while entrada != "sair":
total = total + float(entrada)
entrada = input("Próximo item (sair p/ encerrar): ")
print(f"Total da compra: R$ {total:.2f}")
entrada serve para comparar com "sair" e para virar valor — é o padrão "ler antes, ler dentro" unindo acumulador + sentinela.
caractere para comparar com "sair", converter antes de somarAtividades práticas avançadas — você vai criar programas completos juntando decisão (if) + repetição (while).
Dos três padrões (contador, acumulador, sentinela), qual fez mais sentido e qual ainda está embaralhado pra você?
Missão: construir uma calculadora que lê quantas notas o usuário quiser e mostra a média da turma. O programa deve parar quando o usuário digitar -1.
O programa precisa:
-1Declare 4 variáveis: soma, qtd, nota, media
Inicialize soma=0 e qtd=0
Leia a primeira nota antes do while
Enquanto nota != -1: acumule, conte, leia próxima
Se qtd > 0: calcule soma/qtd e exiba
-1 de cara, qtd fica 0. Sempre proteja a divisão com um se qtd > 0.
algoritmo "CalculadoraDeMedia"
var
soma, nota, media: real
qtd: inteiro
inicio
soma <- 0
qtd <- 0
escreval("Nota (-1 p/ encerrar):")
leia(nota)
enquanto nota <> -1 faca
soma <- soma + nota
qtd <- qtd + 1
escreval("Próxima (-1 p/ encerrar):")
leia(nota)
fimenquanto
se qtd > 0 entao
media <- soma / qtd
escreval("Total: ", qtd)
escreval("Média: ", media)
senao
escreval("Nenhuma nota inserida.")
fimse
fimalgoritmo
soma = 0
qtd = 0
nota = float(input("Nota (-1 p/ encerrar): "))
while nota != -1:
soma = soma + nota
qtd += 1
nota = float(input("Próxima (-1 p/ encerrar): "))
if qtd > 0:
media = soma / qtd
print("Total:", qtd)
print(f"Média: {media:.2f}")
else:
print("Nenhuma nota inserida.")