Deivid creo que debes revisar el codigo que modificaste porque algo anda mal.
smaug al parecer tu codigo tiene un error al hacer que num2 sea el mayor, otra cosa que te falto es cuando los tres numero sean iguales en esto creo que debas alagar un poco mas el codigo
<script language="javascript"> var num1= prompt("ingrese numero 1:"); var num2= prompt("ingrese numero 2:"); var num3= prompt("ingrese numero 3:");num1 = parseInt(num1);num2 = parseInt(num3);num3 = parseInt(num2);if ( num1 > num2 && num1 > num3) { document.write("El numero 1 es Mayor y vale:"+num1);}else if (num2 > num3){ document.write("El numero 2 es Mayor y vale:"+num2);}else{ document.write("El numero 3 es Mayor y vale:"+num3);}</script>
[/size]Lo acabo de verificar, y funciona perfecto, checka tu otra vez.[/color] [/size]
<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Prueba JavaScript</title></head><body style="background:#EEE"><script type="text/javascript">var numero1 = prompt("Ingrese numero 1: ");var numero2 = prompt("Ingrese numero 2: ");var numero3 = prompt("Ingrese numero 3: ");numero1=parseInt(numero1);numero2=parseInt(numero2);numero3=parseInt(numero3); if (numero1 == numero2 || numero2 == numero3 || numero1 == numero3){ document.write("No pueden haber numeros iguales:"); } else { if (numero1 > numero2 || numero2 > numero3){ if (numero1 > numero2) { document.write("El numero 1 es el mayor y vale: "+numero1+"."); } else { document.write("El numero 2 es el mayor y vale: "+numero2+"."); } }else { document.write("El numero 3 es el mayor y vale: "+numero3+"."); } } document.write("[br /][br /]Numero 1 = "+numero1+"[br /]"+"Numero 2 = "+numero2+"[br /]"+"Numero 3 = "+numero3+"[br /]");</script></body></html>
if (numero1 > numero2 || numero2 > numero3)
Fijate smug este código lo adapte al tuyo y al hacer numero 2 mayor me salta que el numero 3 es mayor:Código: [Seleccionar]...num2 = parseInt(num3);num3 = parseInt(num2);
...num2 = parseInt(num3);num3 = parseInt(num2);
Bueno, aca dejo otro:Código: [Seleccionar]<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Prueba JavaScript</title></head><body style="background:#EEE"><script type="text/javascript">var numero1 = prompt("Ingrese numero 1: ");var numero2 = prompt("Ingrese numero 2: ");var numero3 = prompt("Ingrese numero 3: ");numero1=parseInt(numero1);numero2=parseInt(numero2);numero3=parseInt(numero3); if (numero1 == numero2 || numero2 == numero3 || numero1 == numero3){ document.write("No pueden haber numeros iguales:"); } else { if (numero1 > numero2 || numero2 > numero3){ if (numero1 > numero2) { document.write("El numero 1 es el mayor y vale: "+numero1+"."); } else { document.write("El numero 2 es el mayor y vale: "+numero2+"."); } }else { document.write("El numero 3 es el mayor y vale: "+numero3+"."); } } document.write("[br /][br /]Numero 1 = "+numero1+"[br /]"+"Numero 2 = "+numero2+"[br /]"+"Numero 3 = "+numero3+"[br /]");</script></body></html>Esté ya funciona, y ademas no permite que los números se repitan (no se si esa era tu idea).
Mi intención es reducir el código lo mas posible pero usando solo ELSE-IF
Después, tened en cuenta que en condicionales anidados, si en el primero ya ha pasado la condición de filtro. Dentro de su cuerpo, teneis la seguridad que son los valores que quereis, es innecesario e ineficiente volver a crear condiciones.
No. El objetivo último debe ser la legibilidad del código, y si repetir una condición hace el código más fácil de entender, se debe repetir. Lo malo es que aquí entra el gusto personal de cada uno.
Intentar hacer un código más eficiente "optimizando" los condicionales viene a ser como intentar vaciar el mar con una cucharilla de café. Aparte, cualquier compilador o intérprete digno de ese nombre correctamente configurado, optimiza por sí mismo la comprobación de condiciones.
Hombre, esto es como todo, hay que alcanzar un equilibrio entre legibilidad-eficiencia.
Pero eso de repetir if... si se puede poner de una forma un poco menos legible (tampoco qeu sea una galimatias) pero más eficiente es preferible.
Además, ya deberiamos entrar en el tema del mantenimiento.
Cuanto menos condiciones (u otra estructura) anidadas tengamos, será más sencillo de mantener. En este ejemplo, imagina que una vez hecho para tres números, nos dicen que son para cinco. ¿Cuantos condicionales anidados extras habría que meter?
if (a){ //1000 líneas de código}else if (!a && b){ // otras 1000 líneas de código}
En esto estoy en desacuerdo... un compilador/interprete tiene que optimizar, pero nosotros se lo tenemos que poenr más fácil. En este ejemplo, un optimizador no podría hacer mucho que digamos, si nosotros le decimos que haga 10 comprobaciones, las tiene que hacer.
#include <iostream>int main(int argc, char**argv){ int x; std::cin >> x; if (x > 5 || x < 17) { if (x > 5) x = 1; else if (x < 17) x = 2; else x = 3; } return x;}
int main(int argc, char**argv){00871000 push ebp 00871001 mov ebp,esp 00871003 push ecx int x; std::cin >> x;00871004 mov ecx,dword ptr [__imp_std::cin (872048h)] 0087100A lea eax,[x] 0087100D push eax 0087100E call dword ptr [__imp_std::basic_istream<char,std::char_traits<char> >::operator>> (872044h)] if (x > 5 || x < 17)// Mueve x a EAX y lo compara con 500871014 mov eax,dword ptr [x] 00871017 cmp eax,5 // Si es MAYOR salta a 008710260087101A jg main+26h (871026h) // Si no, lo compara con 170087101C cmp eax,11h // Si es MAYOR O IGUAL salta a 008710240087101F jge main+24h (871024h) else if (x < 17) x = 2;// El else anterior lo ignora y mete 2 en EAX (que será el valor devuelto)00871021 push 2 00871023 pop eax // Aquí nunca llega, así que no mete nada de código else x = 3; } return x;}// Aquí llega si ninguna de las condiciones anteriores es verdadera, devolviendo x tal cual00871024 leave 00871025 ret { if (x > 5) x = 1;// Aquí pone EAX a 1 y lo devuelve00871026 xor eax,eax 00871028 inc eax else x = 3; } return x;}00871029 leave 0087102A ret
Ahora, puestas en un solo condicional con operadores lógicos, entonces SI que puede entrar el optimizador (por ejemplo, cuando encuentre un false en un &&, que no sigue comprobando el resto).
Nosotros tenemos que intentar hacer el código eficiente dentro de lo razonable, sea como sea.
Si no, imaginate el mismo escenario, pero comprobando tres arrays de longitud N. Y una función que compare todos los elementos. Si usamos esa función para comprobar los arrays y luego la volvemos a utilizar innecesariamente. Estaremos haciendo N*N recorridos, y ahí si se notaria.