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:
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:
</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?
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...
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.
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:
invertido = (invertido*10) + (numero%10);
Linea 7: Esta mal. Supongo que quiere que el valor de valorde pasee a ser el actual valorde.
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:
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.
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.
function algoritmo() {
var numero = document.formulario.numero.value.toString();
var invertido = numero.split('').reverse().join('');
document.formulario.invertido.value = invertido;
return invertido;
}
Saludos
Como sugerencia... Usa la consola de javascript de tu navegador para aprender.... :laugh:
(https://image.ibb.co/d0fS8F/2017_05_28_19_13_45.png)
Esto también lo puedes hacer:
(numero+"").split("").reverse().join("")
Y luego lo pasas a parseInt( ~ ) para que te devuelva el número, o parseFloat si hay decimales.