Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] else if

Estas en el tema de else if en el foro de Javascript en Foros del Web. Buenos días, soy un muy iniciado en este tema de programación en javascript, e intentando hacer un par de aplicacioncillas me has surgido un par ...
  #1 (permalink)  
Antiguo 11/04/2013, 02:46
 
Fecha de Ingreso: abril-2013
Mensajes: 8
Antigüedad: 11 años, 7 meses
Puntos: 0
else if

Buenos días,

soy un muy iniciado en este tema de programación en javascript, e intentando hacer un par de aplicacioncillas me has surgido un par de problemas.
En el primer código que os dejo, para calcular el IMC y visualizar en funcion de ese resultado un comentario recomendatorio, en principio los cálculos los realiza correctamente pero las condiciones no las tiene en cuenta y siempre muestra la misma.
Código:
<!DOCTYPE html>
<html>
<body>

<p>C&aacute;lculo del IMC </p>
<p>Para determinar si una persona está por encima de su peso ideal o es demasiado delgada se utiliza el IMC o Índice de Masa Corporal, también conocido como BMI (Body Mass Index) o IQ (Índice de Quetelet). Completa los datos y comprueba si necesitas adelgazar.</p>
<p>Peso (Kg): <input id="peso" value="80" /></p>
<p>Talla (m): <input id="talla" value="1.85" /></p>
<button onClick="imc();recomendacion();">IMC</button>

<p id="demo"></p>
<p id="imc"></p>

<script>
function imc()
{
var z=parseFloat(document.getElementById("talla").value);
var y=parseFloat(document.getElementById("talla").value);
var t=parseFloat(document.getElementById("peso").value);
var x=parseFloat(z*y).toFixed(2);
var v=parseFloat(t/x).toFixed(1);
document.getElementById("demo").innerHTML=v;
}
</script>

<script>
function recomendacion()
{
var b="";
var c=parseFloat(document.getElementById("demo"));
if (c > 40.0)
  {
  b="OBESIDAD GRAVE. Una obesidad en grado tan elevado supone un gran riesgo para la salud y requiere un inmediato control médico. Le hace falta perder entre el 20% y el 30% de su peso, pero incluso una pequeña reducción de peso puede ayudar a mejorar el riesgo de enfermedad cardiovascular y mejorar el estado de salud general. El médico es el único que puede establecer un tratamiento para adelgazar y el posible conveniencia de un tratamiento farmacológico, quirúrgico, etc."; break;
  }
else if (c < 20.0)
  {
  b="DESNUTRICIÓN. Teniendo en cuenta su estatura, su peso es insuficiente. Debería ir al médico para ver si hay alguna razón para estar ten delgado, sobre todo si el cambio de peso es reciente. Le conviene engordar un poco. A veces, es suficiente con aumentar el consumo de alimentos ricos en calorías como frutos secos, añadir mayonesa o salsas a los platos. tomar quesos curados y premiarse de vez en cuando con un dulce o un helado. Aunque siempre debe hacerse con control y bajo el seguimiento de un experto a ser posible."; break;
  }
else if (c > 20.0 &&  c< 25.0)
  {
  b="NORMALIDAD. No está justificado que quiera adelgazar. En todo caso, si no está conforme con su peso, aumente un poco su actividad física y cuide su alimentación tomando una dieta variada y con abundancia de fruta y verdura."; break;
  }
else if (c > 25.0 && c < 30.0)
  {
  b="SOBREPESO. Usted necesita adelgazar. Y, sobre todo, debe procurar no engordar más para no evolucionar hacia la obesidad. Con el sobrepeso que ahora presenta empieza a haber asociado cierto riesto de aumento de algunas enfermedades cardiovasculares, especialmente si la acumulación de peso se produce alrededor de la cintura, más que si es en las caderas. Le aconsejamos que consulte a un nutricionista. Si sigue el régimen hipocalórico que le proponga y realiza actividad física de forma regular, en unos 6 meses perderá peso y se encontrará mejor."; break;
  }
else (c > 30.0 && c < 40.0)
  {
  b="OBESIDAD. A partir de un IMC de 30, existe riesgo cardiovascular y de otras enfermedades, además de fatiga, sobrecarga de articulaciones, etc. Necesita acudir a un dietista o nutricionista para adelgazar al menos un 10% de su peso en unos 6 meses; no intente adelgazar por su cuenta."; break;
  }
document.getElementById("imc").innerHTML=b;
}
</script>


</body>
</html>
Anotación: lo he probado sin el break; y tampoco funciona.

En este segundo código se calcula el Metabolismo Basal, dependiendo de si se es Hombre o Mujer. Si no le pongo esa condición y le digo que me de el resultado poniendo directamente la fórmula hace los cálculos correctamente, pero tal y como aquí os lo dejo no me muestra nada.
Código:
<!DOCTYPE html>
<html>
<body>

<p>Cálculo del Metabolismo Basal (Harris Benedict)</p>
<p>El metabolismo basal o consumo energético en reposo es la energía necesaria para mantener las actividades corporales indispensables para la vida; como son las respiración, la circulación sanguínea, el mantenimiento de la temperatura corporal, la energía necesaria para el sistema nervioso, etc. Rellena las casillas correspondientes y calcula tu metabolismo basal.</p>
<p>Sexo: <input id="sexo" value="" /> M o F</p>
<p>Peso (Kg): <input id="peso" value="80" /></p>
<p>Talla (m): <input id="talla" value="1.85" /></p>
<p>Edad: <input id="edad" value="" /></p>
<button onClick="resultado()">Resultado</button>

<p id="demo"></p>Kcal

<script>
function resultado()
{
var z=parseFloat(document.getElementById("sexo").value);
var y=parseFloat(document.getElementById("talla").value);
var t=parseFloat(document.getElementById("peso").value);
var p=parseFloat(document.getElementById("edad").value);
var a=66.473;
var b=13.752;
var c=b*t;
var d=5.0033;
var e=100;
var f=y*e;
var g=d*f;
var h=6.755;
var i=h*p;
var j=655.0955;
var k=9.563;
var l=k*t;
var m=1.8496;
var o=m*f;
var q=4.6756;
var r=q*p;
var s=parseFloat(a+c+g-i).toFixed(0);
var u=parseFloat(j+l+o+r).toFixed(0);
var v=;
if (z=M)
  {
  v=s;
  }
else
  {
  v=u;
  }
document.getElementById("demo").innerHTML=v;
}
</script>

</body>
</html>
No se si es un fallo en el planteamiento de las aplicaciones o si son ciertos fallos de los que no soy capaz de darme cuenta. Muchas gracias a todos.
  #2 (permalink)  
Antiguo 11/04/2013, 05:55
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años, 6 meses
Puntos: 13
Respuesta: else if

Hola buenas

PARA AMBOS CASOS:

Es mejor que pongas el código javascript dentro de las etiquetas <head>. La estructura es <html><head></head><body></body></html>. Aunque funciona igual eh? Es sólo un briconsejo (de hecho lo correcto sería ponerlo en un fichero .js y llamar a ese fichero desde el head).

Luego si usas Chrome o Mozilla y pulsas F12 se despliega una ventanita (o se abre en modo popup) donde hay una opción de "Consola" que te muestra los errores de javascript. Así es muy fácil detectar rápidamente donde está el error y solucionarlo.


Para el primer caso:

Uno de los errores es el uso de break;. Esto se usa para while(), switch(), for(),... Pero no para IF. Además, tal como lo tienes montado con ELSE IFs, ya implica un break. Es decir, el programa empieza por el primer IF, si entra ahí ejecuta lo de dentro, acaba y ve que lo siguiente es ELSE IF (la traducción sería "SINO"), y como ya ha entrado en el primer IF, va a ignorar lo siguiente (ni siquiera comprobará si puede entrar o no).

Código PHP:
<!DOCTYPE html>
<
html>
<
head>
<
script>
function 
imc()
{
var 
z=parseFloat(document.getElementById("talla").value);
var 
y=parseFloat(document.getElementById("talla").value);
var 
t=parseFloat(document.getElementById("peso").value);
var 
x=parseFloat(z*y).toFixed(2);
var 
v=parseFloat(t/x).toFixed(1);
document.getElementById("demo").innerHTML=v;
}

function 
recomendacion(){
var 
b="";
var 
c=parseFloat(document.getElementById("demo"));
    if (
40.0)
    {
    
b="OBESIDAD GRAVE. Una obesidad en grado tan elevado supone un gran riesgo para la salud y requiere un inmediato control médico. Le hace falta perder entre el 20% y el 30% de su peso, pero incluso una pequeña reducción de peso puede ayudar a mejorar el riesgo de enfermedad cardiovascular y mejorar el estado de salud general. El médico es el único que puede establecer un tratamiento para adelgazar y el posible conveniencia de un tratamiento farmacológico, quirúrgico, etc.";
    }
    else if (
20.0)
    {
    
b="DESNUTRICIÓN. Teniendo en cuenta su estatura, su peso es insuficiente. Debería ir al médico para ver si hay alguna razón para estar ten delgado, sobre todo si el cambio de peso es reciente. Le conviene engordar un poco. A veces, es suficiente con aumentar el consumo de alimentos ricos en calorías como frutos secos, añadir mayonesa o salsas a los platos. tomar quesos curados y premiarse de vez en cuando con un dulce o un helado. Aunque siempre debe hacerse con control y bajo el seguimiento de un experto a ser posible.";
    }
    else if (
20.0 &&  c25.0)
    {
    
b="NORMALIDAD. No está justificado que quiera adelgazar. En todo caso, si no está conforme con su peso, aumente un poco su actividad física y cuide su alimentación tomando una dieta variada y con abundancia de fruta y verdura.";
    }
    else if (
25.0 && 30.0)
    {
    
b="SOBREPESO. Usted necesita adelgazar. Y, sobre todo, debe procurar no engordar más para no evolucionar hacia la obesidad. Con el sobrepeso que ahora presenta empieza a haber asociado cierto riesto de aumento de algunas enfermedades cardiovasculares, especialmente si la acumulación de peso se produce alrededor de la cintura, más que si es en las caderas. Le aconsejamos que consulte a un nutricionista. Si sigue el régimen hipocalórico que le proponga y realiza actividad física de forma regular, en unos 6 meses perderá peso y se encontrará mejor.";
    }
    else (
30.0 && 40.0)
    {
    
b="OBESIDAD. A partir de un IMC de 30, existe riesgo cardiovascular y de otras enfermedades, además de fatiga, sobrecarga de articulaciones, etc. Necesita acudir a un dietista o nutricionista para adelgazar al menos un 10% de su peso en unos 6 meses; no intente adelgazar por su cuenta.";
    }
    
document.getElementById("imc").innerHTML=b;
}
</script></head>
<body>

<p>C&aacute;lculo del IMC </p>
<p>Para determinar si una persona está por encima de su peso ideal o es demasiado delgada se utiliza el IMC o Índice de Masa Corporal, también conocido como BMI (Body Mass Index) o IQ (Índice de Quetelet). Completa los datos y comprueba si necesitas adelgazar.</p>
<p>Peso (Kg): <input id="peso" value="80" /></p>
<p>Talla (m): <input id="talla" value="1.85" /></p>
<button onClick="imc();recomendacion();">IMC</button>

<p id="demo"></p>
<p id="imc"></p>

</body>
</html> 

Para el segundo caso:

Los problemas son 2, uno es que inicializas la variable v a nada y eso no es correcto, debes inicializarla a "", o a 0, o no inicializarla y hacerlo después cuando le dices v=s o v=u, pero en ningún caso puedes hacer var v=;

El otro fallo es que en el if (z=M) le pones solo un = y eso significa "Iguala Z a M y si puedes hacerlo entra" y tu lo que quieres decirle es "Compara si el valor de Z es M". Eso se traduce a 2 iguales (==) y además M como es un texto va entre comillas.

Por lo tanto queda así:

Código PHP:
<!DOCTYPE html>
<
html>
<
body>

<
p>Cálculo del Metabolismo Basal (Harris Benedict)</p>
<
p>El metabolismo basal o consumo energético en reposo es la energía necesaria para mantener las actividades corporales indispensables para la vidacomo son las respiraciónla circulación sanguíneael mantenimiento de la temperatura corporalla energía necesaria para el sistema nerviosoetcRellena las casillas correspondientes y calcula tu metabolismo basal.</p>
<
p>Sexo: <input id="sexo" value="" /> M o F</p>
<
p>Peso (Kg): <input id="peso" value="80" /></p>
<
p>Talla (m): <input id="talla" value="1.85" /></p>
<
p>Edad: <input id="edad" value="" /></p>
<
button onClick="resultado()">Resultado</button>

<
p id="demo"></p>Kcal

<script>
function 
resultado(){
    var 
z=parseFloat(document.getElementById("sexo").value);
    var 
y=parseFloat(document.getElementById("talla").value);
    var 
t=parseFloat(document.getElementById("peso").value);
    var 
p=parseFloat(document.getElementById("edad").value);
    var 
a=66.473;
    var 
b=13.752;
    var 
c=b*t;
    var 
d=5.0033;
    var 
e=100;
    var 
f=y*e;
    var 
g=d*f;
    var 
h=6.755;
    var 
i=h*p;
    var 
j=655.0955;
    var 
k=9.563;
    var 
l=k*t;
    var 
m=1.8496;
    var 
o=m*f;
    var 
q=4.6756;
    var 
r=q*p;
    var 
s=parseFloat(a+c+g-i).toFixed(0);
    var 
u=parseFloat(j+l+o+r).toFixed(0);
    var 
v=0;
    if (
z=="M"){
      
v=s;
      }
    else
      {
      
v=u;
      }
    
document.getElementById("demo").innerHTML=v;
}
</script>

</body>
</html> 
Espero que te sirva, saludos!

PD: Mi IMC es de 20 y mi metabolismo basal da 1710 Kcal... ¿Cómo estoy doctor? xdd
  #3 (permalink)  
Antiguo 11/04/2013, 05:59
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años, 6 meses
Puntos: 13
Respuesta: else if

Por cierto, para el primer caso, ten cuidado que los valores límite del resultado obtenido no los contemplas. A mí me da 20 y me habla de obesidad, estaba mirando porque y es porque pones el límite en "20.0" y siempre mirando mayor que y menor que, pero no tienes en cuenta si es igual a. Deberías poner en algún caso ">=" o "<=", que incluye también al valor.

Código PHP:
// Esto es incorrecto porque el primer IF es mayores de 18 y el segundo menores de 18, pero qué pasa con los 18?
if(edad>18alert("Adulto");
else if(
edad<18alert("Menor");

// Se pondría así en este tonto-caso:
if(edad>=18alert("Adulto");
else if(
edad<18alert("Menor"); 
Saludos
  #4 (permalink)  
Antiguo 11/04/2013, 09:39
 
Fecha de Ingreso: abril-2013
Mensajes: 8
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: else if

Perfecto el primer caso, para el segundo además he corregido un error en el planteamiendo de la fórmula para el cálculo. Os lo pego aquí:

Código:
<!DOCTYPE html>
<html>
<body>

<p>Cálculo del Metabolismo Basal (Harris Benedict)</p>
<p>El metabolismo basal o consumo energético en reposo es la energía necesaria para mantener las actividades corporales indispensables para la vida; como son las respiración, la circulación sanguínea, el mantenimiento de la temperatura corporal, la energía necesaria para el sistema nervioso, etc. Rellena las casillas correspondientes y calcula tu metabolismo basal.</p>
<form>
<p>Sexo: <input type="text" id="sexo" /> M o F</p>
<p>Peso (Kg): <input id="peso" value="80" /></p>
<p>Talla (m): <input id="talla" value="1.85" /></p>
<p>Edad: <input type="text" id="edad" /></p>
<input type="button" onClick="calculo();" value="Resultado" />
</form>

<p id="demo"></p>

<script>

function calculo(){
var z = document.getElementById("sexo").value;
var y = document.getElementById("talla").value;
var t = document.getElementById("peso").value;
var p = document.getElementById("edad").value;

var a=66.473;
var b=13.752;
var c=b*t;
var d=5.0033;
var e=100;
var f=y*e;
var g=d*f;
var h=6.755;
var i=h*p;
var j=655.0955;
var k=9.563;
var l=k*t;
var m=1.8496;
var o=m*f;
var q=4.6756;
var r=q*p;
var s=(a+c+g-i).toFixed(0);
var u=(j+l+o-r).toFixed(0);
var v = 0;

if (z=="M" || z=="m")
  {
  v=s;
  }
if (z=="F" || z=="f")
  {
  v=u;
  }
   
document.getElementById("demo").innerHTML=v+" Kcal";
}
</script>

</body>
</html>

Etiquetas: funcion, html, input
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:27.