Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
4
respuestas

[Sugerencia] Puede quedar mejor asi, un mejor orden, bueno eso pienso, si hay una mejor forma me la dicen plis

<!DOCTYPE html>
<meta charset="UTF-8">

<h1>Programa calculo IMC</h1>

<script>
    function saltarLinea () {
        document.write("<br><br><br>");
    }

    function imprimir (frase) {
        document.write(frase);
        saltarLinea();
    }

    function calcularIMC (peso, altura){


        return  peso / (altura*altura);

    }
    nombre= prompt("Informe su nombre");
    pesoInformado = prompt(nombre+", ingrese su peso");
    alturaInformado = prompt(nombre+ ", ingrese su altura");

    imcCalculado = calcularIMC(pesoInformado,alturaInformado);


    imprimir(nombre + " su imc calculado es: " +imcCalculado);

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

        imprimir("IMC esta en el intervalo normal");

    }else if (imcCalculado >=25 && imcCalculado <= 30){

        imprimir("IMC considerado como sobrepeso ");

    }else if (imcCalculado >= 30){

        imprimir("IMC considerado como obesidad");
    }
</script>
4 respuestas
el detalle es que estas omitiendo cuando el indice de masa corporal 
sea menor al de <18, ademas yo omiti la comparacion
al ultimo cualquier valor que sea >30 va a tener obesidad 




 if(resultado < 18.5){
        imprimir(nombre +" su peso esta por debajo del indice de masa corporal: "+ resultado);
    }

    else if (resultado >= 18.5 && resultado < 25){
        imprimir(nombre +" su peso es normal del indice de masa corporal: "+ resultado);
    }

    else if (resultado >= 25 && resultado < 30 ){
        imprimir(nombre +" usted tiene sobrepeso: "+ resultado);
    }
    else{
        imprimir(nombre +" usted tiene obesidad: "+ resultado);
    }

Hola.

Veo que habría un problema si el IMC es igual a 25.

if(imcCalculado >= 18.5 && imcCalculado <= 25) // aqui entraría el codigo primero pues se cumple la condición

else if (imcCalculado >=25 && imcCalculado <= 30) // la condicion tambien se cumple porque el numero es 25 y menor que 30 pero no se ejecutaría porque ya entró al primer if, habria que corregirlo y quitarle el igual

Y como comentó Manuel, falta la condición de cuanto es menor a 18.5

Tu lógica es la misma a la que yo pensé. Mi código quedó de la siguiente forma:

if (imcCalculado < 18.5) {
    imprimir("Su IMC está por debajo de lo recomendado");
}

if (imcCalculado >= 18.5 && imcCalculado <= 24.9) {
    imprimir("Su  IMC está considerado como Normal");
}

if (imcCalculado >= 25 && imcCalculado < 30) {
    imprimir("Su  IMC está considerado como Sobrepeso");
} 

if (imcCalculado >= 30){
    imprimir("Su IMC está considerado como Obesidad");
}

Yo me preguntaba lo mismo, si no sería mejor usar el && en lugar de anidar los if. Muy bien pensado en el código de Oscar el colocar 24,9 en lugar de 25 en el rango de IMC normal para que no se "superponga" con el siguiente condicional de sobrepeso.

Aunque pensandolo bien, creo que habria un error si el imc fuera de 24.9 con más decimales jaja, por ejemplo, 24.91 no entraría a ningun if

Entonces lo correcto debería ser

if (imcCalculado >= 18.5 && imcCalculado < 25) { // Esto sería mientras sea menor que 25 sí o sí, o sea un 24.99995 entraría ahí
    imprimir("Su  IMC está considerado como Normal");
}

if (imcCalculado >= 25 && imcCalculado < 30) { // y cuando ya es 25 exacto o mayor ya entra acá
    imprimir("Su  IMC está considerado como Sobrepeso");
}