Matemática Básica Na Programação

15/12/2007 (Sábado)

    Noto que muitos programadores iniciantes (e outros nem tão iniciantes assim) têm dificuldade em aplicar coisas simples da matemática na programação. Resolvi compilar uma pequena lista com alguns exemplos do cotidiano. Cada exemplo contém a fórmula matemática usada e uma ou mais implementações.

    § Um exemplo clássico, que já vi muitas vezes: limitar o número de casas decimais de um número real (para evitar problemas de arredondamento).
    Ao invés de apelar para a formatação de strings e conversão da string de volta a número real, que tal o seguinte:

  numero = Trunca(numero X (10 ^ decimais)) ÷ decimais
   
  X: multiplicação
  ÷: divisão
  decimais: número de casas decimais desejadas
  ^: exponenciação
  Trunca: truncar, cortar a parte decimal (também é possível arredondar)

Pascal/Delphi:

function RoundTo(valor: Currency; decimais: Integer=2): Currency;
begin
decimais := Trunc(Power(10, decimais));
Result := (Floor(valor * decimais + 0.5) / decimais);
end;

C/C++:

double RoundTo(double valor, int decimais=2)
{
  decimais = int(pow(10, decimais));
  return (floor(valor * decimais +.5) / decimais);
}

C#:

double TruncTo(double valor, int decimais)
{
  decimais = int(Math.Power(10, decimais));
  return (Math.Truncate(valor * decimais) / decimais);
}


 
    § Calcular porcentagem:
  Podemos usar a famosa Regra de Três:
  1       3
  2       x

 
  1x = 2 X 3   (multiplicação das diagonais)
 
  Ex.: calcular 10% de 200:
    200     100%    (200 é o total, 100%)
       x       10%    (x, o valor que quero saber, representa 10% do total)
 
    100x = 200 X 10     x = 20
  
  Pela Regra de Três,
    valor         100
    resultado     taxa
 
  deduzimos a fórmula:
  
  resultado = valor X taxa ÷ 100 
 
Pascal/Delphi:

resultado := valor * taxa / 100;

C/C++/C#:

resultado = valor * taxa / 100;


    Como em qualquer fórmula matemática, é possível fazer diversas “transformações”:
  – Ex.: você sabe o resultado, o valor, mas não sabe a taxa.
    Ex. concreto: quanto por cento de 200 15 representa?
 
  Voltando à nossa Regra de Três, inserimos os valores que conhecemos:
    200         100
      15            x
    
    
    200x = 100 X 15    x = 7,5%
    
  Deduzimos então que:
 
    taxa = resultado X 100 ÷ valor  
  
Pascal/Delphi:


taxa := resultado * 100 / valor;

C/C++/C#:

taxa = resultado * 100 / valor;


  
    § Diferença entre datas (em meses):
  resultado = ((ano2 – ano1) X 12) + (mes2 – mes1)

    Este cálculo não leva em consideração os dias. A implementação (em uma ou mais linguagens de programação, como preferir) fica à seu encargo (não se preocupe, é bastante simples); caso você tenha as datas em valores agrupados (TDateTime, DateTime, etc), basta decompor a data em dia, mês, ano antes de efetuar o cálculo.
  
  
    § Juros Compostos (juros sobre juros):
  resultado = capital X (1 + taxa) ^ tempo
 
C#:

resultado = capital * Math.Pow(1 + taxa, tempo);

Pascal/Delphi:

resultado := capital * Power(1 + taxa, tempo);

 
C/C++:

resultado = capital * pow(1 + taxa, tempo);


 
  

    O objetivo aqui foi mostrar que aplicando alguns elementos básicos da matemática podemos resolver alguns problemas de forma simples e elegante. Vimos alguns exemplos simples mas bastante comuns, com teoria e prática (implementações).

                             
 
 Você sabia que…
Na história original de Pinóquio ele  mata o Grilo Falante com uma martelada?