Resolvendo problemas comuns de matemática com JavaScript
Neste artigo vamos ver como resolver problemas comuns de matemática utilizando o JavaScript. Vamos ver desde exemplos simples até exemplos um pouco mais complexos.
O que você vai aprender neste artigo?
* Calculando o MMC
* Calculando o MDC
* Verificar se um número é primo
* Calculando porcentagens.
* Somar ou extrair média de um array de números.
* Juros simples e juros compostos.
* Objeto Math
* Elevar um número a potência de "n"
* Raiz quadrada
* Raiz cubica.
* Arredondar um número para o inteiro mais próximo.
* Retornando o maior ou menor valor de um intervalo de números.
* Gerando um número randômico.
* Retornar a parte inteira de um número.
* Retornar o valor absoluto de um número.
* Verificar se o número é positivo ou negativo.
* Calculando a área de um círculo
* Calculado seno, cosseno ou tangente.
* Logaritmos
* Constantes do objeto Math.
* Objeto Number
Antes de começar
Caso este seja o seu primeiro contato com programação estes são os operadores matemáticos do JavaScript.
var a = 20;
var b = 40;
console.log("Soma: " + (a + b));
console.log("Subtração: " + (a - b));
console.log("Multiplicação: " + (a * b));
console.log("Divisão: " + (a / b));
console.log("Módulo (resto da divisao): " + (b % a));
console.log("Incremento: " + (++a));
console.log("Decremento: " + (--b));
Calculando o MMC
O MMC, também conhecido como mínimo múltiplo comum corresponde ao menor número inteiro positivo que seja diferente de zero e que seja múltiplo ao mesmo tempo de dois ou mais números.
Por exemplo, o MMC de 2 e 5 é 10.
Múltiplos de 2: 2, 4, 5, 6, 8, 10, 12, 14, 16, 18....
Múltiplos de 5: 5, 10, 15, 20, 25, 30....
No JavaScript podemos resolver este problema da seguinte forma:
function calcularMMC(num1, num2) {
var resto, x, y;
x = num1;
y = num2;
while(resto!=0){
resto = x % y;
x = y;
y = resto;
}
return (num1*num2)/x;
};
var resultado = calcularMMC(5, 10);
console.log(resultado);
Neste exemplo atribuimos os números desejados as variaveis x e y, sendo x o primeiro número e y o segundo número. Calculamos o resto da divisão entre eles e fazemos a inversão dos valores, ou seja x para a guardar o valor de y e y passa a guardar o valor do resto da divisão. Repetimos este processo enquanto o resto da divisão de ambos os números não der zero. Quando isso ocorrer, multiplamos os números informados entre si e dividimos pelo valor calculado para x.
Calculando o MDC
O máximo divisor comum, também conhecido como MDC é o maior número que divide dois ou mais números ao mesmo tempo. Os divisores de um número natural podem ser encontrados dividindo este número pelos números naturais maiores que zero. Quando a divisão for exata, ou seja, com resto zero, então tal número é divisor do número informado.
Por exemplo, o MDC de 6 e 15 é 3.
No JavaScript podemos resolver este problema da seguinte forma:
function calcularMDC (num1, num2) {
var resto;
do {
resto = num1 % num2;
num1 = num2;
num2 = resto;
} while (resto != 0);
return num1;
}
var resultado = calcularMDC(5, 10);
console.log(resultado);
Verificar se um número é primo
Um número primo é aquele número onde ele é divisível apenas por 1 e por ele mesmo. Por exemplo, os números primos ate 20 são 2, 3, 5, 7, 11, 13, 17, 19.
Para resolver este problema vamos utilizar FOR para fazer um loop, dividindo o número começando por 1 e incrementando até chegar no número informado. Em cada etapa vamos verificar o resto da divisão e criar uma variável para contar quantos foram os casos onde o resto da divisão foi zero. Se no final do loop eu tiver apenas 2 casos onde o resto da divisão foi zero então o número informado é primo
function NumeroPrimo (numero) {
var divisores=0;
var resposta = "";
for(var count=1 ; count<=numero ; count++)
if(numero % count == 0){
divisores++;
}
if(divisores==2) {
resposta = "Primo";
} else {
resposta ="Nao Primo";
}
return resposta;
};
console.log(NumeroPrimo(5));
console.log(NumeroPrimo(8));
Calculando porcentagens
Para calcular um determinada porcentagem sobre um número podemos convertar a porcentagem em decimal e multiplicar. Por exemplo, para calcular 25% de um valor podemos multiplicar o valor informado por 0.25.
var valor = 120;
var resultado = valor * 0.25;
console.log(resultado);
Se ao invés de calcular 25% você deseje aumentar o valor original em 25% você pode multiplicar por 125%, ou seja 1.25
var valor = 120;
var resultado = valor * 1.25;
console.log(resultado);
E se você quiser subtrair 25% deste valor basta multiplicar por 0.75.
var valor = 120;
var resultado = valor * 0.75;
console.log(resultado);
Somar ou extrair média de um array de números.
Para calcular a soma de valores de um array podemos usar o método reduce do array para iterar o array e somar cada um de seus elementos.
function somarArray(array) {
return array.reduce((sum, i) => sum + i, 0);
}
var array = [1, 2, 3, 4, 5, 7, 19];
var resultado = somarArray(array);
console.log(resultado);
Para calcular a média fazemos algo muito parecido. A diferença vai ser que no final vamos subtrair o resultado pelo número de elementos de nosso array. Para saber a quantidade de elementos de um array utilizamos o método length.
function mediaArray(array) {
return array.reduce((sum, i) => sum + i, 0) / array.length;
}
var array = [1, 2, 3, 4, 5, 7, 19];
var resultado = mediaArray(array);
console.log(resultado);
Juros simples e juros compostos
Os juros são um valor que será pago ou recebido por uma operação financeira como por exemplo um empréstimo ou outro tipo de operação que envolva algum tipo de crédito.
Os juros simples são uma taxa fixa que incide sobre um determinado valor inicial durante um certo intervalo de tempo.
A fórmula para calcular este valor é a seguinte
juros = valor_inicial * taxa de juros * quantidade de periodos;
Vamos ver um exemplo prático:
var valor_investido = 3000;
var porcentagem = 0.10 //10% ao mês
var meses = 6;
var juros = valor_investido * porcentagem * meses;
var valor_total = valor_investido + juros;
console.log(juros);
console.log(valor_total);
O cálculo de 10% sobre o valor 3000 deu 300. Multiplicando este valor pela quantidade de meses que é 6, temos 1800.
Ao contrário dos juros simples, os juros compostos são somados e adicionados aos juros acumulados dos períodos anteriores. Eles são juros sobre juros.
Vamos ver um exemplo para isso ficar mais claro, pegando os mesmos valores do exemplo anterior:
var valor_investido = 3000;
var valor_atual = valor_investido;
var porcentagem = 0.10 //10% ao mês
var meses = 6;
var juros_acumulado = 0;
for (x= 1; x<=6; x++){
juros = valor_atual * porcentagem;
valor_atual += juros;
juros_acumulado += juros;
}
var valor_total = valor_investido + juros_acumulado;
console.log(juros_acumulado);
console.log(valor_total);
Perceba que fizemos um loop FOR com base no total de meses. Para cada mês fizemos o cálculo dos juros com base no valor total acumulado até aquele momento. Os juros são adicionados ao valor total a cada mês, por isso o valor do juros aumenta a cada mês.
Mês1: 300 * Mês 2: 330 * Mês 3: 363 * Mês 4: 399.3 * Mês 5: 439.23 * Mês 6: 483.15
Objeto Math
O JavaScript possui um objeto chamado Math que nos permite resolver vários tipos de problemas matemáticos. Os exemplos a seguir vão ser resolvidos com a ajuda dele.
Elevar um número a potência de "n"
A potenciação, também chamada de exponenciação é uma operação matemática que representa a multiplicação de fatores iguais. Usamos a potenciação quando um número é multiplicado por ele mesmo várias vezes.
Elevar o número 5 a potência de 4 tem como resultado o número 625, que é 5 x 5 x 5 x 5
No JavaScript podemos resolver a potenciação utilizando o método pow do objeto Math.
console.log(Math.pow(3));
Raiz quadrada
A raiz quadrada é uma operação básica inversa da potenciação. Assim, calcular a raiz quadrada de um número n é descobrir qual número elevado ao quadrado resulta em n. Por exemplo, a raiz quadrada de 9 é igual a 3, pois, 3 x 3 = 9.
No JavaScript podemos resolver a raiz quadrada utilizando o método sqrt do objeto Math.
var raiz = Math.sqrt(3);
console.log(raiz);
Raiz cubica
A raiz cúbica de um número "n" é procurar qual número multiplicado por ele mesmo três vezes é igual a "n". Por exemplo, a raiz cúbica de 10 é igual a 2.154434690031884, pois este número multiplicado três vezes por ele mesmo é 10.
var raiz = Math.cbrt(10);
console.log(raiz);
Arredondar um número para o inteiro mais próximo
Para arredondar um número podemos utilizar o método round do objeto Math.
var resultado1 = Math.round(1.49);
var resultado2 = Math.round(1.5);
console.log(resultado1);
console.log(resultado2);
Perceba que em nosso exemplo ele arredondou 1.5 para 2. Para controlar a forma como o arredondamento é feito podemos usar os métodos ceil e floor. Ceil vai fazer o arredondamento para cima e floor vai arredondar para baixo.
var resultado1 = Math.ceil(1.5);
var resultado2 = Math.floor(1.5);
console.log(resultado1);
console.log(resultado2);
Retornando o maior ou menor valor de um intervalo de números.
Para retornar o menor número de um intervalo de números podemos usar o método min do objeto Math.
var menor = Math.min(5,7,2,8,19, 9);
console.log(menor);
Para retornar o maior número de um intervalo de números podemos usar o método max do objeto Math.
var maior = Math.max(5, 7, 2, 8, 19, 9);
console.log(maior);
Você pode usar um array para passar o intervalo de números. A partir do ECMAScript 6 você pode usar o spread operator para extrair os valores do array.
var numeros = [5, 7, 2, 8, 19, 9];
var menor = Math.min(...numeros);
var maior = Math.min(...numeros);
console.log(menor);
console.log(maior);
Gerando um número randômico.
O método random do objeto Math permite gerar um número de ponto flutuante aleatório entre 0 1 e.
var numero = Math.random();
console.log(numero);
Para gerar um número aleatório até um determinado número inteiro podemos multiplicar por um inteiro qualquer e usar o método floor para que o resultado seja um inteiro arredondado para baixo. No exemplo a seguir, ele vai gerar um número aleatório de 0 a 9.
var numero = Math.floor(Math.random() * 10)
console.log(numero);
Se você quiser gerar um número aleatório tendo como base um número inicial e final pode fazer da seguinte forma:
var max = 10;
var min = 80;
resultado = Math.floor(Math.random() * (max - min + 1)) + min;
console.log(resultado);
Retornar a parte inteira de um número.
Para fazer isso podemos usar o método trunc do objeto Math.
var numero = 5.25;
var inteiro = Math.trunc(numero);
console.log(inteiro);
Retornar o valor absoluto de um número.
O método ABS do objeto Math retorna o valor absoluto de um número. Seu retorno será sempre um número positivo. Caso seja informado um valor negativo, ele retornará o mesmo como positivo
var numero = -10.28;
var resultado = Math.abs(numero);
console.log(resultado);
Verificar se o número é positivo ou negativo.
O método sign do objeto Math permite verificar se o número informado é positivo ou negativo. Se o número for positivo ele retorna 1, caso contrário o retorno é zero.
var numero1 = 10.5;
var numero2 = -2.5;
console.log(Math.sign(numero1));
console.log(Math.sign(numero2));
Calculando a área de um círculo
A área de um círculo pode ser calculada por meio do produto entre a constante PI e a medida do raio ao quadrado.
O valor de PI pode ser obtido atráves da constante PI do objeto Math. Pi equivale a 3,14
console.log(Math.PI)
Com base no valor do raio, basta multiplicar por Pi
var raio = 5;
var area = raio * Math.PI;
console.log(area);
Calculado seno, cosseno ou tangente
O objeto Math também nos permite resolver de forma fácil problemas de trigonometria.
Seno, Cosseno e Tangente de um ângulo são relações entre os lados de um triângulo retângulo. Essas relações são chamadas de razões trigonométricas, e resultam da divisão entre as medidas dos seus lados.
O triângulo retângulo é aquele que apresenta um ângulo interno reto (igual a 90º). O lado oposto ao ângulo de 90º é chamado de hipotenusa e os outros dois lados são chamados de catetos.
Os valores do seno, do cosseno e da tangente são calculados em relação a um determinado ângulo agudo do triângulo retângulo.
- Seno
É a razão entre a medida do cateto oposto ao ângulo agudo e a medida da hipotenusa de um triângulo retângulo.
- Cosseno
É a razão entre a medida do cateto adjacente ao ângulo agudo e a medida da hipotenusa de um triângulo retângulo.
- Tangente
É a razão entre a medida do cateto oposto e a medida do cateto adjacente ao ângulo agudo de um triângulo retângulo.
No Javascript, o seno, cosseno e tangente pode ser calculado respectivamente pelos métodos sin, cos e tan. Essas 3 funções recebem um parâmetro que é um ângulo em radianos e retornam como resposta um radiano. O radiano é a razão entre o comprimento de um arco e o seu raio. Ele é a unidade padrão de medida angular.
Vamos a um exemplo prático. Vamos calcular o seno, cosseno e tangente do angulo em graus com o valor de 53.
Para converter de graus para radianos fazemos da seguinte forma:
radianos = graus / (180 / Math.PI);
E para converter de radianos para graus:
graus = radianos * (180 / Math.PI);
Nosso código ficará da seguinte forma:
var angulo = 53;
var radianos = angulo / (180 / Math.PI);
var seno = Math.sin(radianos);
var cosseno = Math.cos(radianos);
var tangente = Math.tan(radianos);
console.log('Seno em radianos:' + seno);
console.log('Cosseno em radianos:' + cosseno);
console.log('Tangente em radianos:' + tangente);
var angulo_seno = seno * (180 / Math.PI);
var angulo_cosseno = cosseno * (180 / Math.PI);
var angulo_tangente = tangente * (180 / Math.PI);
console.log('Seno em graus:' + angulo_seno);
console.log('Cosseno em graus:' + angulo_cosseno);
console.log('Tangente em graus:' + angulo_tangente);
Você pode consultar esta tabela para validar estes resultados:
Também é possível com o JavaScript calcular as razões trigonométricas inversas, que são as seguintes
- Cossecante: A cossecante é o inverso do seno.
- Secante: A secante é o inverso do cosseno.
- Cotangente: A cotangente é o inverso da tangente.
Para calcular estes valores existem os métodos asin, acos e atan. Da mesma forma que as funções que vimos até agora, elas recebem um valor em radianos e retornam um valor em radianos. A seguir um exemplo usando o mesmo angulo do exemplo anterior:
var angulo = 53;
var radianos = angulo / (180 / Math.PI);
var cossecante = Math.asin(radianos);
var secante = Math.acos(radianos);
var cotangente = Math.atan(radianos);
console.log('Cossecante em radianos:' + cossecante);
console.log('Cosseno em radianos:' + secante);
console.log('Cotangente em radianos:' + cotangente);
var angulo_cossecante = cossecante * (180 / Math.PI);
var angulo_secante = secante * (180 / Math.PI);
var angulo_cotangente = cotangente * (180 / Math.PI);
console.log('Cossecante em graus:' + angulo_cossecante);
console.log('Secante em graus:' + angulo_secante);
console.log('Cotangente em graus:' + angulo_cotangente);
Também é possivel trabalhar com funções hiperbólicas. Como vimos, seno, cosseno e tangente são obtidos através dos métodos sin,cos e tan. Suas versões hiperbólicas são sinh, cosh e tanh. As funções inversas também tem funções hiperbólicas. Como vimos, as funções inversas são asin, acos e atan. Suas versões hiperbólicas são asinh, acosh e atanh.
Logaritmos
O logaritmo é a uma operação na qual queremos descobrir o expoente que uma dada base deve ter para resultar em uma certa potência.
No JavaScript o objeto Math tem os seguintes métodos para trabalhar com logaritmos.
Math.log(x)
Retorna o logaritmo natural (log con base e, também chamado ln) de um numero
Math.log1p(x)
Retorna o logaritmo natural (log con base e, também chamado ln) de 1 + x para um número "x" informado.
Math.log2(x)
Returna o logaritmo base 2 de um número.
var numero = 10;
console.log(Math.log(numero));
console.log(Math.log1p(numero));
console.log(Math.log2(numero));
A base "e" do logaritmo é o chamado número de Euler, que é a base dos logaritmos naturais. Existe uma constante com este valor no objeto Math.
console.log(Math.E);
Se você quiser elevar o número de Euler a uma determina potência pode utilizar o método exp.
var numero = 3;
console.log(Math.exp(numero));
Constantes do objeto Math.
O objeto Math possui valores constantes que podem ser utilizados para outros títulos de cálculo
console.log(Math.E); //Base do logaritmo natural; vale aproximadamente 2.718
console.log(Math.LN2); //Logaritmo natural de 2 ; vale aproximadamente 0.693
console.log(Math.LN10); //Logaritmo natural de 10 ; vale aproximadamente 2.302
console.log(Math.LOG2E); //Logaritmo de e na base 2 ; vale aproximadamente 1.442
console.log(Math.LOG10E); //Logaritmo de e na base 10 ; vale aproximadamente 0.434
console.log(Math.PI); //A constante pi (razão do comprimento pelo diâmetro de um círculo) ; 3.141592653589793
console.log(Math.SQRT1_2); //Raiz quadrada de 0.5 ; vale aproximadamente 0.707
console.log(Math.SQRT2); //Raiz quadrada de 2 ; vale aproximadamente 1.414
Objeto Number
Além do objeto Math, o JavaScript tem o objeto Number que permite fazer validações com os números. Veja alguns exemplos práticos a seguir
- Conversão de dados
Veja o exemplo a seguir:
var numero = "74";
var resultado = numero + 3;
console.log(resultado);
O resultado foi 745 e não 77 porque o número 74 está como string. O objeto Number pode nos ajudar na conversão.
var numero = "74";
var resultado = Number(numero) + 3;
console.log(resultado);
Outra habilidade que o objeto Number possui é verificar se um número é inteiro ou não. O método isInteger retorna true se o número informado for inteiro, caso contrário false.
var numero1 = 60;
var numero2 = 47.3
console.log(Number.isInteger(numero1));
console.log(Number.isInteger(numero2));
O objeto Number possui um método chamado isNaN que recebe um parâmetro e valida se ele é um número inválido. Em caso positivo retorna true, caso contrário retorna false.
var parametro1 = Number(60);
var parametro2 = Number("Bins");
var parametro3 = Number("2022-07-03");
var parametro4 = Number(60.56);
console.log(Number.isNaN(parametro1));
console.log(Number.isNaN(parametro2));
console.log(Number.isNaN(parametro3));
console.log(Number.isNaN(parametro4));
Neste exemplo, o primeiro e o último exemplo retornar false, já que são números válidos.