1
resposta

Fiz um pouco mais completo as tabelas do IMC.

<meta charset="UTF-8">

<script>

function pl() {

    document.write("<br>")
}


function mostrar(texto) {

    document.write(texto);
    pl();
}


function calcIMC (altura, peso) {

    return imc = peso / (altura * altura);

}

var nomeUs = prompt ("Informe seu nome.");
var alturaInf = prompt (nomeUs + ", Informe sua altura (ex.: 1.90): ");
var pesoInf = prompt (nomeUs + " ,Informe seu peso (ex.:70): ");

var imc = calcIMC (alturaInf, pesoInf);



if (imc < 18.5) {

    alert(nomeUs + ", o seu IMC é: " + Math.round (imc) + " Você está ABAIXO do recomendado");
    //mostrar("MAGREZA");

}

if (imc > 18.5 && imc <= 25) {

    alert(nomeUs + ", o seu IMC é: " + Math.round (imc) + " --- Está NORMAL ---");
    //mostrar("NORMAL");

}

if (imc >= 26 && imc <= 30) {

    alert(nomeUs + ", o seu IMC é: " + Math.round (imc) + " --- Você está com SOBREPESO ---");
    //mostrar("SOBREPESO");

}

if (imc >= 31 && imc <= 40) {

    alert(nomeUs + ", o seu IMC é: " + Math.round (imc) + " --- Você está com OBESIDADE ---");
    //mostrar("OBESIDADE");

}

if (imc >= 41) {

    alert(nomeUs + ", o seu IMC é: " + Math.round (imc) + " --- Você está com OBESIDADE GRAVE ---");
    //mostrar("OBESIDADE GRAVE");

}



//mostrar("Para utilizar novamente, reinicie a página.");
</script>
1 resposta

Olá, Nelquin! Tudo bom?

Desculpe pela demora em obter retorno.

Parabéns pela sua resolução, a estrutura ficou bem completa. No geral o código funciona muito bem, mas possui alguns pontos onde o código ainda não responde.

No seguinte bloco de código,

if (imc < 18.5) {

    alert(nomeUs + ", o seu IMC é: " + Math.round (imc) + " Você está ABAIXO do recomendado");
    //mostrar("MAGREZA");

}

if (imc > 18.5 && imc <= 25) {

    alert(nomeUs + ", o seu IMC é: " + Math.round (imc) + " --- Está NORMAL ---");
    //mostrar("NORMAL");

}

O primeiro elemento if < 18.5 cobre todos os valores menores que 18.5, e o segundo elemento if (imc > 18.5 && imc <= 25) cobre todos os elementos maiores que 18.5 e também menores ou iguais a 25. Mas observe que ainda falta definir qual a decisão para quando a resposta é exatamente imc = 18.5.

Nesse caso, a solução a ser utilizada é baseada nos limites da tabela do IMC, que afirma que o valor 18.5 está incluso nesse segundo intervalo, então podemos trocar o operador > por >=:

if (imc < 18.5) {

    alert(nomeUs + ", o seu IMC é: " + Math.round (imc) + " Você está ABAIXO do recomendado");
    //mostrar("MAGREZA");

}

if (imc >= 18.5 && imc <= 25) {

    alert(nomeUs + ", o seu IMC é: " + Math.round (imc) + " --- Está NORMAL ---");
    //mostrar("NORMAL");

}

De forma semelhante, nos limites dos outros intervalos nós também estamos saltando alguns espaços da tabela do IMC, entre: 25 e 26, 30 e 31, e 40 e 41. Exemplo:

  • if (imc >= 31 && imc <= 40) inclui valores como: [31, 31.8, 37, 40, 39.99, 31.001 ]
  • if (imc >= 41) inclui valores como: [41, 41.8, 47, 50, 49.99, 41.001 ]

Mas nesse momento, ainda não conseguimos cobrir nenhum valor no intervalo imc > 40 && imc < 41. Devemos lembrar que o IMC é um valor real, então também podem haver valores como 40.2. A solução é utilizar os operadores > e <, que tratam de todos os valores na vizinhança de um determinado número, mas não inclui o número.

Portanto a solução para cobrir todos os valores de imc seria:

if (imc < 18.5) {
    ...
}
if (imc >= 18.5 && imc <= 25) {
    ...
}
if (imc > 25 && imc <= 30) {
    ...
}
if (imc > 30 && imc <= 40) {
    ...
}
if (imc > 40) {
    ...
}

Se ainda tiver alguma dúvida, estou por aqui. Ótimos estudos e grande abraço!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!