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

O resultado do IMC é sempre o peso

Boa tarde! Estou tentando fazer o código, porém o resultado que ele dá é sempre o peso.

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    function calculaImc(peso, altura) {

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

    var nome = prompt("Olá! Informe o seu nome, por favor.");
    var altura = parseFloat (prompt ("Agora nos informe a sua altura, por favor."));
    var peso = parseFloat (prompt ("Por ultimo, nos informe o seu peso!"));


    var imcCalculado = calculaImc(peso, altura);

mostra(nome + " o seu imc é " + imcCalculado);

if (imcCalculado < 18.5) {
    mostra("Você está abaixo do recomendado.");
}

if (imcCalculado > 35) {
    mostra("Você está acima do recomendado.");
}

</script>

Alguém consegue entender por que? Obrigado!

4 respostas

Fala Felipe!

É provável que o problema seja o valor que você está informando para o calculo do IMC. Tente rodar o código abaixo com os valores que você está testando:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    function calculaImc(peso, altura) {

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

    var nome = prompt("Olá! Informe o seu nome, por favor.");
    var altura = parseFloat (prompt ("Agora nos informe a sua altura, por favor."));
    var peso = parseFloat (prompt ("Por ultimo, nos informe o seu peso!"));


    var imcCalculado = calculaImc(peso, altura);

mostra(nome + " o seu imc é " + imcCalculado);

if (imcCalculado < 18.5) {
    mostra("Você está abaixo do recomendado.");
}

if (imcCalculado > 35) {
    mostra("Você está acima do recomendado.");
}

//IMC entre 18 e 35
if (imcCalculado > 18 && imcCalculado < 35) {
    mostra("Seu peso está de boa.");
}

</script>

Perceba que coloquei um IF a mais que trata a possibilidade do IMC estar entre 18 e 35.

Diga se deu certo!

Não deu certo, o erro continua! no primeiro pop up respondi com meu nome "felipe", depois respondi com minha altura, "1,83" e depois peso "83", porém a resposta sempre é o peso.

"felipe o seu imc é 83 Você está acima do recomendado."

o resultado correto, segundo o calculo que fiz na calculadora é 24,78425751739377.

solução!

Já vi o problema Felipe.

Tente colocar 1.83 em vez de 1,83. O parseFloat não entende a virgula e acaba transformando o valor, te retornando somente o que está antes da vírgula.

Tente assim:

<meta charset="UTF-8">
<script>
    function pulaLinha() {
        document.write("<br>");
    }

    function mostra(frase) {
        document.write(frase);
        pulaLinha();
    }

    function calculaImc(peso, altura) {
        var imc = (peso / (altura * altura));
        return imc
    }

    var nome = prompt("Olá! Informe o seu nome, por favor.");
    var altura = prompt ("Agora nos informe a sua altura, por favor.");
    var peso = prompt ("Por ultimo, nos informe o seu peso!");

    var alturaSemVirgula = altura.toString().replace(",", ".");
    var pesoSemVirgula = peso.toString().replace(",", ".");

    var imcCalculado = calculaImc(pesoSemVirgula, alturaSemVirgula);

mostra(nome + " o seu imc é " + imcCalculado);

if (imcCalculado < 18.5) {
    mostra("Você está abaixo do recomendado.");
}

if (imcCalculado > 35) {
    mostra("Você está acima do recomendado.");
}

if (imcCalculado > 18 && imcCalculado < 35) {
    mostra("Seu peso está de boa.");
}

</script>

Removi o parseFloat e acrescentei um replace pra trocar a virgula pelo ponto se a altura tiver virgula, daí tanto faz como for digitado ele sempre vai calcular.

Espero ter ajudado.

Muito bom! Obrigado Allan! O problema era de fato o ponto e virgula, mas muito legal a dica do replace. Vlew!