Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
10
respostas

Cálculo do IMC

O cálculo do IMC não, necessariamente, necessita de parênteses. Na matemática, a multiplicação e divisão possuem a mesma ordem de precedência e não interferem o resultado final. Dessa maneira, o exercício está com duas respostas corretas.

10 respostas

Oi, Mauricio, tudo bem?

O uso do parênteses é para ganrantir que a multiplicação será calculada primeiro e que não irá haver divisão entre o peso com a altura, o que daria em um resultado de cálculo que não é o esperado. Os parênteses devem ser usados para priorizar algumas expressões diante de outras, que no caso, é o uso deles no cálculo do IMC. Se você testar esse cálculo sem os parênteses e com os parênteses, verás resultados diferentes, por exemplo:

let imc = valorPeso /(valorAltura * valorAltura);

Peso = 60 Altura = 1.60 IMC = 23.44

Já se o cálculo for feito com a ausência dos parênteses, o resultado com os mesmos valores para o IMC será de:

let imc = valorPeso /valorAltura * valorAltura;

Peso = 60 Altura = 1.60 IMC = 60

Porquê?

Porque o cálculo será feito na sequência errada, começa dividindo o peso com a altura, e com esse resultado, multiplica novamente com a altura. O que o certo seria começar com a potenciação.

Espero ter te ajudado!

Obrigado Laís, mas não concordo. Quando há apenas multiplicações e divisões os parênteses são desnecessários. Isso é um fundamento básico de matemática. Faça o exemplo com e sem e depois me diga qual foi o resultado.

solução!

Bom dia, Mauricio! Como vai?

Na matemática o cálculo das expressões seguem as seguintes regras:

Posto isto, eis então a ordem correta para executar as operações matemáticas:

  1. Parêntesis;
  2. Expoentes;
  3. Multiplicações e Divisões; (da esquerda para a direita)
  4. Somas e Subtrações. (da esquerda para a direita)

Então veja que embora multiplicação e divisão tenham a mesma ordem de precedência como vc falou, ainda assim você esqueceu de considerar que a expressão é avaliada da esquerda pra direita.

Sendo assim, 10/5*2 será resolvido dessa forma

10/5 = 2;
2*2 = 4.

ao passo que 10*5/2será resolvido assim

10*5 = 50;
50/2 = 25.

E, no JavaScript, as expressões também são avaliadas da esquerda pra direita! Pois todo o código JavaScript é avaliado nessa diretação! Sendo assim, as expressões dos exemplos anteriores teriam o mesmo resultado num código JavaScript!

Dessa forma, no cálculo do IMC, tanto na matemática quanto no JavaScript, caso seja feito peso / altura * altura, os passos seriam

peso / altura = resultado1;
resultado1 * altura = resultado2.

resultando num cálculo incorreto!

Justamente por isso, tanto na matemática quanto no JavaScript precisamos usar os parênteses pra alterar a ordem de execução dos cálculos fazendo peso / ( altura * altura )!

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

Em programação a divisão tem precedência, mas quando você informa uma multiplicação ou uma soma entre parenteses (mauriciofontana) como no exemplo que você abordou anteriormente, tudo o que tiver entre parenteses será calculado primeiro.

Vocês ainda continuam equivocados. No cálculo do IMC não é necessário parênteses: peso/altura*altura, supondo peso = 80 e altura = 1,6. De qualquer maneira que você faça a conta, o resulta SEMPRE será 31,25.

(80/1,6) x 1,6 = 50/1,6 = 31,25

80/(1,6 x1,6) = 80/2,56 = 31,25

80/1,6 x 1,6 = 31,25 independentemente dos parênteses.

Qual maneira de fazer a conta que dá resultado diferente?

Ah, lembrando que a divisão é a operação inversa da multiplicação, portanto, dividir por 1,6 é o mesmo que multiplicar por 0,625. Logo, a expressão para o cálculo dessa sentença poderia ser escrita assim:

80 x 0,625 x 0,625 = 31,25

A ordem dos fatores não altera o produto, lembram disso?

Opa, Mauricio! Como vai?

Este é um print que fiz no console do navegador Google Chrome com as expressões que vc citou no seu último comentário. Veja que os resultados batem exatamente com o comportamento que eu e a Laís te explicamos anteriormente.

Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

E aí Mauricio!

Você está certíssimo em dizer que na matemática a ordem dos fatores não altera o resultado. Acontece que o programa lê seu código da esquerda para direita e podem surgir alguns problemas de interpretação. Vou tentar te dar um exemplo e mando junto um código para você rodar ai na sua maquina e conferir a diferença.

var imc = peso(70) / altura(1.70) * altura(1.70)

70 / 1.70 * 1.70 =>

41,7 * 1.70 =>

70;

Com um imc igual a 70, ou temos alguem a beira da morte, o que é triste, ou nosso codigo esta errado, o que tambem é triste. O que aconteceu aqui é que o nos não deixamos claro que ambos os "altura" estão no denominador da fração. Espero ter te ajudado de alguma forma :)

<!DOCTYPE html>
<html>
<body>

<script>
//
var calculo1 = 70 / 1.70 * 1.70;
document.write(calculo1 + "<br>");
var calculo2 = (70 / 1.70) * 1.70;
document.write(calculo2 + "<br>");
var calculo3 = 70 / (1.70 * 1.70) + "<br>";
document.write(calculo3);
</script> 

</body>
</html>

Obs: É a minha primeira resposta, desculpe estar mal formatada

Olá Maurício,

Se nenhum dos comentários anteriores sanaram completamente a dúvida, sugiro que acompanhe junto comigo o primeiro exemplo do seu ultimo comentário.

(80/1,6) x 1,6 = 50/1,6 = 31,25

Escrevendo de outra forma, para melhorar a visualização:

(80/1,6)    x 1,6
    50    / 1,6
        31,25

O que realmente deveria ter acontecido, no seu exemplo:

(80/1,6)    x 1,6: 
    50    x 1,6:
        80

O que pode estar te confundindo é que o que você fez foi dividir o primeiro resultado por 1,6 e não multiplicar.

Espero ter ajudado, att =)

Boa noite a todos,

Realmente eu tinha me equivocado. Na verdade eu estava testando outro exemplo apenas com multiplicações de números com ponto flutuante. Desculpem-me por ser tão teimoso e agradeço o esforço dos que não desistiram de me explicar o correto. Obrigado a Laís Cavalcanti, Gabriel Leite, Carlos Oliveira, Lúcio Carvalho Almeida e Leonardo Lopes Bezerra.

Opa, Mauricio! Por nada!

Sempre que tiver qualquer dúvida é só mandar aqui no fórum da Alura!

Grande abraço e bons estudos, meu aluno!