Módulo 16 - Projeto final, pensando como programador

Parte 3: o relatório que transforma números em decisão

9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 02/07/2026

O que você vai aprender

  • Separar o que roda dentro do laço de leitura do que roda depois dele.
  • Calcular o percentual de cada categoria sobre o total geral.
  • Descobrir a categoria campeã com comparações encadeadas.
  • Montar o programa completo, juntando as três partes testadas.

Dentro do laço se coleta; depois do laço se conta

Existe uma fronteira invisível no meio de todo programa com laço, e o projeto torna essa fronteira concreta: o fim do laço de leitura. Antes dele, o programa está coletando: lê, valida, soma. Depois dele, está contando a história: os acumuladores pararam de mudar e viraram fatos consumados. Calcular um percentual DENTRO do laço seria fotografar uma corrida antes da chegada; o número até existe, mas não representa o resultado. Todo o relatório mora depois da linha final do enquanto, e essa decisão de posição vale mais que qualquer fórmula da aula.

O que um bom relatório mostra? O requisito da aula 1 responde: os quatro totais formatados em reais, o total geral, o percentual de cada categoria e dois extras que transformam número em decisão: a categoria campeã de gastos e um alerta quando alguma passa da metade do orçamento. Repare no salto de qualidade: “você gastou 1700 reais” informa; “70% do seu gasto foi moradia” orienta. A diferença entre os dois é meia dúzia de linhas de lógica, e é essa meia dúzia que separa um programa que imprime números de um programa que ajuda alguém.

🎮 Jogo da aula

Antes ou depois da chegada?

Cada tarefa do organizador pertence a um lado da fronteira. Classifique: ela roda dentro do laço de leitura ou depois dele, no relatório?

Percentuais, a campeã e o alerta

O percentual usa a aritmética do módulo 5: divide a parte pelo todo e multiplica por 100. Com totalMoradia valendo 1200 e totalGeral valendo 1700, a conta (1200 / 1700) * 100 dá aproximadamente 70,6. Um cuidado herdado do módulo 13: se o programa permitisse zero despesas, totalGeral poderia valer zero e a divisão explodiria. A validação da parte 1 (quantidade >= 1, valor > 0) garante totalGeral maior que zero, e é bonito ver uma decisão tomada três aulas atrás protegendo uma conta feita agora.

percentualMoradia <- (totalMoradia / totalGeral) * 100
escreva("Moradia: R$ ", totalMoradia, " (", percentualMoradia, "%)")

// Exemplo com totalMoradia = 1200 e totalGeral = 1700:
// Moradia: R$ 1200 (70.6%)

se totalMoradia > totalGeral * 0.5 então
    escreva("Atenção: moradia passou da metade dos seus gastos.")
fim

Percentual e alerta: a mesma conta se repete para as outras três categorias.

Para a categoria campeã, o raciocínio é o do maior valor do módulo 11, aplicado a quatro variáveis: comece assumindo que a campeã é moradia e guarde o total dela em maiorTotal. Depois compare com alimentação: se totalAlimentacao > maiorTotal, a campeã muda e maiorTotal é atualizado. Repita para transporte e outros. Ao fim das três comparações, a variável campea guarda o nome certo, seja qual for a ordem dos valores. É um torneio de tênis em quatro linhas: o vencedor de cada comparação enfrenta o próximo desafiante.

campea <- "moradia"
maiorTotal <- totalMoradia
se totalAlimentacao > maiorTotal então
    campea <- "alimentação"
    maiorTotal <- totalAlimentacao
fim
se totalTransporte > maiorTotal então
    campea <- "transporte"
    maiorTotal <- totalTransporte
fim
se totalOutros > maiorTotal então
    campea <- "outros"
    maiorTotal <- totalOutros
fim
escreva("Categoria campeã: ", campea)

// Com 1200, 500, 0 e 0: Categoria campeã: moradia

O torneio do maior: cada categoria desafia a líder atual; quem vence assume a ponta.

A montagem final: o organizador inteiro

Hora de juntar as caixas etiquetadas. O esqueleto abaixo mostra o programa completo em forma condensada: a parte 1 dentro do laço PARA (que repete a leitura para cada despesa, como no módulo 10), a parte 2 logo depois das leituras e a parte 3 depois do fim do laço. Abra o Playground de Lógica, monte a versão completa com os trechos das três aulas e rode um teste de mesa com as despesas que você conhece de cor: 1200 em moradia, 300 e 200 em alimentação. O relatório esperado: moradia 70,6%, alimentação 29,4%, campeã moradia, alerta disparado.

// zera os 5 acumuladores (parte 2)
// lê e valida a quantidade (parte 1)
para i de 1 até quantidade faça
    // lê e valida valor e categoria (parte 1)
    // escada de SENÃO SE soma no cofrinho certo (parte 2)
    // totalGeral <- totalGeral + valor (parte 2)
fim
// relatório: totais, percentuais, campeã e alerta (parte 3)

// Três partes, cada uma testada antes da montagem

O esqueleto do organizador: o mapa da aula 1 virou estrutura de programa.

Pare um segundo e olhe para trás: no módulo 1 você classificava instruções vagas e claras. Hoje escreveu um programa com entrada validada, roteamento por decisão, acumuladores e relatório com percentuais. Isso é pensar como programador.

Teste rápido

Por que os percentuais do relatório são calculados DEPOIS do laço de leitura?

Perguntas frequentes

Por que o alerta usa totalGeral * 0.5 em vez de comparar com o percentual?
As duas formas são equivalentes: totalMoradia > totalGeral * 0.5 e percentualMoradia > 50 dizem a mesma coisa. A versão com multiplicação dispensa calcular o percentual antes do alerta. Escolha a que ficar mais legível no seu código e mantenha o padrão.
E se duas categorias empatarem na liderança?
Com as comparações usando > (estritamente maior), o empate mantém a líder que chegou primeiro na ordem do torneio: moradia vence empates contra todas, alimentação contra transporte e outros, e assim por diante. Se quiser anunciar o empate, compare os totais com = depois do torneio. É um refinamento clássico de projeto.
O percentual pode dar um número quebrado feio, tipo 70.588235?
Pode, porque a divisão raramente é exata. Em pseudocódigo basta anotar que o valor seria arredondado na exibição; linguagens reais têm funções prontas de arredondamento para uma casa decimal. O importante é arredondar só na EXIBIÇÃO, mantendo o valor cheio nas contas.
Por que o programa usa PARA no laço principal e não ENQUANTO?
Porque a quantidade de repetições é conhecida antes de começar: o usuário informou quantas despesas vai registrar. Quando o número de voltas é conhecido, o PARA do módulo 10 é a ferramenta natural. O ENQUANTO fica com as repetições de fim imprevisível, como os laços de validação.
Como eu deixaria o relatório em ordem, da categoria que mais gastou para a que menos gastou?
Ordenar quatro valores exige trocas comparadas, uma extensão do torneio do maior que fica trabalhosa com variáveis soltas. Com os totais numa lista (módulo 11), a ordenação vira um algoritmo clássico e elegante. É um desafio excelente para depois do certificado.
O organizador poderia guardar as despesas para consultar depois?
Sim: em vez de só acumular, você guardaria cada valor e categoria em listas (módulo 11) e poderia listar tudo no relatório, filtrar por categoria ou achar a maior despesa individual. O projeto base resume por totais de propósito, para manter o foco nas decisões e acumuladores.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.