elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web (Moderador: #!drvy)
| | |-+  [javascript] [Bucle For] invertir números en javascript.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [javascript] [Bucle For] invertir números en javascript.  (Leído 8,874 veces)
Ali Baba


Desconectado Desconectado

Mensajes: 310


Ver Perfil WWW
[javascript] [Bucle For] invertir números en javascript.
« en: 27 Mayo 2017, 09:09 am »

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
  1. function algoritmo()
  2. {
  3.    var for(,numero>0,numero, invertido, numero;
  4.    numero = parseInt (document.formulario.numero.value);
  5.    for(,numero>0,numero/=10);
  6.    invertido+=invertido*10+(numero%10);
  7.    document.formulario.for(,numero>0,numero.value = for(,numero>0,numero;
  8.    document.formulario.invertido.value = invertido;
  9. }
  10.  

Y este es el html:

Código
  1.    </head>
  2.    <body>
  3.        <form name="formulario">
  4.            <table style="text-align: left; margin-left: auto; margin-right: auto;" border="1" cellpadding="1" cellspacing="1">
  5.                <tbody>
  6.                    <tr>
  7.                        <td>Ingrese el valor de numero</td>
  8.                        <td><input name="numero" /></td>
  9.                    </tr>
  10.                    <tr align="center">
  11.                        <td colspan="2" rowspan="1">
  12.                            <input value="Procesar" type="button" onclick="algoritmo();" />
  13.                            <input type="reset" />
  14.                        </td>
  15.                    </tr>
  16.                    <tr>
  17.                        <td>Valor de for(,numero>0,numero:</td>
  18.                        <td><input name="for(,numero>0,numero"></td>
  19.                    </tr>
  20.                    <tr>
  21.                        <td>Valor de invertido:</td>
  22.                        <td><input name="invertido"></td>
  23.                    </tr>
  24.                </tbody>
  25.            </table>
  26.        </form>
  27.    </body>
  28. </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?


En línea

#!drvy
Moderador
***
Desconectado Desconectado

Mensajes: 5.850



Ver Perfil WWW
Re: [javascript] [Bucle For] invertir números en javascript.
« Respuesta #1 en: 27 Mayo 2017, 17:37 pm »

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
  1. 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
  1. 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
  1. 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
  1. 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
  1. function algoritmo() {
  2.    var invertido, numero;
  3.    numero = parseInt(document.formulario.numero.value);
  4.  
  5.    for(invertido=0; numero; numero = Math.floor(numero/10)){
  6.        invertido = (invertido*10) + (numero%10);
  7.    }
  8.  
  9.    document.formulario.invertido.value = invertido;
  10.    return invertido;
  11. }

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
  1. function algoritmo() {
  2.    var numero = document.formulario.numero.value.toString();
  3.    var invertido = '';
  4.  
  5.    for(var i = numero.length-1; i >= 0; --i){
  6.        invertido += numero[i];
  7.    }
  8.  
  9.    document.formulario.invertido.value = invertido;
  10.    return invertido;
  11. }

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

Código
  1. function algoritmo() {
  2.    var numero = document.formulario.numero.value.toString();
  3.    var invertido = numero.split('').reverse().join('');
  4.    document.formulario.invertido.value = invertido;
  5.    return invertido;
  6. }

Saludos


En línea

LaThortilla (Effort)

Desconectado Desconectado

Mensajes: 234


¿En que vida harás lo que en esta no?


Ver Perfil WWW
Re: [javascript] [Bucle For] invertir números en javascript.
« Respuesta #2 en: 29 Mayo 2017, 02:15 am »

Como sugerencia... Usa la consola de javascript de tu navegador para aprender....  :laugh:
En línea

ThinkByYourself

Desconectado Desconectado

Mensajes: 191


Ver Perfil
Re: [javascript] [Bucle For] invertir números en javascript.
« Respuesta #3 en: 29 Mayo 2017, 10:00 am »

Esto también lo puedes hacer:
Código
  1. (numero+"").split("").reverse().join("")

Y luego lo pasas a parseInt( ~ ) para que te devuelva el número, o parseFloat si hay decimales.
« Última modificación: 29 Mayo 2017, 11:52 am por NoBullshit » En línea

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.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines