[javascript] [Bucle For] invertir números en javascript.

Iniciado por Diesan Romero, 27 Mayo 2017, 09:09 AM

0 Miembros y 1 Visitante están viendo este tema.

Diesan Romero

Hola a todos, una vez vi un ejercicio en C# sobre cómo invertir un número en javascript, que por ejemplo, si escribes 12 el programa te devuelva 21.
En mi búsqueda encontré este código en javascript:

Código (javascript) [Seleccionar]
function algoritmo()
{
    var for(,numero>0,numero, invertido, numero;
    numero = parseInt (document.formulario.numero.value);
    for(,numero>0,numero/=10);
    invertido+=invertido*10+(numero%10);
    document.formulario.for(,numero>0,numero.value = for(,numero>0,numero;
    document.formulario.invertido.value = invertido;
}


Y este es el html:

Código (html4strict) [Seleccionar]

    </head>
    <body>
        <form name="formulario">
            <table style="text-align: left; margin-left: auto; margin-right: auto;" border="1" cellpadding="1" cellspacing="1">
                <tbody>
                    <tr>
                        <td>Ingrese el valor de numero</td>
                        <td><input name="numero" /></td>
                    </tr>
                    <tr align="center">
                        <td colspan="2" rowspan="1">
                            <input value="Procesar" type="button" onclick="algoritmo();" />
                            <input type="reset" />
                        </td>
                    </tr>
                    <tr>
                        <td>Valor de for(,numero>0,numero:</td>
                        <td><input name="for(,numero>0,numero"></td>
                    </tr>
                    <tr>
                        <td>Valor de invertido:</td>
                        <td><input name="invertido"></td>
                    </tr>
                </tbody>
            </table>
        </form>
    </body>
</html>


Y lo que no entiendo para nada es el bucle for. Yo sé que el código de va a ejecutar hasta que se cumpla la función, pero, que hace el código como tal?

#!drvy

Ese código no debería de funcionar. El for esta mal declarado en varios casos. Pero se puede arreglar.

Función algoritmo:

Linea 3: Hay que arreglar la linea...
Código (javascript) [Seleccionar]
var invertido, numero;

Es un simple declarador de variables para que se puedan usar a posteriori.

Linea 4: Esta bien. Solo decimos que la variable numero es un Integer (integro) del valor del campo "numero".

Linea 5: Esta mal. Debería de ser un for.
Código (javascript) [Seleccionar]
for (invertido=0; numero; numero = Math.floor(numero/10)){

Aquí decimos invertido empieza siendo un 0 y el for debe continuar mientras numero sea positivo.. además numero sera numero entre 10 en cada iterraccion.
El Math.floor previene un Infinity o un NaN. https://developer.mozilla.org/es/docs/Web/javascript/Referencia/Objetos_globales/Math/floor

Linea 6: Esta Mal. invertido se añade a si mismo el valor de invertido multiplicado por 10 más el modulo (resta de división) de numero entre 10.
Debería ser que invertido sea invertido por 10 + el modulo de numero entre 10. O sea se:
Código (javascript) [Seleccionar]
invertido = (invertido*10) + (numero%10);

Linea 7: Esta mal. Supongo que quiere que el valor de valorde pasee a ser el actual valorde.
Código (javascript) [Seleccionar]
document.formulario.valorde.value = valorde;

De todos modos, no entiendo que pinta valorde en toda la función. No hace falta en ningún momento.

Linea 8: Esta bien. Solo asigna el valor de invertido al campo invertido




La función corregida debería ser:

Código (javascript) [Seleccionar]
function algoritmo() {
   var invertido, numero;
   numero = parseInt(document.formulario.numero.value);

   for(invertido=0; numero; numero = Math.floor(numero/10)){
       invertido = (invertido*10) + (numero%10);
   }

   document.formulario.invertido.value = invertido;
   return invertido;
}


Y del HTML puedes quitar de la linea 16 (incluida) a la linea 19 (incluida) ya que no hace falta en ningún momento.

En fin, el que lo ha escrito creo que no tenia ni idea de javascript o lo hizo de tal modo para joder.





Dicho esto, tienes muchos modos de invertir un numero.

Podrias hacerlo tomando el numero como un string.

Código (javascript) [Seleccionar]
function algoritmo() {
   var numero = document.formulario.numero.value.toString();
   var invertido = '';

   for(var i = numero.length-1; i >= 0; --i){
       invertido += numero[i];
   }

   document.formulario.invertido.value = invertido;
   return invertido;
}


O la más sencilla... convertirlo en array y reverse y convertir en numero de nuevo.

Código (javascript) [Seleccionar]
function algoritmo() {
   var numero = document.formulario.numero.value.toString();
   var invertido = numero.split('').reverse().join('');
   document.formulario.invertido.value = invertido;
   return invertido;
}


Saludos

LaThortilla (Effort)

Como sugerencia... Usa la consola de javascript de tu navegador para aprender....  :laugh:

ThinkByYourself

#3
Esto también lo puedes hacer:
Código (javascript) [Seleccionar]
(numero+"").split("").reverse().join("")

Y luego lo pasas a parseInt( ~ ) para que te devuelva el número, o parseFloat si hay decimales.
No te voy a engañar.
Todos hemos sido programados para normalizar la psicopatía de las élites económicas y políticas, y para realimentar su patrón de ciega codicia.