Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

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!