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

no sale el texto del condicional

<meta charset="utf-8">
<h1>calculando IMC</h1>
<br>
<script>

    function saltarlinea() {
        document.write("<br><br><br>");
    }
    function imprimir(frase){
        document.write(frase);
        saltarlinea();
    }
    function calcularIMC(peso,altura) {
        return (pesoInfo /(alturaInfo*alturaInfo));
    }
    nombre = prompt("informe su nombre");
    pesoInfo = prompt( nombre + " Digite su peso");
    alturaInfo = prompt(nombre +" digite su estatura");
    imprimir(nombre +  ", su IMC es "+ calcularIMC(pesoInfo,alturaInfo));

    if (calcularIMC<18.5) {
        imprimir("esta debajo de lo recomendado flaco");
    }
    if (calcularIMC>=18.5 && calcularIMC<25) {
        imprimir("esta en lo recomendado lo veo bien");
    }
    if (calcularIMC>=25 && calcularIMC<=30) {
        imprimir("esta encima de lo recomendado haz ejercicio");
    }
    if (calcularIMC>=30) {
        imprimir("esta muy arriba  de lo recomendado con obesidad");
    }

</script>

al ejecutarlo solo me muestra el resultado del IMC ¿que estoy fallando?

10 respuestas

Hola te falta los parentesis y los parametros en las llamadas a la función calcularIMC

if (calcularIMC(pesoInfo,alturaInfo) >= 18.5 && calcularIMC(pesoInfo,alturaInfo) < 25) {

aunque lo ideal seria que asignes el resultado de la funcion calcularIMC a una variable y simplificarias mucho el código.

imc = calcularIMC(pesoInfo,alturaInfo))

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

en la función calcularIMC estás equivocando los nombres de los parametros, debes usar los mismos que están en la declaración de la función, quedaría algo así:

    function calcularIMC(peso,altura) {
        return (peso /(altura*altura));
    }

espero soluciones con esos cambios. Slds!

Porque estas llamando a una función en el condicional sin pasarle parámetros, la solución sería así:

<meta charset="utf-8">
<h1>calculando IMC</h1>
<br>
<script>

    function saltarlinea() {
        document.write("<br><br><br>");
    }
    function imprimir(frase){
        document.write(frase);
        saltarlinea();
    }
    function calcularIMC(peso,altura) {
        return (pesoInfo /(alturaInfo*alturaInfo));
    }
    nombre = prompt("informe su nombre");
    pesoInfo = prompt( nombre + " Digite su peso");
    alturaInfo = prompt(nombre +" digite su estatura");
    imprimir(nombre +  ", su IMC es "+ calcularIMC(pesoInfo,alturaInfo));

    if (calcularIMC(pesoInfo,alturaInfo)<18.5) {
        imprimir("esta debajo de lo recomendado flaco");
    }
    if (calcularIMC(pesoInfo,alturaInfo)>=18.5 && calcularIMC(pesoInfo,alturaInfo)<25) {
        imprimir("esta en lo recomendado lo veo bien");
    }
    if (calcularIMC(pesoInfo,alturaInfo)>=25 && calcularIMC(pesoInfo,alturaInfo)<=30) {
        imprimir("esta encima de lo recomendado haz ejercicio");
    }
    if (calcularIMC(pesoInfo,alturaInfo)>=30) {
        imprimir("esta muy arriba  de lo recomendado con obesidad");
    }

</script>

Hola, buenas tardes.

Detecto varios puntos que puedes mejorar como buena práctica en programación.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadEn primer al poner la función de "calcularIMC", en el return llamas las variables de pasoInfo y alturaInfo, lo correcto es que pongas los parámetros de la propia función que son peso y altura.

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad El segundo punto y el importante de tu post es que se debe a lo siguiente: "calcularIMC" es una función, no es una variable y es por eso de que no funciona un resultado con el if, en caso de que quieres que funcione la condición puedes aplicar 2 casos.

Caso 1: Pasar el dato obtenido de la función a una variable

imc = calcularIMC(pesoInfo, alturaInfo);

Caso 2: Incluir la función de la manera correcta en las condiciones.

if (calcularIMC(pesoInfo, alturaInfo)<18.5) {
        imprimir("esta debajo de lo recomendado flaco");
    }
    if (calcularIMC(pesoInfo, alturaInfo)>=18.5 && calcularIMC(pesoInfo, alturaInfo)<25) {
        imprimir("esta en lo recomendado lo veo bien");
    }
    if (calcularIMC(pesoInfo, alturaInfo)>=25 && calcularIMC(pesoInfo, alturaInfo)<=30) {
        imprimir("esta encima de lo recomendado haz ejercicio");
    }
    if (calcularIMC(pesoInfo, alturaInfo)>=30) {
        imprimir("esta muy arriba  de lo recomendado con obesidad");
    }

Hablando de buena práctica, es más propio aplicar el caso 1, igual espero haberte ayudado.

hola Luis... fijate que cuando solicitas el peso y altura con prompt no lo estas transformando con parseInt() a un numero, porque lo que tenes sin eso es un string. y despues en todas las llamadas que haces en los if's no estas llamando a la funcion...a la funcion tenes que llamarla con los () y dentro de estos, los parametros correspondientes. El valor que te devuelve esa funcion te conviene guardarla en una variable y que sea esta la que se compara en cada if, sino pensa que si llamas a la funcion en cada vez estas pidiendole que realice siempre la misma accion de calcular, y con calcularlo una solo vez y luego guardar ese resultado en una variable, alcanza y terminas comparando esa variable....

DE acuerdo con lo que puedo ver, lo único que debe hacer es crear una variable que le calcule el imc y utilizar esa variable en los condicionantes.

simple

imcCalculado = calcImc(pesoUsuario, alturaUsuario);

hola ROMERO !!!

recuerda que Java script identifica las multiplicaciones y las realiza no importando si es un (string * un numero). En el caso de las sumas JS lo identifica de manera diferente, no entiende que quieres sumar nÚmeros, cuando escribes un string "9" + un numero 1 = lo que es igual a una concatenación = 91

Pero en este caso cuando escribimos el peso y la altura, la operacion que se realiza es una división y una multiplicación, de tal forma que la operacion no se ve afectada y el resultado es el deseado.

imc = peso / (altura * altura);

ejemplo:

Puntostotal = ("3" * 3 ) = 9 Porque JS identifica las multiplicaciones entre un "texto" * numero = las realiza

Puntostotal = 9 +"1"= 91 Porque JS identifica las suma entre un "texto" + numero = las concatena.

Hola Cesar, supongo que me explicabas eso por el comentario mio de que debe transformar en los prompt el string a numero..... se y conozco la diferencia, y entiendo que en este caso no pasa nada, pero siendo que estamos arrancando a estudiar y que buscamos buenas practicas, mi consejo es que trate a los numeros como numeros y a los string como string, tambien para que cuando otra persona lea el codigo pueda interpretar lo que hizo sin tener que interpretar por demas que era lo que estaba haciendo o intentando hacer... saludos!

Saludos Romero !!!! si viendo desde ese punto de vista, estas muy en lo cierto. Muchas gracias por tu consejo, lo he de tomar en cuenta!!!!

Gracias a todos ya me funciona, asi quedo

<meta charset="utf-8">
<h1>calculando IMC</h1>
<br>
<script>

    function saltarlinea() {
        document.write("<br><br><br>");
    }
    function imprimir(frase){
        document.write(frase);
        saltarlinea();
    }
    function calcularIMC(peso,altura) {
        return (pesoInfo / (alturaInfo*alturaInfo));
    }
    nombre = prompt("informe su nombre");
    pesoInfo = parseInt(prompt( nombre + " Digite su peso"));
    alturaInfo = prompt(nombre +" digite su estatura");

    imprimir(nombre +  ", su IMC es "+ calcularIMC());

    if (calcularIMC()<18.5) {
        imprimir("esta debajo de lo recomendado flaco");
    }
    if (calcularIMC()>=18.5 && calcularIMC()<25) {
        imprimir("esta en lo recomendado lo veo bien");
    }
    if (calcularIMC()>=25 && calcularIMC()<=30) {
        imprimir("esta encima de lo recomendado haz ejercicio");
    }
    if (calcularIMC()>=30) {
        imprimir("esta muy arriba  de lo recomendado con obesidad");
    }

</script>

Gracias colega Luis, por compartir tu duda!!

Aprendimos un poquito mas!!