Lógica de Programação · para iniciantes

Do "sei o if, o for e o while"
ao programa que funciona

Você já conhece os comandos. O que trava é juntar tudo. Aqui está um jeito de pensar que transforma qualquer problema simples em código - usando um exemplo real: um programa de vendas de bolos.

O programa que vamos entender

Este programinha pergunta quantos dias durou uma promoção, lê quantos bolos foram vendidos em cada dia, classifica o dia como bom ou fraco e, no final, mostra o total e a média. Vamos usá-lo como exemplo o tempo todo.

const readline = require("readline/promises");
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });

async function main() {
    const dias = Number(await rl.question("Quantos dias de promoção? "));

    if (dias <= 0) {
        console.log("Dados inválidos");
        rl.close();
        return;
    }

    let total = 0;
    const vendas = [];

    for (let dia = 1; dia <= dias; dia++) {
        const bolos = Number(await rl.question(`Dia ${dia}: `));
        total += bolos;
        vendas.push(bolos);

        if (bolos >= 20) {
            console.log("Bom dia de vendas!");
        } else {
            console.log("Dia fraco");
        }
    }
    rl.close();
    console.log("---------------------------------------");
    console.log(`Total de bolos vendidos: ${total}`);
    console.log(`Média por dia: ${(total / dias).toFixed(2)}`);
    for (let i = 0; i < vendas.length; i++) {
        console.log(`Dia ${i + 1}: ${vendas[i]} bolos`);
    }
    console.log("---------------------------------------");
}

main();
Antes de tudo: o problema não é não saber o if ou o for. É não saber por onde começar e como ligar as peças. Quase todo programa simples segue o mesmo esqueleto. Vamos a ele.

0Diga o problema em UMA frase

Antes de qualquer código, diga em voz alta o que o programa faz:

"Quero somar os bolos vendidos em vários dias, dizer se cada dia foi bom ou fraco e, no fim, mostrar o total e a média."

Se você não consegue dizer em uma frase, ainda não entendeu o problema - e nenhum código vai sair direito. Este é o passo mais importante.

1Todo programa tem 3 momentos

Pense sempre nestes três blocos, nesta ordem:

Entradaque dados eu recebo?
→
Processoo que eu faço com eles?
→
Saídao que eu mostro?

No nosso programa dos bolos:

MomentoNo programa dos bolos
Entradaquantos dias, e quantos bolos em cada dia
Processosomar tudo, calcular a média, classificar cada dia
Saídatotal, média e a lista dia a dia
Dica: quase sempre dá para preencher esses três blocos no papel ANTES de escrever qualquer linha de código.

2Escreva o pseudocódigo (português estruturado)

Pseudocódigo é o seu rascunho. Aqui você não se preocupa com ponto e vírgula nem com o nome exato do comando - só com a ordem das ideias:

perguntar quantos dias
se os dias forem inválidos, avisar e parar

começar o total em zero
preparar uma lista vazia para guardar as vendas

para cada dia, do 1 até o número de dias:
    perguntar quantos bolos venderam nesse dia
    somar esse valor ao total
    guardar esse valor na lista
    se vendeu 20 ou mais: dizer "bom dia"
    senão: dizer "dia fraco"

mostrar o total
mostrar a média (total dividido pelos dias)
para cada item da lista, mostrar o dia e a quantidade
Repare: isso já é o programa. O código em JavaScript é só este rascunho "traduzido". Se o rascunho está certo, traduzir é a parte fácil.

3Descubra qual estrutura cada frase pede

Agora a parte que destrava a maioria: olhe cada linha do rascunho e pergunte "que ferramenta isso pede?". Use estes gatilhos:

Quando a frase diz...Você precisa de...
"SE ... ENTÃO ..."if
"SE ... SENÃO ..."if / else
"PARA CADA X, de A até B" (sei quantas voltas)for
"ENQUANTO algo for verdade" (não sei quantas)while
"GUARDAR um valor para usar depois"uma variável
"GUARDAR VÁRIOS valores"uma lista (array)
"SOMAR / CONTAR aos poucos"um acumulador (começa em 0)

Aplicando no nosso rascunho:

O pulo do gato: você não decorou onde usar for ou if. Você deduziu a partir do que a frase pedia. Essa é a habilidade de verdade.

4for ou while? A pergunta que decide

Faça a si mesma uma única pergunta:

"Eu SEI quantas vezes vou repetir ANTES de começar?"
RespostaUseExemplo
SIMfor"repetir uma vez por dia", e eu sei quantos dias
NÃOwhile"repetir até o usuário digitar 0", não sei quando acaba

No programa dos bolos, perguntamos os dias primeiro, então sabemos o número de voltas. Por isso usamos for. Se a regra fosse "continue pedindo bolos até digitar um número negativo", aí seria while.

5O padrão do acumulador (a peça que mais confunde)

Muita gente trava em "como eu vou somando as coisas dentro do for?". O padrão é sempre o mesmo, em três passos:

// 1. ANTES do laço: crie a caixinha com o valor inicial
let total = 0;

for (let dia = 1; dia <= dias; dia++) {
    // 2. DENTRO do laço: atualize a caixinha a cada volta
    total += bolos;
}

// 3. DEPOIS do laço: use o resultado final
console.log(total);
Regra de ouro: o que precisa sobreviver entre uma volta e outra do laço tem que ser declarado fora (antes) do laço. Se você declarar dentro, ele "nasce e morre" a cada volta e você perde a conta. Esse único detalhe resolve metade das travadas.

6Faça o teste de mesa: seja o computador no papel

Antes de rodar, finja que você é o computador. Pegue um exemplo pequeno (2 dias) e anote o valor de cada variável a cada passo:

dias = 2
total = 0 , vendas = [ ]

-- dia 1: usuário digita 25
   total  = 0 + 25 = 25
   vendas = [25]
   25 >= 20 ? SIM  ->  "Bom dia de vendas!"

-- dia 2: usuário digita 10
   total  = 25 + 10 = 35
   vendas = [25, 10]
   10 >= 20 ? NÃO  ->  "Dia fraco"

-- fim do laço:
   total = 35
   média = 35 / 2 = 17.50
   Dia 1: 25 bolos   /   Dia 2: 10 bolos
Se a conta no papel bate com o que você esperava, o raciocínio está certo. O teste de mesa é a melhor ferramenta para achar erro de lógica sem ficar adivinhando no código.

7Construa aos poucos, não tudo de uma vez

Nunca tente escrever o programa inteiro e só então rodar. Vá em pedacinhos, testando cada um:

  1. Só ler os dias e imprimir na tela. Funcionou? Segue.
  2. Agora o for imprimindo "Dia 1, Dia 2...". Funcionou? Segue.
  3. Agora ler os bolos e somar no total. Funcionou? Segue.
  4. Agora o if/else de bom/fraco. Funcionou? Segue.
  5. Por fim, o relatório (média e lista).

Cada pedaço que funciona é um ponto de apoio. Se algo quebrar, você sabe que o erro está no último pedaço que adicionou - bem mais fácil que caçar um erro em 40 linhas escritas de uma vez.

A receita para qualquer programa simples

  1. Diga o problema em uma frase.
  2. Separe em Entrada → Processo → Saída.
  3. Escreva o pseudocódigo em português.
  4. Para cada frase, pergunte "que estrutura isso pede?" (if/for/while/...).
  5. for quando SEI as voltas; while quando NÃO sei.
  6. Acumulador: declare ANTES, atualize DENTRO, use DEPOIS do laço.
  7. Faça o teste de mesa com um exemplo pequeno.
  8. Monte e teste em pedaços, nunca tudo de uma vez.
Decorar comandos é fácil. O que destrava de verdade é este processo: pensar primeiro em português, depois traduzir. Com o tempo, ele vira automático. 💜