Problema Com As 4 Operações - Situações Problema Envolvendo As 4 Operações - FDPLEARN
Situações Problema Envolvendo As 4 Operações - FDPLEARN

Entendendo o problema com as 4 operações na prática

O problema com as 4 operações é um dos exercícios mais comuns em cursos de introdução à programação no Brasil. Ele aparece em quase todas as ementas de lógica de programação e algoritmos, geralmente como a primeira tarefa que pede ao aluno para criar um programa capaz de receber dois números e realizar adição, subtração, multiplicação e divisão entre eles. Parece simples até você tentar implementá-lo e se deparar com edge cases que o enunciado nunca menciona.

Implementando o problema com as 4 operações

A estrutura básica é direta: você recebe dois operandos e aplica cada uma das quatro operações aritméticas. Em Python, por exemplo, o esqueleto do código fica assim:

a = float(input("Primeiro número: "))
b = float(input("Segundo número: "))

soma = a + b
subtracao = a - b
multiplicacao = a * b
divisao = a / b

print(f"Soma: {soma}")
print(f"Subtração: {subtracao}")
print(f"Multiplicação: {multiplicacao}")
print(f"Divisão: {divisao}")

Funciona. Até o momento em que o usuário digita zero como segundo operando. Aí a divisão lança uma exceção ZeroDivisionError e o programa trava. Se você está fazendo isso num contexto de avaliação ou num sistema automatizado que valida respostas, o erro não é seu, mas a falha no tratamento é. Sempre adicione uma verificação antes de dividir. O que a maioria dos exercícios ignora é que a entrada do usuário pode ser qualquer coisa. Um caractere, uma string vazia, números negativos, valores muito grandes. O problema com as 4 operações no papel é diferente dele na tela. Num exercício acadêmico, o professor provavelmente vai testar apenas com inteiros positivos. Mas num cenário real, se você estiver construindo algo que depende dessa lógica, precisa tratar entradas inválidas com try-except para ValueError, validar se o divisor é diferente de zero, e decidir o que fazer quando os dados não fazem sentido.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Uma coisa que poucos mencionam é a questão da precisão de ponto flutuante. Operações com floats podem produzir resultados surpreendentes. Por exemplo, 0.1 + 0.2 não dá exatamente 0.3 em Python, devido à representação binária de números decimais. Se o seu exercício pede para comparar o resultado com um valor esperado e usar uma condicional como if resultado == 0.3, você vai falhar. A solução é usar round() para limitar casas decimais ou, em contextos financeiros, utilizar a biblioteca Decimal do Python, que oferece precisão decimal exata. Isso transforma um bug invisível em comportamento previsível. Outro ponto que causa confusão é a diferença entre divisão inteira e divisão real. Em Python, o operador / sempre retorna um float, enquanto // faz divisão inteira (floor division). Se o exercício pede para dividir 7 por 2 e espera o resultado 3.5, usar // vai dar errado silenciosamente. O mesmo vale para linguagens como C e Java, onde dividir dois inteiros com / já faz divisão inteira por padrão — só muda para ponto flutuante se pelo menos um dos operandos for float. Essa armadilha aparece com frequência em plataformas de avaliação automática, onde o aluno não entende por que o resultado numérico não bate.

Eu me lembrei de um caso específico em que precisei implementar isso para um sistema interno de uma empresa. O requisito era calcular médias e proporções entre valores de entrada do usuário, basicamente as 4 operações aplicadas a dados financeiros. O problema foi que muitos usuários entravam com vírgula em vez de ponto nos decimais, como 1.200,50 no formato brasileiro. O float() do Python lanceava ValueError imediatamente. A workaround foi usar uma regex simples para normalizar a entrada antes de converter: substituir vírgula por ponto e remover pontos de milhar. Isso resolveu em dez linhas extras e evitou que o sistema cair a cada vez que alguém digitava um valor com separador decimal brasileiro.

Versão robusta com tratamento de erros

def obter_numero(mensagem):
    while True:
        try:
            valor = input(mensagem).replace(',', '.')
            return float(valor)
        except ValueError:
            print("Entrada inválida. Digite um número.")

a = obter_numero("Primeiro número: ")
b = obter_numero("Segundo número: ")

print(f"Soma: {a + b}")
print(f"Subtração: {a - b}")
print(f"Multiplicação: {a * b}")

if b != 0:
    print(f"Divisão: {a / b}")
else:
    print("Divisão por zero não é permitida.")

Essa versão é um pouco maior, mas cobre os cenários que realmente importam. A função obter_numero() reutiliza a lógica de parsing e validação, o que evita repetição. O loop while garante que o usuário não consiga prosseguir com uma entrada inválida. A verificação de b != 0 previne a exceção de divisão por zero. Se o exercício for apenas acadêmico e o professor não exigir tratamento de erros, a versão simples já é suficiente para passar na maioria das verificações. Mas se o objetivo é construir algo que funcione fora do ambiente controlado da aula, os tratamentos acima são obrigatórios, não opcionais. A falta deles é o que diferencia um código que funciona nos dados de teste de um código que quebra na vida real.

Alternativas e limitações

Para quem precisa de mais rigor matemático, existe a biblioteca fractions do Python, que trabalha com números racionais exatos. Não há perda de precisão, mas o desempenho é inferior ao de floats para cálculos massivos. Em aplicações onde velocidade importa mais que exatidão absoluta, floats com round() são suficientes. Em cálculos financeiros, Decimal é o caminho. Em contextos educacionais básicos, a abordagem ingênua com float() direto basta, desde que o professor não prepare casos de teste com divisão por zero ou entrada não numérica. O problema com as 4 operações, no fundo, não é sobre as operações em si. É sobre como lidar com a entrada do usuário, com a precisão numérica e com os casos limite que todo exercício bem-intencionado esquece de mencionar. Dominar isso é o que separa quem entrega o código funcional de quem entrega um código que sobrevive fora da sala de aula.