Um algoritmo é uma sequência definida de passos para transformar uma entrada em um resultado. Na programação, ele representa a lógica da solução antes de essa lógica ser escrita em C#, Python, Java ou outra linguagem. Por isso, aprender algoritmos não é decorar comandos: é aprender a decompor problemas, decidir o que precisa acontecer e organizar essas decisões em uma ordem que possa ser executada.
Algoritmo é uma solução organizada
Imagine um sistema que precisa calcular a média de duas notas. Antes de pensar em sintaxe, podemos descrever a solução: receber a primeira nota, receber a segunda, somar as duas, dividir o resultado por dois e mostrar a média. Essa sequência já é um algoritmo.
Nem toda lista de instruções é útil. Os passos precisam ser claros o bastante para que, dadas as condições previstas, seja possível executá-los sem adivinhar o que o autor quis dizer. Também é importante que o procedimento tenha um objetivo e termine para as entradas às quais se aplica.
Entrada, processamento e saída
Uma maneira simples de começar a analisar problemas é separar três elementos. Entrada é o dado recebido. Processamento é o trabalho realizado com esse dado. Saída é o resultado produzido.
| Problema | Entrada | Processamento | Saída |
|---|---|---|---|
| Calcular média | Duas notas | Somar e dividir por 2 | Média |
| Verificar maioridade | Idade | Comparar com 18 | Maior ou menor de idade |
| Calcular total | Preço e quantidade | Multiplicar | Valor total |
Essa divisão não resolve todo problema, mas obriga o estudante a identificar o que realmente entra no sistema e o que precisa sair dele.
Sequência, decisão e repetição
Muitos algoritmos podem ser entendidos pela combinação de três estruturas. Na sequência, uma ação acontece depois da outra. Na decisão, o caminho depende de uma condição. Na repetição, um conjunto de passos é executado várias vezes.
Por exemplo, um sistema de caixa pode receber o valor da compra, verificar se existe desconto e repetir a leitura dos produtos até o operador encerrar a venda. O problema real combina sequência, decisão e repetição.
Quando você já domina a lógica da repetição, pode avançar para o artigo sobre estrutura FOR em C#.
Como representar um algoritmo
Antes de escrever código, o algoritmo pode ser explicado em linguagem natural, pseudocódigo ou fluxograma. O pseudocódigo é útil porque mantém a atenção na lógica sem exigir todos os detalhes de uma linguagem de programação.
INÍCIO
leia nota1
leia nota2
media ← (nota1 + nota2) / 2
se media >= 7 então
escreva "Aprovado"
senão
escreva "Reprovado"
fim-se
FIM
Depois que a solução está clara, ela pode ser traduzida para uma linguagem. Em C#, por exemplo, será necessário escolher tipos de dados, receber valores, usar operadores e escrever uma estrutura condicional. Esses detalhes pertencem à implementação; a decisão de comparar a média com sete já pertence ao algoritmo.
O que torna um algoritmo bom?
Dois algoritmos podem produzir a mesma resposta e ainda assim ter qualidades diferentes. Para problemas pequenos, essa diferença pode ser imperceptível. Em grandes volumes de dados, a quantidade de operações e de memória necessária passa a importar.
A análise de algoritmos estuda como o custo cresce quando a entrada aumenta. Em vez de medir apenas segundos em uma máquina específica, costuma-se observar o crescimento do trabalho. Um procedimento que verifica cada item de uma lista tende a crescer de forma diferente de outro que consegue descartar grandes partes da busca a cada passo.
Eficiência, porém, não é o único critério. Um algoritmo também precisa estar correto para as entradas previstas, ser compreensível e lidar com situações importantes do problema. Otimizar uma solução incorreta não a transforma em uma boa solução.
Um exemplo de raciocínio antes do código
Problema: uma loja quer informar se um produto precisa ser reposto quando o estoque ficar abaixo de cinco unidades.
- Identifique a entrada: quantidade atual.
- Defina a regra: comparar a quantidade com 5.
- Defina os resultados possíveis: “repor” ou “estoque suficiente”.
- Teste mentalmente valores como 0, 4, 5 e 20.
- Só então traduza a solução para a linguagem escolhida.
O teste com valores de fronteira é importante. Se a regra diz “abaixo de cinco”, quatro deve solicitar reposição, mas cinco não. Essa pequena diferença muda o operador de comparação no programa.
Algoritmo não é a mesma coisa que programa
O algoritmo descreve a estratégia de solução. O programa é a implementação executável dessa estratégia em determinada linguagem e ambiente. Um mesmo algoritmo de média pode ser implementado em C#, JavaScript ou Python. Cada versão terá sintaxe diferente, mas poderá preservar os mesmos passos lógicos.
Também não é correto pensar que algoritmos existem apenas em programação. Ordenação, busca, roteamento de redes, compressão, criptografia, recomendação de conteúdo e processamento de imagens dependem de algoritmos. O que muda é a complexidade do problema e das técnicas usadas.
Exercício de raciocínio
Sem escrever código, descreva um algoritmo para receber o preço de um produto e a quantidade comprada. Se o total for maior que R$ 100, aplique 10% de desconto. Identifique entrada, processamento, decisão e saída. Depois teste seu algoritmo com compras de R$ 80, R$ 100 e R$ 120.
Caso completo: desconto progressivo em uma venda
Considere esta regra: uma loja concede 5% de desconto quando o subtotal é de pelo menos R$ 100 e 10% quando é de pelo menos R$ 300. Antes de programar, precisamos eliminar ambiguidades. O valor de R$ 100 recebe desconto? Os percentuais acumulam? Quantidades negativas são aceitas? Neste exemplo, os limites são inclusivos, aplica-se apenas a maior faixa alcançada e preço e quantidade devem ser positivos.
1. Especifique entradas e saídas
- Entradas: preço unitário e quantidade.
- Valores inválidos: preço menor ou igual a zero; quantidade menor ou igual a zero.
- Processamento: subtotal, percentual, valor do desconto e total.
- Saídas: subtotal, percentual aplicado, desconto e total final.
2. Escreva a lógica sem sintaxe de linguagem
leia preco
leia quantidade
se preco <= 0 ou quantidade <= 0 então
escreva "Dados inválidos"
senão
subtotal ← preco × quantidade
se subtotal >= 300 então
percentual ← 0,10
senão se subtotal >= 100 então
percentual ← 0,05
senão
percentual ← 0
fim-se
desconto ← subtotal × percentual
total ← subtotal - desconto
escreva subtotal, desconto, total
fim-se
3. Teste antes de programar
| Preço × quantidade | Subtotal | Desconto esperado | Por que testar? |
|---|---|---|---|
| R$ 20 × 4 | R$ 80 | 0% | Abaixo da primeira faixa |
| R$ 25 × 4 | R$ 100 | 5% | Exatamente no limite |
| R$ 75 × 4 | R$ 300 | 10% | Exatamente no segundo limite |
| R$ 100 × 0 | Inválido | Não calcular | Entrada fora do domínio |
Os casos de fronteira revelam erros que exemplos aleatórios podem esconder. Se a condição fosse subtotal > 100, uma compra de exatamente R$ 100 receberia o resultado errado.
Tabela de rastreamento: execute o algoritmo no papel
Rastrear significa acompanhar o valor de cada variável após uma etapa. Para preço R$ 75 e quantidade 4: o subtotal vira 300; a primeira condição é verdadeira; o percentual vira 0,10; o desconto vira 30; o total vira 270. Se a saída do programa for diferente, já sabemos quais valores intermediários observar.
Como decompor problemas maiores
Quando a solução cresce, separe responsabilidades: validar dados, calcular subtotal, escolher desconto e apresentar resultado. Essa divisão reduz repetições e permite testar cada parte. Em um programa real, essas responsabilidades podem virar funções; no pseudocódigo, já podem ser descritas como blocos com nomes claros.
Também registre o que o algoritmo não resolve. O exemplo não trata impostos, arredondamento contábil, estoque ou múltiplos produtos. Declarar limites evita que um exercício simples seja confundido com um sistema comercial completo.
Desafio verificável
Amplie o algoritmo para três produtos. Calcule o subtotal acumulado e aplique o desconto somente depois da última entrada. Prepare pelo menos seis testes: lista vazia, quantidade inválida, abaixo de R$ 100, exatamente R$ 100, exatamente R$ 300 e acima de R$ 300. Entregue pseudocódigo, tabela de testes e uma explicação de como você sabe que o resultado está correto.
Perguntas frequentes
Preciso saber matemática avançada para aprender algoritmos?
Não para começar. Problemas iniciais usam principalmente raciocínio lógico e matemática básica. Assuntos avançados podem exigir conhecimentos matemáticos específicos.
Fluxograma é obrigatório?
Não. Ele é uma ferramenta de representação. Pseudocódigo, linguagem natural e exemplos também podem ajudar a planejar a solução.
Qual linguagem é melhor para aprender algoritmos?
A linguagem é secundária no início. O mais importante é conseguir separar o problema em dados, regras, decisões e passos verificáveis.
Conclusão
Aprender algoritmos significa aprender a pensar em soluções executáveis. Antes de perguntar “qual comando eu uso?”, procure responder “quais passos resolvem este problema?”. Quando entrada, processamento, decisões e saída estão claros, a programação deixa de ser uma coleção de comandos soltos e passa a ser a tradução de um raciocínio.
Referências bibliográficas
Livros reconhecidos utilizados como base para os conceitos deste artigo.
- CORMEN, Thomas H.; LEISERSON, Charles E.; RIVEST, Ronald L.; STEIN, Clifford. Introduction to Algorithms . 4. ed. The MIT Press, 2022.
- SEDGEWICK, Robert; WAYNE, Kevin. Algorithms . 4. ed. Addison-Wesley Professional, 2011.