Calculador de Média com Loop While: ciclo completo de desenvolvimento | Professor Comia · 2DS
2DS · SISANO1C1B2S8A4 · Aula 4 · Consolidação

Como integrar while, sentinela, contador e acumulador em um único programa funcional — e por que proteger contra divisão por zero é tão importante quanto calcular a média.

loop while sentinela contador · acumulador divisão por zero VisualG · Python

As três aulas anteriores apresentaram os blocos de construção separadamente: a estrutura do while, os padrões de contador e acumulador, a leitura de sentinela, a técnica de depuração. A aula 4 é diferente. Não há conceito novo. O objetivo é usar tudo ao mesmo tempo, dentro de um único problema real — e descobrir que a integração exige uma camada a mais de cuidado que não aparece quando cada padrão é ensinado isoladamente.

Esse cuidado tem nome: proteção contra divisão por zero. E ele só se torna visível quando o programa precisa calcular uma média sem saber, de antemão, se o usuário vai inserir alguma nota ou encerrar imediatamente com a sentinela.

// o problema que esta aula resolve

Alunos dominam os padrões isolados mas não sabem como integrá-los em um programa completo. A aula 4 propõe exatamente esse desafio: construir o calculador de média da turma do zero — análise, planejamento, codificação e teste — com menos suporte direto do professor e mais autonomia do grupo.

Por que o calculador de média é o problema ideal de consolidação?

O calculador de média de notas exige, simultaneamente, os quatro padrões estudados na semana. Precisa de um acumulador para somar as notas. Precisa de um contador para saber quantas foram inseridas. Precisa de uma sentinela para encerrar sem saber de antemão quantas notas haverá. E precisa do while para repetir a leitura até que a sentinela seja digitada.

Nenhum dos quatro funciona sem os outros. Se o aluno esquece o contador, a divisão é impossível. Se esquece a leitura antecipada, o while não tem o que verificar. Se esquece a progressão, cria um loop infinito. Se esquece a proteção contra divisão por zero, o programa quebra para o caso legítimo em que nenhuma nota é digitada. É um problema pequeno o suficiente para ser resolvido em 45 minutos e completo o suficiente para revelar todas as fragilidades de compreensão restantes.

// programa completo — quatro padrões integrados

O calculador de média com sentinela combina acumulador (soma as notas), contador (registra a quantidade), sentinela (encerra quando o usuário digita -1) e proteção condicional (verifica se qtd_notas > 0 antes de dividir para evitar erro de divisão por zero).

Qual é a arquitetura de variáveis necessárias?

VariávelTipoPadrãoInicializaçãoFunção no programa
nota_digitadarealsentinelaleitura antecipadaRecebe cada nota lida e a sentinela -1
soma_notasrealacumulador:= 0Acumula a soma de todas as notas inseridas
qtd_notasinteirocontador:= 0Conta quantas notas foram inseridas (divisor da média)
mediarealresultadocalculada após o laçoArmazena soma_notas / qtd_notas — só se qtd_notas > 0

Por que verificar se a quantidade de notas é maior que zero?

Se o usuário digitar -1 como primeira entrada — encerrar sem inserir nenhuma nota — o programa terá qtd_notas = 0. Tentar calcular soma_notas / qtd_notas nesse caso resultará em uma divisão por zero, que é um erro em tempo de execução em qualquer linguagem e causa o encerramento abrupto do programa.

A proteção é simples: verificar se qtd_notas > 0 antes de executar a divisão. Se for zero, exibir uma mensagem adequada. Essa verificação não é um detalhe opcional — ela é a diferença entre um programa robusto e um programa que quebra em um caso de uso completamente legítimo.

// erro silencioso mais comum

Programas que calculam médias sem verificar se a quantidade é maior que zero parecem corretos em todos os testes normais. O bug só aparece no caso de teste “vazio” — que é exatamente o caso que o aluno menos lembra de testar. Por isso a fase de testes com cenários-limite não é opcional.

Como estruturar o desenvolvimento em quatro etapas?

// ciclo completo de desenvolvimento
  1. Análise: leia o enunciado e identifique o que o programa precisa fazer. Quais são as entradas? Qual é a saída? Qual é a condição de encerramento? Quais variáveis são necessárias? Escreva as respostas no papel antes de abrir o VisualG.
  2. Planejamento: desenhe o fluxo do algoritmo em linguagem natural. Onde vai a leitura antecipada? O que acontece dentro do laço? O que acontece depois? Onde está a proteção contra divisão por zero?
  3. Codificação: implemente passo a passo, seguindo o planejamento. Não tente escrever o programa completo de uma vez. Construa, execute, observe, ajuste.
  4. Testes: execute os três cenários obrigatórios — caso normal (várias notas), caso com nota decimal, caso vazio (sentinela como primeira entrada). Um programa só está pronto quando passa nos três.

Templates copiáveis — programa completo

CalculadorDeMedia.alg — VisualG · programa completo
algoritmo "CalculadorDeMedia"
Var
   nota_digitada: real          // sentinela — recebe cada nota e o -1
   soma_notas   : real          // acumulador — inicializar com 0
   qtd_notas    : inteiro       // contador — inicializar com 0
   media        : real          // resultado — calculado após o laço
Inicio
   soma_notas := 0
   qtd_notas  := 0

   escreva("Digite uma nota (ou -1 para encerrar): ")
   leia(nota_digitada)                    // leitura antecipada — obrigatória

   enquanto nota_digitada <> -1 faca
      soma_notas := soma_notas + nota_digitada  // acumulador
      qtd_notas  := qtd_notas + 1               // contador
      escreva("Digite uma nota (ou -1 para encerrar): ")
      leia(nota_digitada)                  // progressão — atualiza a sentinela
   fimenquanto

   se qtd_notas > 0 entao                    // proteção contra divisão por zero
      media := soma_notas / qtd_notas
      escreval("Quantidade de notas: ", qtd_notas)
      escreval("Média final: ", media)
   senao
      escreval("Nenhuma nota foi digitada.")
   fimse
Fimalgoritmo
calculador_media.py — Python equivalente
# Calculador de média com sentinela — Python
soma_notas  = 0
qtd_notas   = 0

nota_digitada = float(input("Digite uma nota (ou -1 para encerrar): "))

while nota_digitada != -1:
    soma_notas += nota_digitada        # acumulador
    qtd_notas  += 1                    # contador
    nota_digitada = float(input("Digite uma nota (ou -1 para encerrar): "))

if qtd_notas > 0:                       # proteção divisão por zero
    media = soma_notas / qtd_notas
    print(f"Quantidade de notas: {qtd_notas}")
    print(f"Média final: {media:.2f}")
else:
    print("Nenhuma nota foi digitada.")
// caso real — escola pública, ensino médio técnico · consolidação da semana

O desafio como encerramento de semana: autonomia progressiva

A aula 4 marca uma transição deliberada na dinâmica de sala. Nas aulas 1, 2 e 3, o professor conduziu a construção conceitual com suporte direto — definições, exemplos guiados, código passo a passo. Na aula 4, os alunos constroem o programa com menos intervenção direta e mais suporte por perguntas orientadoras: “Onde você inicializa suas variáveis?”, “Você se lembrou da leitura antecipada?”, “Qual linha atualiza a condição dentro do while?”

Essa progressão de suporte não é acidental. Ela reproduce o modelo de aprendizagem por andaimes — scaffolding — em que o professor reduz gradualmente o apoio à medida que o aluno demonstra competência. O calculador de média é simples o suficiente para ser concluído em 45 minutos por um grupo de cinco alunos, mas exige que todos os conceitos da semana sejam mobilizados ao mesmo tempo.

O mais importante: a fase de testes é tratada como parte integrante do desenvolvimento, não como validação final. Um programa que funciona para o caso normal mas quebra com entrada vazia não está pronto. Essa distinção entre “funciona no meu teste” e “passa em todos os cenários” é um dos critérios mais importantes de qualidade de software — e pode ser ensinado com eficácia em uma aula de escola pública.

// expansão estratégica

Do calculador de média ao pensamento de produto: o que esta semana realmente ensinou

A semana de quatro aulas sobre o loop while não ensinou apenas uma estrutura de controle. Ela ensinou um ciclo de pensamento que se repete em qualquer projeto de software real.

  • No curso técnico (próximas unidades): o mesmo padrão — analisar variáveis, identificar o laço adequado, proteger contra casos-limite, testar múltiplos cenários — se aplica a qualquer programa com entrada de dados variável. Vetores, matrizes, arquivos, APIs: a estrutura de raciocínio é idêntica.
  • No blog (série completa): as quatro aulas formam uma sequência editorial fechada. Aula 1 (while), aula 2 (contadores/sentinela), aula 3 (depuração), aula 4 (consolidação): cada artigo referencia o anterior, construindo autoridade de conteúdo progressivo com SEO estrutural acumulativo.
  • No laboratório maker: o padrão acumulador + contador + sentinela aparece em sistemas de monitoramento de sensores — somar leituras de temperatura ao longo do dia, contar quantas leituras foram feitas, encerrar quando um valor-limite é atingido. O mesmo algoritmo da aula, aplicado a hardware.
  • Como formação docente: a semana completa — quatro aulas com progressão deliberada de suporte, do conceito à prática à consolidação — pode ser estruturada como modelo de sequência didática para o ensino de estruturas de repetição em qualquer escola técnica da rede estadual.
// síntese da semana

While + sentinela + contador + acumulador + proteção contra divisão por zero + ciclo análise-planejamento-codificação-teste: esses não são cinco conceitos separados. São cinco camadas do mesmo problema. O calculador de média de notas integra todas elas em um programa de 20 linhas que qualquer aluno de 2DS pode construir e entender completamente.

Perguntas frequentes sobre o calculador de média com loop while

Por que usar variáveis do tipo real e não inteiro para as notas?

Notas frequentemente têm casas decimais — 7,5 ou 8,3. Se a variável for declarada como inteiro, a parte decimal é truncada automaticamente e a leitura armazena o valor errado. O acumulador soma_notas também deve ser real, pois a soma de notas decimais produz um valor real. A média calculada é sempre real, independentemente das notas serem inteiras ou não.

O que acontece se o usuário digitar -1 como primeira entrada?

O laço while verifica a condição antes de executar o bloco. Se nota_digitada = -1 já na leitura antecipada, o laço não executa nenhuma vez. Ao término, qtd_notas e soma_notas permanecem zero. A proteção se qtd_notas > 0 captura esse caso e exibe a mensagem “Nenhuma nota foi digitada” em vez de tentar dividir zero por zero. Sem essa proteção, o programa encerraria com erro de execução.

Por que a sentinela deve ser -1 e não zero?

Zero é uma nota válida em muitos contextos escolares. Usar zero como sentinela impediria o usuário de registrar uma nota zero legítima. O valor -1 é impossível como nota (notas são no mínimo zero), tornando-o um sentinela seguro. O critério geral de escolha de sentinela é: deve ser um valor impossível como dado válido no domínio do problema.

Qual é a ordem obrigatória das instruções dentro do bloco while?

A ordem é: (1) processar a nota — somar ao acumulador e incrementar o contador; (2) pedir e ler a próxima nota — a progressão que atualiza a condição. Se a leitura vier antes do processamento, a primeira nota lida antes do laço não é processada. Se a leitura vier após o fimenquanto, o laço nunca recebe novo valor e se torna infinito. A ordem correta garante que cada nota inserida seja processada e que a condição seja atualizada a cada iteração.

Como estender o programa para exibir também a maior e a menor nota?

Adicionar duas variáveis auxiliares — maior_nota e menor_nota, ambas do tipo real — inicializadas com a primeira nota lida antes do laço. Dentro do bloco, usar estruturas condicionais para comparar cada nota inserida com o valor atual de maior_nota e menor_nota, atualizando-as quando necessário. Essa extensão é o próximo passo natural para uma atividade avançada ou projeto extraclasse.

Série completa da semana no blog

Quatro aulas, quatro artigos, identidade visual consistente — toda a sequência while documentada com slides, códigos e análises pedagógicas.

professorcomia.com.br

O que a semana realmente ensinou: análise antes de código

A aula 4 fecha um ciclo que começou com a pergunta “como um aplicativo de streaming exibe 10 filmes sem que o programador escreva 10 linhas?” e termina com um grupo de alunos construindo, testando e entregando um programa funcional que lê notas, calcula a média e se protege de erros de execução.

O aprendizado mais duradouro não é a sintaxe do while. É o hábito de analisar o problema antes de abrir o editor, de planejar as variáveis antes de escrevê-las, de testar casos-limite antes de considerar o programa concluído. Esses hábitos não são ensinados por uma única aula — são reforçados por uma sequência didática que os pratica repetidamente, em problemas progressivamente mais completos, até que se tornem reflexo.

// professorcomia.com.br · laboratorio de educacao digital · semana_while=completa · aula_pratica=NAO · pause_e_responda=SIM · codigo: SISANO1C1B2S8A4

Slides da Aula — 2DS · Consolidação da Semana

// Estruturas de Repetição: loop while · Aula 4: Desafio Prático — Média de Notas · SISANO1C1B2S8A4

slide_01 abertura
Frequência — Código: SISANO1C1B2S8A4

>_Estruturas de Repetição — Loop while

Unidade 2 · Componente 1 · Aula 4 de 4 — Consolidação

Aula 4: Desafio Prático — Média de Notas  |  Turma: 2DS

Você consegue, em 45 minutos, usar ao mesmo tempo while, sentinela, contador e acumulador para construir um programa que calcula a média de qualquer quantidade de notas?
slide_02 objetivos

[ ]O que você vai consolidar nesta aula

  • Conceitual: integrar laço while, sentinela, contador e acumulador em um único programa funcional.
  • Procedimental: executar o ciclo completo: análise do problema → planejamento → codificação → testes.
  • Atitudinal: manter persistência diante de erros, propondo soluções com organização lógica e responsabilidade técnica.

// recursos: computador · VisualG · roteiro de atividade prática · caderno

slide_03 problema_gerador

!O calculador de média da turma

Um professor precisa calcular a média de notas de uma turma, mas não sabe de antemão quantos alunos serão. O programa deve aceitar notas uma a uma e encerrar quando o usuário digitar -1, exibindo a quantidade e a média final.

o desafio técnico

Quantas notas serão inseridas? Desconhecido. Como parar? Sentinela -1. Como calcular a média? Soma ÷ quantidade — mas e se ninguém digitar nenhuma nota?

os quatro padrões

soma_notas (acumulador) · qtd_notas (contador) · -1 (sentinela) · while (laço condicional)

Antes de codificar: quais variáveis são necessárias? Quais são os tipos? Quais os valores iniciais?
slide_04 conceito · integracao

>_Arquitetura do programa

CalculadorDeMedia.alg — estrutura geral
// 1. Inicializar acumulador e contador
soma_notas := 0  // acumulador
qtd_notas  := 0  // contador
leia(nota_digitada)               // leitura antecipada

enquanto nota_digitada <> -1 faca
   soma_notas := soma_notas + nota_digitada
   qtd_notas  := qtd_notas + 1
   leia(nota_digitada)             // progressão
fimenquanto

se qtd_notas > 0 entao             // proteção divisão/zero
   media := soma_notas / qtd_notas
fimse
slide_05 conceito · divisao_zero

!Por que verificar se a quantidade é maior que zero?

Se o usuário digitar -1 como primeira entrada, o laço não executa nenhuma vez. Ao final, qtd_notas = 0. Tentar calcular soma / 0 causa erro de execução.

sem proteção

Programa encerra com erro quando nenhuma nota é digitada — caso de uso legítimo tratado como falha.

com proteção

se qtd_notas > 0: calcula e exibe a média. Senão: exibe “Nenhuma nota foi digitada.”

slide_06 registro_caderno

Registre no caderno — passos cruciais

  • Usar variáveis do tipo real: notas e soma podem ter decimais — declarar como real.
  • Ler a primeira nota antes do laço: leitura antecipada — o while precisa de um valor para testar antes de entrar.
  • Inicializar contador e acumulador com 0: antes do laço, sem valor-base correto a soma será incorreta.
  • Verificar se a quantidade é maior que zero: proteção contra divisão por zero — sem ela o programa quebra.
  • Ciclo completo: análise → planejamento → codificação → testes em 3 cenários.
slide_07 pause_e_responda

?Registro — Pause e Responda

Em um programa que calcula a média de várias notas, qual passo é crucial para evitar um erro de “divisão por zero”?
  • AUsar variáveis do tipo real.
  • BLer a primeira nota antes do laço.
  • CVerificar se a quantidade de notas é maior que zero.
  • DInicializar o contador e o acumulador com 0.

// responda primeiro no caderno · depois registre no AVA

slide_08 gabarito

Registro — Resposta correta

Em um programa que calcula a média de várias notas, qual passo é crucial para evitar um erro de “divisão por zero”?
  • AUsar variáveis do tipo real. → necessário para decimais, mas não evita divisão por zero
  • BLer a primeira nota antes do laço. → leitura antecipada, não proteção de cálculo
  • CVerificar se a quantidade de notas é maior que zero.
  • DInicializar o contador e o acumulador com 0. → inicialização correta, mas não impede divisão por zero

Se qtd_notas = 0, tentar calcular soma / 0 causa erro. Verificar antes de dividir é a proteção correta.

slide_09 aplicacao_conceitual

{ }O calculador de média da turma — Desafio

Grupos de até 5 pessoas  ·  45 minutos

Construam do zero o programa calculador de média. Antes de abrir o VisualG, registrem no papel a análise do problema:

  • Quais variáveis são necessárias? Quais são seus tipos e valores iniciais?
  • Onde fica a leitura antecipada? O que acontece dentro do laço?
  • Onde está a proteção contra divisão por zero?
A análise no papel precede o código. Um grupo que codifica sem planejar vai depurar por tentativa e erro — e o tempo de aula é limitado.
slide_10 atividade_avaliativa

Fase de testes — três cenários obrigatórios

Quando o grupo disser “terminei”, a atividade ainda não acabou. Executem os três casos de teste abaixo. O programa só está pronto quando passa nos três.

caso normal

Digitar notas: 7, 8, 9 e depois -1. Esperado: quantidade = 3, média = 8.0.

caso decimal

Digitar notas: 7.5, 8.3, 6.7 e depois -1. Verificar se a média decimal é calculada corretamente.

caso vazio

Digitar -1 como primeira entrada. Esperado: “Nenhuma nota foi digitada.” — sem erro.

// entrega via AVA: código final + resultado dos três testes + análise do problema registrada no papel (pode ser foto).
slide_final síntese · semana_while

Então ficamos assim…

∑ integração

while + sentinela + contador + acumulador integrados em um único programa funcional e flexível.

{ } ciclo

Ciclo completo realizado: análise do problema → planejamento → codificação → testes em três cenários.

! robustez

Antecipação de erros: verificar qtd > 0 antes de dividir — proteção contra divisão por zero.

// semana while — completa

Aula 1: while · Aula 2: contador, acumulador, sentinela · Aula 3: depuração · Aula 4: integração e testes.

// próxima unidade

Exercícios resolvidos de algoritmos — consolidar estruturas sequenciais antes de avançar para vetores.