Lógica de programação se aprende escrevendo, não lendo. Esta página traz oito exercícios em ordem crescente de dificuldade, cada um com enunciado, resposta comentada em PHP e a saída exata do programa. São os mesmos exercícios que aparecem em curso técnico, curso livre e primeira semana de faculdade — resolvê-los sozinho, e depois refazer dias depois, é o caminho mais curto para a lógica firmar.
Três combinados antes de começar. Primeiro: tente antes de olhar a resposta, nem que a tentativa termine errada — o erro é onde o aprendizado acontece, e uma resposta lida sem tentativa vira só texto bonito. Segundo: refaça o exercício alguns dias depois, do zero, sem olhar nada. O que você consegue reescrever uma semana depois é o que você realmente aprendeu. Terceiro: varie o enunciado — fez par ou ímpar, faça múltiplo de 3; fez soma de 1 a 100, faça soma só dos pares.
Os exemplos estão em PHP, mas a lógica vale para qualquer linguagem. Se algum comando parecer estranho, os guias de laços de repetição em PHP e de por onde começar em lógica de programação cobrem a base necessária.
1. Par ou ímpar
Enunciado: dado um número, mostre se ele é par ou ímpar.
Resposta comentada
<?php
$numero = 27;
if ($numero % 2 === 0) {
echo $numero . " é par\n";
} else {
echo $numero . " é ímpar\n";
}
Saída:
27 é ímpar
A chave é o operador %, chamado de resto ou módulo: ele devolve o que sobra de uma divisão. Todo número par dividido por 2 sobra 0, e todo ímpar sobra 1. Não existe terceira possibilidade, por isso um if com else resolve. Trocando o valor para 40, a saída vira "40 é par".
2. Média com aprovação
Enunciado: calcule a média de três notas e mostre "Aprovado" para média 6 ou mais, "Recuperação" para média entre 4 e 6, e "Reprovado" abaixo de 4.
Resposta comentada
<?php
$nota1 = 8.0;
$nota2 = 5.5;
$nota3 = 4.5;
$media = ($nota1 + $nota2 + $nota3) / 3;
echo 'Média: ' . number_format($media, 2, ',', '.') . "\n";
if ($media >= 6) {
echo "Aprovado\n";
} elseif ($media >= 4) {
echo "Recuperação\n";
} else {
echo "Reprovado\n";
}
Saída:
Média: 6,00
Aprovado
Dois pontos importantes. Os parênteses em ($nota1 + $nota2 + $nota3) / 3 são obrigatórios: sem eles, o PHP divide só a última nota por 3 e a média sai errada. E a ordem do encadeamento importa — como o elseif só é testado quando o if falha, quando o programa chega no $media >= 4 já é certeza que a média é menor que 6, então não precisa escrever a faixa inteira.
3. O maior de três números
Enunciado: dados três números, mostre o maior deles.
Resposta comentada
<?php
$primeiro = 14;
$segundo = 42;
$terceiro = 8;
$maior = $primeiro;
if ($segundo > $maior) {
$maior = $segundo;
}
if ($terceiro > $maior) {
$maior = $terceiro;
}
echo 'O maior é ' . $maior . "\n";
Saída:
O maior é 42
A tentação do iniciante é escrever um if gigante comparando todas as combinações possíveis. A saída elegante é a variável campeã: você elege um provisório e desafia um por um. Quem for maior, assume o posto. A vantagem desse jeito é que ele funciona igual para três números ou para trezentos — só troca os dois if por um laço.
4. Tabuada
Enunciado: mostre a tabuada de um número, de 1 a 10, no formato "8 x 3 = 24".
Resposta comentada
<?php
$numero = 8;
echo 'Tabuada do ' . $numero . ":\n";
for ($multiplicador = 1; $multiplicador <= 10; $multiplicador++) {
echo $numero . ' x ' . $multiplicador . ' = ' . ($numero * $multiplicador) . "\n";
}
Saída:
Tabuada do 8:
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
8 x 10 = 80
Aqui aparece a diferença entre o que fica fora e o que fica dentro do laço. O número da tabuada e o título são escritos uma vez só, fora. A linha da multiplicação é escrita dez vezes, dentro. Repare também nos parênteses em ($numero * $multiplicador): sem eles, o PHP faria a conta com o texto ao lado e o resultado sairia estranho.
5. Soma de 1 até N
Enunciado: some todos os números de 1 até um limite e mostre o total.
Resposta comentada
<?php
$limite = 100;
$soma = 0;
for ($contador = 1; $contador <= $limite; $contador++) {
$soma = $soma + $contador;
}
echo 'A soma de 1 até ' . $limite . ' é ' . $soma . "\n";
Saída:
A soma de 1 até 100 é 5050
Este é o exercício do acumulador, o padrão mais reaproveitado de toda a programação. A variável $soma nasce em zero fora do laço e cresce a cada volta. Se você declarar $soma = 0 dentro das chaves, ela zera a cada repetição e o resultado final vira 100 em vez de 5050 — este é, disparado, o erro mais comum da lista inteira.
6. Contagem regressiva
Enunciado: mostre a contagem de 10 até 1 e depois escreva "Fim!".
Resposta comentada
<?php
$contador = 10;
while ($contador >= 1) {
echo $contador . "\n";
$contador = $contador - 1;
}
echo "Fim!\n";
Saída:
10
9
8
7
6
5
4
3
2
1
Fim!
Um laço não precisa contar para cima. Aqui a variável começa alta e a linha $contador = $contador - 1 caminha para o valor que torna a condição falsa. É o mesmo mecanismo do exercício anterior de trás para frente — e é um bom lugar para conferir se você entendeu o assunto: se trocar >= por >, a contagem para no 2 e o "1" nunca aparece.
7. Troco do caixa
Enunciado: dados o valor da compra e o valor pago, mostre o troco em reais. Se o valor pago for menor, diga quanto falta.
Resposta comentada
<?php
$valorCompra = 47.30;
$valorPago = 100.00;
if ($valorPago < $valorCompra) {
echo 'Faltam R$ ' . number_format($valorCompra - $valorPago, 2, ',', '.') . "\n";
} elseif ($valorPago == $valorCompra) {
echo "Valor exato, não há troco.\n";
} else {
echo 'Troco: R$ ' . number_format($valorPago - $valorCompra, 2, ',', '.') . "\n";
}
Saída:
Troco: R$ 52,70
Este exercício ensina uma coisa que enunciado nenhum diz: todo caso tem que estar coberto. Um iniciante escreve só "troco = pago menos compra" e não pensa no cliente que pagou menos, nem no valor exato. Antes de escrever o código, liste as situações possíveis; se sobrar alguma sem resposta, o programa fica mudo justo nela. E, para dinheiro, number_format com vírgula é o que faz o resultado parecer um cupom fiscal brasileiro em vez de uma variável.
8. Validação de senha por tamanho
Enunciado: verifique se uma senha tem pelo menos 8 caracteres. Se tiver menos, diga quantos faltam de referência.
Resposta comentada
<?php
$senha = 'aulab123';
$tamanho = strlen($senha);
if ($tamanho < 8) {
echo 'Senha curta: ' . $tamanho . " caracteres. Use pelo menos 8.\n";
} elseif ($tamanho <= 12) {
echo "Senha aceita.\n";
} else {
echo "Senha aceita, e bem difícil de adivinhar.\n";
}
Saída:
Senha aceita.
Trocando a senha para 'sol123', a saída passa a ser "Senha curta: 6 caracteres. Use pelo menos 8.". A novidade aqui é strlen(), que devolve quantos caracteres um texto tem. É o primeiro exercício em que a decisão não é sobre um número que você escreveu, e sim sobre uma característica de um dado — o mesmo raciocínio que valida CPF, e-mail e formulário depois.
O que fazer depois destes oito
Se os oito saíram sem consulta, você já tem a base de sequência, decisão e repetição. O próximo degrau é combinar as três coisas num programa só: um pequeno caixa que soma vários itens e devolve o troco, uma média de uma turma inteira com contagem de aprovados, um menu que repete até a pessoa escolher sair. É nessa junção que a lógica vira habilidade de verdade.
Vale também mudar a forma de praticar. Escrever o código e nunca receber devolutiva faz o mesmo erro se repetir por meses. Numa turma no Aulab, o aluno resolve o exercício num editor de PHP que roda no próprio navegador e envia; o professor aprova ou devolve com um comentário do tipo "o acumulador está dentro do laço, olhe a linha 5" — e o aluno refaz. É o mesmo caderno de exercícios de sempre, com o ciclo de correção fechando. Se você dá aula e quer montar essa lista para a sua turma, dá para criar uma conta e começar por uma turma só.
Perguntas frequentes
Quantos exercícios de lógica preciso fazer por dia?
Melhor pouco todo dia do que muito de uma vez. Dois ou três exercícios diários, escritos do zero, valem mais que vinte num sábado — e a diferença aparece justamente na parte que interessa, que é lembrar sem consultar. Trinta a quarenta minutos por dia é uma dose realista para quem trabalha ou estuda.
Posso resolver estes exercícios em outra linguagem?
Pode, e é uma boa ideia. Nenhum dos oito usa recurso exclusivo de PHP: todos existem igual em Python, JavaScript, Java ou C. Traduzir a mesma solução para uma segunda linguagem, depois que ela já está firme na primeira, é um ótimo exercício de leitura de sintaxe.
Olhar a resposta é errado?
Não, desde que venha depois da tentativa. Olhar a resposta antes de tentar transforma o exercício em leitura, e leitura não firma lógica. O jeito produtivo é tentar por uns quinze minutos, travar, ler a resposta, fechar a página e reescrever do zero.
Como sei se a minha solução está certa se ela é diferente da resposta?
Compare a saída, não o código. Se o seu programa imprime exatamente o mesmo resultado para os mesmos dados, e continua acertando quando você troca os valores de entrada, ele está certo. Existem muitas soluções válidas para o mesmo enunciado, e a sua pode inclusive ser melhor que a daqui.
O que estudar depois de dominar estes exercícios?
Listas e a repetição sobre elas, que é onde a maior parte do trabalho real acontece: percorrer uma lista de produtos, de alunos, de lançamentos. Depois disso, funções, para parar de repetir o mesmo trecho. Com esses dois assuntos você já resolve praticamente qualquer enunciado de curso introdutório.