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

Problema com o cálculo do IMC junto com prompt, parseInt e parseFloat- Dúvida

<meta charset="UTF-8">

<script>

    function pulaLinha() {

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

    function mostra(frase) {

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

    function calculaImc(altura, peso) {

        return peso / (altura * altura);
}

var nome = prompt("Informe o seu nome");
var alturaInformada = prompt(nome + ", informe sua altura");
var pesoInformado = prompt(nome + ", informe seu peso");

var imc = calculaImc(alturaInformada, pesoInformado);

document.write(nome + ", o seu IMC é " + imc);

</script>

O código acima está igual ao do professor, porém ele não funciona corretamente ( ao invés de aparecer o número, aparece NaN).;

**Cheguei até tentar corrigir esse problema usando :

var alturaInformada =parseInt( prompt(nome + ", informe sua altura")); var pesoInformado = parseInt(prompt(nome + ", informe seu peso"));

E o chrome passou o valor do peso como resultado.

  • Ao perceber que também deu errado usando parseInt, esse trecho do código por :

var alturaInformada =parseFloat( prompt(nome + ", informe sua altura")); var pesoInformado = parseFloat(prompt(nome + ", informe seu peso"));

E também nesse caso o chrome passou o valor do peso como resultado.

Será que o código acima está com algum detalhe faltando para funcionar corretamente a calculadora de IMC?

11 respostas

Olá, faltou arrendondar usando o Math.Round e no var imc = Math.round(calculaImc(alturaInformada, pesoInformado)); e coloquei a função pulaLinha();

function pulaLinha() {

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

}

function mostra(frase) {

    document.write(frase);
    pulaLinha();

}

function calculaImc(altura, peso) {

    return peso / (altura * altura);

}

var nome = prompt("Informe o seu nome"); var alturaInformada = prompt(nome + ", informe sua altura"); var pesoInformado = prompt(nome + ", informe seu peso");

var imc = Math.round(calculaImc(alturaInformada, pesoInformado));

document.write(nome + ", o seu IMC é " + imc); pulaLinha();

Acredito que o problema possa estar na escrita da função de calcularImc, é preciso declarar a variável imc e então a fórmula do cálculo:

function calculaImc(peso, altura) {

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

GILBERTO DE ARAUJO LEITE, eu tentei fazer do jeito que vc falou:

<meta charset="UTF-8">

<script>

    function pulaLinha() {

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

    function mostra(frase) {

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

    function calculaImc(altura, peso) {

        return peso / (altura * altura);
}

var nome = prompt("Informe o seu nome");
var alturaInformada = prompt(nome + ", informe sua altura");
var pesoInformado = prompt(nome + ", informe seu peso");

var imc = Math.round(calculaImc(alturaInformada, pesoInformado));

document.write(nome + ", o seu IMC é " + imc);
pulaLinha();
</script>

Só que ainda deu NaN como resultado. No seu navegador chrome está dando certo desse jeito?

Nathalia C. C. M. Carvalho ,eu usei o que vc falou, porém aparece para mim 'IMC is not defined' no console do chrome.

Depois tentei fazer :

<meta charset="UTF-8">

<script>

    function pulaLinha() {

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

    function mostra(frase) {

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

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

var nome = prompt("Informe o seu nome");
var alturaInformada = prompt(nome + ", informe sua altura");
var pesoInformado = prompt(nome + ", informe seu peso");


document.write(nome + ", o seu IMC é " + imc);

</script>

E também deu o mesmo problema. No seu chrome funcionou?

O meu está funcionando... mas eu não coloquei a declaração de variável dentro da função calculaImc... eu declarei direto no return como seria calculado o imc.

Fiz assim:


    function calculaImc(peso, altura) {

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

eu coloquei a declaração da variável do imc abaixo da variável pesoInformado, fora da função, assim:

var imc = calculaImc (pesoInformado, alturaInformada)

Pelo que vi essas são as únicas diferenças. Pelo que lembro do vídeo, o professor disse para colocar a variável do imc fora da função, senão ela não vai ser chamada.

<meta charset="UTF-8">

<script>

    function pulaLinha() {

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

    function mostra(frase) {

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

    function calculaImc(altura, peso) {

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

var nome = prompt("Informe o seu nome");
var alturaInformada = prompt(nome + ", informe sua altura");
var pesoInformado = prompt(nome + ", informe seu peso");

var imc = calculaImc(alturaInformada, pesoInformado);

document.write(nome + ", o seu IMC é " + imc);

</script>

No meu ainda não deu certo.No chrome aparece : Carlos, o seu IMC é NaN

Oi Carlos. Seu código está todo certo... copiei e colei aqui no vscode e rodei no chrome e deu certinho... você atualizou a página? Lember que a cada alteração precisa salvar no editor de texto(ctrl+s) e então atualizar o navegador (ctrl+r).

Veja aí se deu certo...!

Olha só como funciona

Nathalia, então , eu copiei o código e salvei no editor de texto e para mim funcionava quase corretamente (o peso só é dividido pela altura uma vez ao invéz de duas) quando o número colocado como altura no prompt é inteiro, porém quando o número colocado como altura no prompt é decimal, o resultado que sai no navegador é o peso. O seu está funcionando corretamente quando você coloca a altura em decimal? E quando você coloca altura como inteiro , o chrome conseguiu dividir duas vezes , ou também ele só dividiu uma vez pela altura?

solução!

Carlos, você está usando 'ponto' ou 'vírgula' para marcação do número decimal? O correto é usar 'ponto'...

Ele faz o quadrado da altura primeiro e depois divide o peso por esse resultado...

no meu caso seria...

imc= peso / (altura * altura)

52 / (1.52 * 1.52) = 52 / 2.3104 = 22.5069

é assim que está funcionando seu código pra mim...

Muito obrigado Nathalia! Foi esse mesmo o problema! :)

Excelente Carlos! Vitória!!!

Vamos em frente...