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)
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...