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

IMC em uma function - Causando Erro 'NaN'

Estou tentando colocar em uma função o calculo de IMC e não está rolando, oque pode estar ocorrendo em meu código ?

<meta charset="UTF-8">

<script>
var linha = function (){
document.write("<hr>");
};
var mostra = function (frase){
document.write(frase);
linha();
linha();
}

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

var nome = prompt ("Qual é o seu nome ?" );
mostra ("Bem vindo(a)" + nome);
var idade = prompt ("Qual é sua idade ?");
mostra("Sua idade é: "+ (idade)+ " anos. ");

var altura = prompt ( "Qual a sua altura?");
var peso = prompt ("Qual o seu peso?");


mostra("Sua Altura:"+ altura );
mostra("Seu peso é:" + (peso)+ " Kg.");
mostra ("Seu IMC é:" + imc);
mostra ( "Ultrapassa " + (imc - 18.5) + "do  seu limite de magreza." ); // Calculo do indice sob valor padrão de 18.5
mostra ("Você está a "+ (imc - 35) + "Kg do limite a uma obsedidade severa que é 35Kg, cuide -se!");
var dias = idade * 365;

mostra("Você já viveu "+ (dias)+ " dias de vida.");
var batimentos = dias * 24 * 60 * 80; //É calculado tempo de 24 horas * 60 minutos * 80 batimentos por segundo ( em media) .
mostra("Seu Coração já bateu " + batimentos + " vezes. Haja Coração!!!");

</script>

sem a função prompt funcionou, mas sem interação como vi no exercício não ficou legal. dês de já muito obrigado a quem me ajudar.

7 respostas

Na sua função para calcular imc tem dois pontos que podem ser melhorados...

1º Não há necessidade da variável imc para realizar o cálculo. Use o return peso/(altura*altura); direto eliminando a var imc de dentro da função.

2º Qualquer coisa escrita abaixo do return não será executada. E como você está retornando um valor com a função não deve fazer com que esta tente escrever algo. São propósitos diferentes.

Na hora que você tiver que fazer referência a função não se esqueça de passar os parâmetros de entrada. Quando você fez as chamadas você está usando sempre imc ou (imc - 18.5) ou (imc - 35).

Quando você fizer a chamada tem que fazer imc(peso, altura).

Ahh só pra terminar, o NaN é basicamente a mesma coisa que não definido. Justamente porque quando você está fazendo a chamada da função imc não está passando parâmetro algum então a sua função não calcula nada e retorna indefinido.

nossa ! muito obrigado Felipe pela ótima explicação, no exercício final do capítulo acabei fazendo da forma tradicional para funcionar, porém voltei atrás para sanar essa duvida. o return não tinha ficado muito claro.

valeu mesmo pela força amigo.

abraços e fique com Deus

só me mostre como seria a função junto a cálculos distintos como - 18.5 ....

por favor

pelo que entendi, vc quer o resultado da função - 18.5

então seria isso: imc(peso, altura) - 18.5

solução!

Pra fazer a chamada concatenando com textos como no caso do mostra("Ultrapassa " + imc - 18.5) você precisa envolver o cálculo com parênteses para evitar "confusão" por parte do navegador e ele não tentar fazer cálculos com tipos diferentes.

Você faz algo como:

mostra( "Ultrapassa " + (imc(peso,altura) - 18.5) );

Como você faz referência várias vezes a função imc, guarde o seu valor em uma variável para evitar que o navegador tenha que refazer as contas sempre.

ex.:

var valorImc = imc(peso, altura);
mostra( "Ultrapassa " + (valorImc - 18.5) + "...");
mostra( "Você está a " + (valorImc - 35) + "...");

Entendi Felipe, muito obrigado pela explicação novamente. Solicito pelo prompt e depois deixo a função se encarregar de calcular seguido do mostra realizar as impressões do resultado.

vou praticar isso de varias formas para fixação...

valeu mesmo !!!