1

Estoy empezando y encontré un problema el cual no puedo resolver cuando quiero ordenar de Mayor a Menor usando JavaScript, HTML y el if(). La idea es ordenar a,b y c. El problema surgue cuando para una misma estructura 3 números si se ordenan de mayor a menor pero con otros tres números siguiendo la misma lógia el código devuelve un resultado ilógico. Por qué si por ej: con 30,20,10 (a>b>c) se ordenan tres números de mayor a menor pero cuando empiezo a poner otros tres números mas randoms y grandes como 234,34,20 con el mismo orden a>b>c devuelve un resultado no ordenado ?

const numbers=document.getElementById("numbers");
const result=document.getElementById("result");

let num1 = prompt(`introduzca el primer número`);
let num2 = prompt(`intrioduzca el segundo número`);
let num3 = prompt(`introduzca el tercer número`);

numbers.textContent=`los números introducidos son ${num1}, ${num2}, ${num3}`;

if(num1>=num2 && num1>=num3 && num2>=num3){
    result.textContent = `El orden es: ${num1}, ${num2}, ${num3}`;
}else if(num1>=num2 && num1>=num3 && num2<=num3){
    result.textContent = `El orden es: ${num1}, ${num3}, ${num2}`;

}else if(num2>=num1 && num2>=num3 && num1>=num3){
    result.textContent = `El orden es: ${num2}, ${num1}, ${num3}`;
}else if(num2>=num1 && num2>=num3 && num1<=num3){
    result.textContent = `El orden es: ${num2}, ${num3}, ${num1}`;

}else if(num3>=num1 && num3>=num2 && num1>=num2){
    result.textContent = `El orden es: ${num3}, ${num1}, ${num2}`;
}else if(num3>=num1 && num3>=num2 && num1<=num2){
    result.textContent = `El orden es: ${num3}, ${num2}, ${num1}`;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
   
</head>
<body>
    <div id="numbers"></div>
    <div id="result"></div>
    <script src="javascript_pract_edit.js"></script> 
</body>
</html>

Estos son algunas de las incongruencias que encontre, el ver que con unos números si funciona pero con otros (respetando la lógica) no:

                    DISPARIDAD DE CASOS CON MISMA ESTRUCTURA EN A

Primer ejemplo:

234 34 20 (a>b>c) por qué no se ordena bien si es a>b>c ordena mal: 34,234,20 pone al + grande al medio

Pero 30 20 10 (a>b>c) si da ok con la misma estructura

Segundo ejemplo:

34 7 2 (a>b>c) por qué no se ordena bien si es a>b>c ordena mal: 7,34,2 pone al + grande al medio

Pero 300 200 100 (a>b>c) si da ok con la misma estructura

                   DISPARIDAD DE CASOS COM MISMA ESTRUCTURA EN B

Tercer ejemplo:

44 200 1 (b>a>c) por qué ordena mal: 44,200,1
acá al + grande lo pone al medio

20 40 2 (b>a>c) pero ésta secuencia si la ordena bien: 40,20,2

Cuarto ejemplo:

44 100 20 (b>a>c) por qué ordena mal: 44,20,100
acá al + grande lo pone al final

Pero 33 34 30 (b>a>c) si ordena bien: 34,33,30

Quinto ejemplo:

55 300 5 (b>a>c) por qué lo ordena mal: 55,5,300
acá pone al + grande al final

30 500 1 (b>a>c) pero éste si lo ordena bien: 500,30,1

                   CON C TAMBIÉN SUCEDERÍA LO MISMO
0

1 respuesta 1

1

porque estas comparando cadenas de texto, los prompt entregan cadenas de texto, debes convertirla a numero de la siguiente forma:

const numbers=document.getElementById("numbers");
const result=document.getElementById("result");

let num1 = parseInt(prompt(`introduzca el primer número`));
let num2 = parseInt(prompt(`intrioduzca el segundo número`));
let num3 = parseInt(prompt(`introduzca el tercer número`));

numbers.textContent=`los números introducidos son ${num1}, ${num2}, ${num3}`;

if(num1>=num2 && num1>=num3 && num2>=num3){
    result.textContent = `El orden es: ${num1}, ${num2}, ${num3}`;
}else if(num1>=num2 && num1>=num3 && num2<=num3){
    result.textContent = `El orden es: ${num1}, ${num3}, ${num2}`;

}else if(num2>=num1 && num2>=num3 && num1>=num3){
    result.textContent = `El orden es: ${num2}, ${num1}, ${num3}`;
}else if(num2>=num1 && num2>=num3 && num1<=num3){
    result.textContent = `El orden es: ${num2}, ${num3}, ${num1}`;

}else if(num3>=num1 && num3>=num2 && num1>=num2){
    result.textContent = `El orden es: ${num3}, ${num1}, ${num2}`;
}else if(num3>=num1 && num3>=num2 && num1<=num2){
    result.textContent = `El orden es: ${num3}, ${num2}, ${num1}`;
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
   
</head>
<body>
    <div id="numbers"></div>
    <div id="result"></div>
    <script src="javascript_pract_edit.js"></script> 
</body>
</html>

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.