O que é lógica de programação — e por que ela vem antes de tudo?
Imagine que você precisa explicar para alguém que nunca cozinhou como fazer um ovo frito. Você não pode simplesmente dizer "faz o ovo". Precisa detalhar cada passo: pegar a frigideira, acender o fogo, colocar óleo, esperar esquentar, quebrar o ovo, colocar sal...
Programação funciona exatamente assim. O computador é muito rápido, mas muito burro. Ele faz exatamente o que você manda — nem mais, nem menos. A lógica de programação é a habilidade de traduzir uma solução em passos claros, precisos e na ordem certa.
Se você está começando sua jornada na programação (e se ainda não leu, recomendamos nosso guia definitivo para começar em programação do zero), este artigo vai te dar a base mais importante de todas: a lógica.
Em termos simples: Lógica de programação é pensar em passos. É a habilidade de pegar um problema, dividi-lo em partes menores e organizar essas partes em uma sequência que resolve o problema. Não é matemática — é raciocínio organizado.
Os 4 pilares da lógica de programação
Toda linguagem de programação, sem exceção, é construída sobre estes quatro conceitos fundamentais. Domine eles e você consegue programar em qualquer linguagem.
1. Variáveis — onde guardamos informações
Uma variável é um espaço na memória do computador onde você armazena um valor. Pense em caixas etiquetadas: cada caixa tem um nome e guarda algo dentro.
Tipos de variáveis mais comuns
| Tipo | O que guarda | Exemplo |
|------|-------------|---------|
| int | Números inteiros | 42, -7, 0 |
| double | Números com decimais | 3.14, 99.90 |
| string | Textos | "Maria", "Olá, mundo!" |
| bool | Verdadeiro ou falso | true, false |
| char | Um único caractere | 'A', 'z' |
Exemplo prático
Vamos criar variáveis para representar um aluno:
// Declarando variáveis
string nome = "Carlos";
int idade = 22;
double nota = 8.5;
bool aprovado = true;
// Usando as variáveis
Console.WriteLine($"Aluno: {nome}");
Console.WriteLine($"Idade: {idade} anos");
Console.WriteLine($"Nota: {nota}");
Console.WriteLine($"Aprovado: {aprovado}");
Saída:
Aluno: Carlos
Idade: 22 anos
Nota: 8.5
Aprovado: True
Regras para nomear variáveis
- Use nomes descritivos:
idadeDoUsuarioem vez dex - Comece com letra (nunca com número)
- Use camelCase em C#:
nomeCompleto,dataNascimento - Não use espaços nem caracteres especiais (exceto underscore
_)
Erro comum: Dar nomes genéricos como
a,b,x,temppara variáveis. Quando o código cresce, você não lembra o que cada variável representa. Use nomes que descrevam o conteúdo:precoProduto,quantidadeEstoque,emailCliente.
2. Condicionais — tomando decisões no código
Na vida real, tomamos decisões o tempo todo: "Se estiver chovendo, levo guarda-chuva. Senão, vou sem." Condicionais fazem exatamente isso no código.
A estrutura if/else
if (condicao)
{
// Executa se a condição for verdadeira
}
else
{
// Executa se a condição for falsa
}
Operadores de comparação
| Operador | Significado | Exemplo |
|----------|-------------|---------|
| == | Igual a | idade == 18 |
| != | Diferente de | nome != "Admin" |
| > | Maior que | nota > 7 |
| < | Menor que | saldo < 0 |
| >= | Maior ou igual | idade >= 18 |
| <= | Menor ou igual | preco <= 100 |
Exemplo prático
Sistema de classificação de idade para cinema:
int idade = 15;
if (idade >= 18)
{
Console.WriteLine("Entrada permitida para qualquer filme.");
}
else if (idade >= 16)
{
Console.WriteLine("Entrada permitida para filmes até 16 anos.");
}
else if (idade >= 14)
{
Console.WriteLine("Entrada permitida para filmes até 14 anos.");
}
else if (idade >= 12)
{
Console.WriteLine("Entrada permitida para filmes até 12 anos.");
}
else
{
Console.WriteLine("Entrada permitida apenas para filmes livres.");
}
Combinando condições com operadores lógicos
Você pode combinar múltiplas condições:
&&(E) — ambas precisam ser verdadeiras||(OU) — pelo menos uma precisa ser verdadeira!(NÃO) — inverte o valor
int idade = 25;
bool temCarteira = true;
if (idade >= 18 && temCarteira)
{
Console.WriteLine("Pode dirigir!");
}
else
{
Console.WriteLine("Não pode dirigir.");
}
3. Loops — repetindo ações de forma inteligente
Imagine que você precisa imprimir os números de 1 a 1000. Você não vai escrever 1000 linhas de código. Para isso existem os loops (laços de repetição).
Loop for — quando você sabe quantas vezes repetir
for (int i = 1; i <= 10; i++)
{
Console.WriteLine($"Número: {i}");
}
Decompondo:
int i = 1— começa em 1i <= 10— continua enquanto i for menor ou igual a 10i++— incrementa 1 a cada repetição
Loop while — quando você não sabe quantas vezes repetir
string resposta = "";
while (resposta != "sair")
{
Console.Write("Digite algo (ou 'sair' para parar): ");
resposta = Console.ReadLine()!;
Console.WriteLine($"Você digitou: {resposta}");
}
Loop foreach — para percorrer coleções
string[] frutas = { "Maçã", "Banana", "Laranja", "Manga" };
foreach (string fruta in frutas)
{
Console.WriteLine($"Fruta: {fruta}");
}
Exemplo prático
Calculadora de média de notas de uma turma:
double[] notas = { 7.5, 8.0, 6.5, 9.0, 5.5, 7.0, 8.5 };
double soma = 0;
foreach (double nota in notas)
{
soma += nota;
}
double media = soma / notas.Length;
Console.WriteLine($"Média da turma: {media:F1}");
// Contar aprovados e reprovados
int aprovados = 0;
int reprovados = 0;
foreach (double nota in notas)
{
if (nota >= 7.0)
aprovados++;
else
reprovados++;
}
Console.WriteLine($"Aprovados: {aprovados}");
Console.WriteLine($"Reprovados: {reprovados}");
Erro comum: Criar loops infinitos acidentalmente. Se a condição de parada nunca for atingida, o programa trava. Sempre verifique se o seu loop tem uma saída clara. Exemplo de loop infinito:
while (true) { }— sem nenhumbreakdentro.
Quer dominar esses fundamentos com projetos reais?
Entender a teoria é o primeiro passo. Mas a lógica de programação só se solidifica na prática, construindo programas de verdade.
O curso Programação do Zero ao Avançado - Start da FISApp Academy dedica um módulo inteiro aos fundamentos de lógica, com exercícios progressivos e projetos práticos que fixam cada conceito. Nada de aula de 3 horas sem praticar — cada conceito vira código real.
4. Funções — organizando e reutilizando código
Funções são blocos de código que realizam uma tarefa específica e podem ser reutilizados quantas vezes você quiser. Em vez de repetir o mesmo código em vários lugares, você encapsula em uma função e chama pelo nome.
Anatomia de uma função
// tipo_retorno NomeDaFuncao(parametros)
double CalcularMedia(double nota1, double nota2)
{
double media = (nota1 + nota2) / 2;
return media;
}
- Tipo de retorno (
double): o que a função devolve - Nome (
CalcularMedia): como você chama a função - Parâmetros (
nota1, nota2): as informações que ela precisa receber - Retorno (
return media): o resultado que ela entrega
Funções sem retorno (void)
Quando a função apenas executa algo sem precisar devolver um valor:
void ExibirBoasVindas(string nome)
{
Console.WriteLine($"Bem-vindo(a), {nome}!");
Console.WriteLine("Pronto para aprender?");
}
// Chamando a função
ExibirBoasVindas("Ana");
Exemplo prático
Vamos criar um mini-sistema com várias funções trabalhando juntas:
// Função que valida se um email é válido (simplificado)
bool ValidarEmail(string email)
{
return email.Contains("@") && email.Contains(".");
}
// Função que classifica a idade
string ClassificarIdade(int idade)
{
if (idade < 12) return "Criança";
if (idade < 18) return "Adolescente";
if (idade < 60) return "Adulto";
return "Idoso";
}
// Função que calcula desconto por faixa etária
double CalcularDesconto(int idade, double preco)
{
string classificacao = ClassificarIdade(idade);
switch (classificacao)
{
case "Criança": return preco * 0.50; // 50% de desconto
case "Adolescente": return preco * 0.75; // 25% de desconto
case "Idoso": return preco * 0.60; // 40% de desconto
default: return preco; // Sem desconto
}
}
// Usando as funções
string email = "joao@email.com";
int idade = 15;
double precoIngresso = 40.00;
Console.WriteLine($"Email válido: {ValidarEmail(email)}");
Console.WriteLine($"Classificação: {ClassificarIdade(idade)}");
Console.WriteLine($"Preço com desconto: R$ {CalcularDesconto(idade, precoIngresso):F2}");
Perceba como cada função faz uma coisa só e faz bem. Isso é um princípio fundamental de código limpo que você vai usar durante toda a carreira.
Juntando tudo: um projeto completo
Agora vamos combinar variáveis, condicionais, loops e funções em um projeto real. Vamos criar um sistema de cadastro e consulta de alunos simples:
using System;
using System.Collections.Generic;
class SistemaAlunos
{
// Lista para armazenar os nomes dos alunos
static List<string> alunos = new List<string>();
static List<double> notas = new List<double>();
static void ExibirMenu()
{
Console.WriteLine("\n=== Sistema de Alunos ===");
Console.WriteLine("1. Cadastrar aluno");
Console.WriteLine("2. Listar alunos");
Console.WriteLine("3. Calcular média geral");
Console.WriteLine("0. Sair");
Console.Write("Escolha: ");
}
static void CadastrarAluno()
{
Console.Write("Nome do aluno: ");
string nome = Console.ReadLine()!;
Console.Write("Nota do aluno: ");
double nota = double.Parse(Console.ReadLine()!);
alunos.Add(nome);
notas.Add(nota);
Console.WriteLine($"{nome} cadastrado com sucesso!");
}
static void ListarAlunos()
{
if (alunos.Count == 0)
{
Console.WriteLine("Nenhum aluno cadastrado.");
return;
}
Console.WriteLine("\n--- Lista de Alunos ---");
for (int i = 0; i < alunos.Count; i++)
{
string situacao = notas[i] >= 7 ? "Aprovado" : "Reprovado";
Console.WriteLine($"{alunos[i]} - Nota: {notas[i]:F1} - {situacao}");
}
}
static void CalcularMediaGeral()
{
if (notas.Count == 0)
{
Console.WriteLine("Nenhuma nota registrada.");
return;
}
double soma = 0;
foreach (double nota in notas)
soma += nota;
Console.WriteLine($"Média geral: {soma / notas.Count:F1}");
}
static void Main()
{
string opcao;
do
{
ExibirMenu();
opcao = Console.ReadLine()!;
switch (opcao)
{
case "1": CadastrarAluno(); break;
case "2": ListarAlunos(); break;
case "3": CalcularMediaGeral(); break;
case "0": Console.WriteLine("Até logo!"); break;
default: Console.WriteLine("Opção inválida."); break;
}
} while (opcao != "0");
}
}
Esse projeto usa todos os 4 pilares: variáveis (nome, nota, soma), condicionais (if, switch), loops (do-while, for, foreach) e funções (ExibirMenu, CadastrarAluno, etc.).
Exercícios para praticar agora
A melhor forma de fixar lógica é praticando. Aqui vão exercícios em ordem de dificuldade:
Nível 1 — Básico
- Crie um programa que recebe o nome e a idade do usuário e exibe uma mensagem personalizada
- Faça um programa que converte Celsius para Fahrenheit
- Crie uma calculadora que faz as 4 operações básicas
Nível 2 — Intermediário
- Faça um programa que verifica se um número é primo
- Crie um programa que encontra o maior e o menor número de uma lista
- Faça um gerador de tabuada para qualquer número
Nível 3 — Desafiante
- Crie um jogo da forca simplificado no terminal
- Faça um programa que ordena uma lista de números (sem usar métodos prontos)
- Crie um sistema de caixa de supermercado com produtos, quantidades e total
Se você quer aprofundar na teoria por trás da lógica, nosso artigo sobre algoritmos e pseudocódigo explica como pensar antes de codificar.
Resumo rápido
- Variáveis armazenam dados — use nomes descritivos e o tipo correto
- Condicionais (if/else) permitem que o programa tome decisões
- Loops (for, while, foreach) repetem ações de forma eficiente
- Funções organizam código em blocos reutilizáveis
- Esses 4 conceitos são universais — funcionam em qualquer linguagem
- A lógica se aprende praticando, não apenas assistindo aulas
- Nomeie variáveis com clareza — seu eu do futuro agradece
- Comece com problemas simples e aumente a complexidade gradualmente
O que estudar depois
Depois de dominar a lógica de programação, você está pronto para avançar. Aqui estão seus próximos passos:
- O Que Estudar Depois da Lógica de Programação — sua trilha completa do que vem a seguir
- C# para Iniciantes — aplique a lógica em uma linguagem profissional
- Como Começar em Programação do Zero — o guia completo para quem está iniciando
- Como Montar um Plano de Estudos — organize seu tempo de estudo
Domine a lógica com projetos reais
A lógica de programação é o primeiro módulo do curso Programação do Zero ao Avançado - Start da FISApp Academy. Lá, cada conceito é ensinado com exemplos práticos e projetos que você realmente vai construir — não é teoria solta.
Se você quer sair do "entendo mas não consigo fazer" para o "consigo resolver qualquer problema com código", o PZA Start é o caminho.
Fundamentos sólidos agora = velocidade no futuro.