Foros del Web » Programando para Internet » Javascript »

Cambio de base

Estas en el tema de Cambio de base en el foro de Javascript en Foros del Web. Bueno, les explico: He estado intentando hacer un script que dado un número decimal y una base menor que diez, devuelva el equivalente del número ...
  #1 (permalink)  
Antiguo 22/03/2003, 11:54
 
Fecha de Ingreso: agosto-2002
Mensajes: 139
Antigüedad: 22 años, 3 meses
Puntos: 0
Cambio de base

Bueno, les explico:
He estado intentando hacer un script que dado un número decimal y una base menor que diez, devuelva el equivalente del número decimal en la base indicada. Realicé la función en javascript y parecía funcionar sin problemas hasta que descubrí algo que aún no logro entender: realizaba bién cualquier conversión excepto la de los números que empiezan por 1.

He revisado el código y no logro entender porque ocurre esto. ¿Me echan una mano?

Aquí está el script:

function cambio_decimal(numero,base)
{
var invertido
invertido = new Array()
var indice
indice=1
var x
while (numero>=base)
{
invertido[indice]=numero%base
numero=numero/base
numero=parseInt(numero)
indice++
}
invertido[indice]=numero
numero=""
while(indice>0)
{
numero=numero+invertido[indice]
indice--
}
return numero
}


Saludos y gracias por adelantado.
  #2 (permalink)  
Antiguo 22/03/2003, 12:27
 
Fecha de Ingreso: agosto-2002
Mensajes: 139
Antigüedad: 22 años, 3 meses
Puntos: 0
Haciendo pruebas descubrí que no solo no funciona para los número que empiezan en uno. No funciona siempre que la primera cifra del número es menor a la base, cuando esto ocurre devuelve el mismo número que dimos ocmo entrada.

Sigo sin saber porque.
Saludos.
  #3 (permalink)  
Antiguo 22/03/2003, 13:14
Avatar de mikel_gomez  
Fecha de Ingreso: febrero-2001
Mensajes: 482
Antigüedad: 23 años, 9 meses
Puntos: 3
Re: Cambio de base

GameRoot:

Sospecho que el problema puede estar en la función parseInt().

Esta función convierte una cadena a formato entero. En tu caso, lo utilizas para recoger la parte entera de una división (que ya es numérica)

En segundo lugar, parseInt puede llevar un segundo parámetro que es la base en que se supone que se encuentra la cadena a convertir. Por defecto es 10, pero en algunas circunstancias que no recuerdo puede comportarse de otra manera.

En conclusión, para recoger la parte entera de una cantidad, yo utilizaría Math.floor(numero) en lugar de parseInt(numero). Si insistes en usar esta última función, colócale el segundo parámetro... parseInt(numero, 10)

Si con lo que te comento, el problema persiste, dame un ejemplo concreto de conversión que no te funcione para poder probarlo.

Saludos.
__________________
Mikel Gómez
Hay que aprender mucho para saber poco

  #4 (permalink)  
Antiguo 22/03/2003, 13:53
 
Fecha de Ingreso: agosto-2002
Mensajes: 139
Antigüedad: 22 años, 3 meses
Puntos: 0
Gracias.

Gracias por responder, descubrí que poniendo un 0 delante de la base el script funciona sin problemas con cualquier número.

Prove el Math.floor y el programa actuavba igual, si no hay un 0 delante de la base no funcionaba correctamente. De todas formas y aunque no se muy bién porque la solución pasa por poner un 0 delante, esto ya me sirve.

Agradezco de veras la respuesta.
  #5 (permalink)  
Antiguo 23/03/2003, 03:41
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola GameRoot:

Aprovechando la recursión, hice esta función:

<html>
<head>
<script language=javascript>
function Cambio_Base(n, base) {
var _n = parseInt(n);
var _base = parseInt(base);
if (_n < _base) return n;
return Cambio_Base(parseInt(_n / _base), base) * 10 + (_n % _base);
}
</script>
<head>
<body>
<form name=cambioBase>
<input type=text name=n value="">
<input type=text name=base value="">
<input type=text name=resultado value="">
<input type=button value=chequear onclick="document.cambioBase.resultado.value = Cambio_Base(document.cambioBase.n.value, document.cambioBase.base.value)"
</form>


</body>
</html>

... Puse la página completa porque sirve de ejemplo

Saludos
  #6 (permalink)  
Antiguo 23/03/2003, 06:17
 
Fecha de Ingreso: agosto-2002
Mensajes: 139
Antigüedad: 22 años, 3 meses
Puntos: 0
Muy bueno tu codigo, no pense en la recursividad al hacerlo y el mio ocupa muchísimo más, mi profe todo el dia dandome el coñazo con el recursivo uy al final sigo sin hacerle caso...

xD
  #7 (permalink)  
Antiguo 23/03/2003, 08:50
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años, 7 meses
Puntos: 1284
Hola otra vez:

No sabía que era para cosas "académicas", así que te diré un par de cosillas a considerar...

Si te fijas en la función, hay dos parámetros que pueden ser cualquier cosa (javascript lo permite)... como se invoca desde un texto (input type=text ), es conveniente convertirlo a número para operar (parseInt), pero lo que devuelve es una cadena (primer caso) o un número (segundo caso)...

Asímismo en la recursión se pasa el primero de los parámetros como un número...

Para convertir una cadena a un número está parseInt, y en el otro sentido, no sé si hay algo específico, en pcasiones he hecho algo así...

var cadena = "" + n; // donde n es un número...

Espero que te sirva

Saludos
  #8 (permalink)  
Antiguo 23/03/2003, 11:41
 
Fecha de Ingreso: agosto-2002
Mensajes: 139
Antigüedad: 22 años, 3 meses
Puntos: 0
Gracias.

Gracias d nuevo :)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:26.