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?
Escrito por Rafael Rodrigues