Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Melhorando o programa do Imc

Quando testo o programa no navegador, acaba ocorrendo um erro. Após calcular o imc, o programa acaba apresentando duas msgs: a que se refere ao imc equivalente às informações apresentadas e uma informando que o usuário está abaixo do peso ideal, independente dos valores fornecidos pelo usuário. Não consegui entender o pq disso. Por isso, se alguém conseguir me explicar o pq, ficaria bastante grato.

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br><br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function calculaImc(peso,altura) {

        var imc = peso / (altura * altura);
        return imc;
    }

    var nomeUsuario = prompt("Por favor, informe seu nome");
    var usuarioPeso = (prompt("Por favor, informe seu peso"));
    var usuarioAltura = (prompt("Por favor, informe sua altura"));

    var imcUsuario = calculaImc(usuarioPeso, usuarioAltura);

    mostra(nomeUsuario + ", seu imc é: " + imcUsuario);

    if (imcUsuario < 17) {

        mostra(nomeUsuario + ", você está muito abaixo do peso.");
    }

    if (imcUsuario >= 17 && imcUsuario < 18,5) {

        mostra(nomeUsuario + ", você está abaixo do peso ideal.");
    }

    if (imcUsuario >= 18,5 && imcUsuario < 25) {

        mostra(nomeUsuario + ", você está com o seu peso ideal.");
    }

    if (imcUsuario >= 25 && imcUsuario < 30) {

        mostra(nomeUsuario + ", você está com sobrepeso.");
    }

    if (imcUsuario >= 30 && imcUsuario < 35) {

        mostra(nomeUsuario + ", você tem obesidade.");
    }

    if (imcUsuario >= 35 && imcUsuario < 40) {

        mostra(nomeUsuario + ", você tem obesidade severa.");
    }

    if (imcUsuario > 40) {

        mostra(nomeUsuario + ", você tem obesidade mórbida.");
    }

</script>
2 respostas
solução!

Olá Hugo! Achei dois possíveis erros neste código, o primeiro pode ser devido a não colocar o parseInt(); para converter um texto (String) em número, vi que colocou o comando prompt entre parênteses, mas necessitava do parseInt antes ficando var usuarioPeso = parseInt(prompt("Por favor, informe seu peso")); var usuarioAltura = parseInt(prompt("Por favor, informe sua altura")); Mais embaixo no código também possui os ifs para verificar a classificação do IMC do usuário, entretanto, na parte em que está 18,5 deveria ser 18.5, o correto para a forma que utilizamos no Brasil é 18,5 mesmo indicando números decimais com uma vírgula (,), mas como a linguagem é em outra língua, deve ser feito da maneira correta para a linguagem que no caso seria utilizar 18.5

O código ficaria assim:

<meta charset="UTF-8">
<script>

    function pulaLinha() {

        document.write("<br><br>");
    }

    function mostra(frase) {

        document.write(frase);
        pulaLinha();
    }

    function calculaImc(peso,altura) {

        var imc = peso / (altura * altura);
        return imc;
    }

    var nomeUsuario = prompt("Por favor, informe seu nome");
    var usuarioPeso = parseInt(prompt("Por favor, informe seu peso"));
    var usuarioAltura = parseInt(prompt("Por favor, informe sua altura"));

    var imcUsuario = calculaImc(usuarioPeso, usuarioAltura);

    mostra(nomeUsuario + ", seu imc é: " + imcUsuario);

    if (imcUsuario < 17)
        mostra(nomeUsuario + ", você está muito abaixo do peso.");

    else if (imcUsuario >= 17 && imcUsuario < 18.5) 
        mostra(nomeUsuario + ", você está abaixo do peso ideal.");

    else if (imcUsuario >= 18.5 && imcUsuario < 25) 
        mostra(nomeUsuario + ", você está com o seu peso ideal.");

    else if (imcUsuario >= 25 && imcUsuario < 30) 
        mostra(nomeUsuario + ", você está com sobrepeso.");

    else if (imcUsuario >= 30 && imcUsuario < 35) 
        mostra(nomeUsuario + ", você tem obesidade.");

    else if (imcUsuario >= 35 && imcUsuario < 40) 
        mostra(nomeUsuario + ", você tem obesidade severa.");

    else
        mostra(nomeUsuario + ", você tem obesidade mórbida.");

</script>

Tomei a liberdade para modificar a parte com as condicionais, da forma que você utilizou está correto, mas prefiro assim que acredito ficar melhor esteticamente, e é uma dica ai também, pois quando a condicional if ou os laços de repetição possuem apenas uma linha dentro deles, pode-se deixar sem abrir e fechar chaves que algumas linguagens entendem, e também a parte de else if é para ligar um if no outro, por exemplo, ficaria Se (isto acontecer), Senão Se (isto acontecer), Senão (isto acontece, mas não pode utilizar este último parêntese dentro do Senão, no caso else).

Olá Mateus! Acabei de aplicar as mudanças que você sugeriu. Agora o código funciona perfeitamente. Obrigado pela dica de acrescentar o número decimal com um ponto " . " ao invés de usar a vírgula. Além da dica de usar o "else if", que eu ainda não sabia.