Foros del Web » Programando para Internet » Javascript »

Pregunta funcion ayuda! pf.

Estas en el tema de Pregunta funcion ayuda! pf. en el foro de Javascript en Foros del Web. Por favor si alguien sabe decirme porque no funciona este script... (lo que hace es sumar unas cifras hasta que solo sea un solo digito. ...
  #1 (permalink)  
Antiguo 07/01/2003, 02:58
Avatar de Antonito  
Fecha de Ingreso: noviembre-2001
Ubicación: en la red
Mensajes: 446
Antigüedad: 22 años, 5 meses
Puntos: 3
Pregunta funcion ayuda! pf.

Por favor si alguien sabe decirme porque no funciona este script...

(lo que hace es sumar unas cifras hasta que solo sea un solo digito. P.E: 234 = 2+3+4 = 9 ó 759 = 7+5+9 = 21 = 2+1 = 3)

Código:
function calcula(formulario) {
  var A = formulario.kk.value+formulario.kk2.value;
  total=0
  do {
	for(i=0;i<A.length;i++)	{
	mem=new Number(A.substring(i,i+1));
	total=eval(total + mem);
	}A=total;
  }while (total.length > 1)
alert(total);
}
El problema es que no me suma cuando el resultado es de dos cifras, entonces debería sumarlas, hasta que sea una sola cifra.

Muchas gracias por contestar... es que no encuentro el problema....


Última edición por Antonito; 07/01/2003 a las 03:04
  #2 (permalink)  
Antiguo 07/01/2003, 06:24
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 3 meses
Puntos: 1
Hola Antonito

El problema está en que el método length no puede aplicarse a números.
  #3 (permalink)  
Antiguo 07/01/2003, 06:33
Avatar de mikel_gomez  
Fecha de Ingreso: febrero-2001
Mensajes: 482
Antigüedad: 23 años, 2 meses
Puntos: 3
Re: Suma de dígitos de una cantidad

Antonito:

Daniel está completamento en lo cierto.

Además, en tu función, estás concatenando, no sumando, los valores de kk y kk1. No sé si eso es correcto, si no lo es... debes aplicar la función parseInt() a los valores de entrada.

Por lo demás, la lógica de tu función parece correcta, pero ya que lo que intentas hacer es un típico algoritmo que también se puede plantear como recursivo, he preferido rehacerlo como tal, en vez de buscar errores o fallos.

Ejemplo alternativo completo:
Código:
<html>
  <head>
    <script type="text/javascript">
    <!--
      function sumaDigitos(cantidad) {
        var suma = 0 ;
        var cadena = cantidad.toString();
        for(var i=0; i<cadena.length; i++)
          suma += parseInt(cadena.substr(i, 1), 10);
        if (suma > 9) return sumaDigitos(suma)
        else return suma
      }

      function calcula() {
        var cantidad = parseInt(document.formulario.kk.value, 10) +
                       parseInt(document.formulario.kk2.value, 10) ;
        alert(sumaDigitos(cantidad));
      }
    //-->
    </script>
  </head>
  <body>
    <form action="" name="formulario" method="get">
      <input name="kk" />
      <input name="kk2" />
      <input type="button" value="Calcular" onclick="calcula()" />
    </form>
  </body>
</html>
Espero que te sirva.
Saludos,
Mikel
__________________
Mikel Gómez
Hay que aprender mucho para saber poco

  #4 (permalink)  
Antiguo 07/01/2003, 06:34
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 3 meses
Puntos: 1
Probá con esta otra:

function calcula() {
var A = 329;
alert(A);
do {
total=0;
B = A.toString(10)
for(i = 0; i < B.length; i++) {
mem = new Number(B.substring(i, i+1));
total = eval(total + mem);
alert("Iter: " + i + "\nMem: " + mem + "\nTotal: " + total)
}
A=total;
}
while (total.toString(10).length > 1)
alert(total);
}
  #5 (permalink)  
Antiguo 07/01/2003, 06:34
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Antonito,

prueba tu script aqui

Yá te dije ayer que funciona, que el error debe estar en la llamada pues no me devuelve undefined, que me comentabas

saludos
  #6 (permalink)  
Antiguo 07/01/2003, 06:35
Avatar de DanielRey
Usuario no validado
 
Fecha de Ingreso: enero-2001
Ubicación: Mendoza
Mensajes: 630
Antigüedad: 23 años, 3 meses
Puntos: 1
Hay que aprender mucho para parecerse a Mikel Gómez.

Antonito: No puedes quejarte de falta de cooperación

Última edición por DanielRey; 07/01/2003 a las 06:37
  #7 (permalink)  
Antiguo 07/01/2003, 06:37
Avatar de mikel_gomez  
Fecha de Ingreso: febrero-2001
Mensajes: 482
Antigüedad: 23 años, 2 meses
Puntos: 3
¡Todos a la vez NO! ¡Por favor! :
__________________
Mikel Gómez
Hay que aprender mucho para saber poco

  #8 (permalink)  
Antiguo 07/01/2003, 06:38
Avatar de tunait
Moderadora
 
Fecha de Ingreso: agosto-2001
Ubicación: Terok Nor
Mensajes: 16.805
Antigüedad: 22 años, 8 meses
Puntos: 381
Ala cuanta respuesta en lo que respondía yo!!

Pero insisto, el script original funciona tal y como está.

saludos a todos
  #9 (permalink)  
Antiguo 07/01/2003, 06:51
Avatar de mikel_gomez  
Fecha de Ingreso: febrero-2001
Mensajes: 482
Antigüedad: 23 años, 2 meses
Puntos: 3
Re: aclaración

Bien, el script funciona tunait, porque se está aplicando .length sobre una cadena (concatenación de kk y kk1), no sobre un número. Dudo que sea lo que persigue Antonito. Ya nos lo aclarará, supongo.

El siguiente código javascript devuelve un undefined.

var a = 1234;
alert(a.length);

Yo he dado otra solución porque, personalmente, me parece más elegante, sin entrar en si funcionaba o no la función original.

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

  #10 (permalink)  
Antiguo 07/01/2003, 06:51
Avatar de Antonito  
Fecha de Ingreso: noviembre-2001
Ubicación: en la red
Mensajes: 446
Antigüedad: 22 años, 5 meses
Puntos: 3
MUCHISIMAS GRACIAS A TODOS.

Hay que ver que capacidad de respuesta. Da gusto...

mikel_gomez Gracias por dos cosas, contestar y resolver mi duda, y por recordarme que hay que volver a programar. Ni me acordaba de la recursividad!! (llevo mucho con Asp... y ya se sabe!!)

Aparte, comentarte, si es lo que busco, quiero concatenarlos, ya que en definitiva tengo varias cifras y quiero que se sumen los digitos sin importar la posición.

DanielRey gracias. Y si, hay que aprender mucho....

tunait si es lo que dices, pero el script que te di a ti no tenía en cuenta que el resultado no puede ser de dos cifras. Te da solo la suma. Y el problema es con esto último, pero muchas gracias por contestar y subir el script.

Lo probaré!!!

Os quiero. (sin malas interpretaciones)

Última edición por Antonito; 07/01/2003 a las 07:00
  #11 (permalink)  
Antiguo 07/01/2003, 07:48
Avatar de Antonito  
Fecha de Ingreso: noviembre-2001
Ubicación: en la red
Mensajes: 446
Antigüedad: 22 años, 5 meses
Puntos: 3
Funciona perfectamente.

thx de nuevo.

Una pregunta! ¿porque pones las etiqeutas de input asi? acabadas en / ??

Creo recordar que eso es para xml, no? se pone = asi?

Salu2+++
  #12 (permalink)  
Antiguo 07/01/2003, 08:17
Avatar de mikel_gomez  
Fecha de Ingreso: febrero-2001
Mensajes: 482
Antigüedad: 23 años, 2 meses
Puntos: 3
Re: xhtml

Es xhtml. O sea HTML adaptando las normas de XML, para decirlo con pocas palabras.

En xhtml, todas las etiquetas deben cerrarse. Por ejemplo una imagen debería ser:

<img ...></img>

o

<img ... />


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

  #13 (permalink)  
Antiguo 07/01/2003, 09:12
Avatar de Antonito  
Fecha de Ingreso: noviembre-2001
Ubicación: en la red
Mensajes: 446
Antigüedad: 22 años, 5 meses
Puntos: 3
  #14 (permalink)  
Antiguo 07/01/2003, 09:12
Avatar de Antonito  
Fecha de Ingreso: noviembre-2001
Ubicación: en la red
Mensajes: 446
Antigüedad: 22 años, 5 meses
Puntos: 3
Gracias por la aclaración.

Trabaje mucho con ebXml, sabia del Xhtml, una pregunta, ¿es mejor adaptarlo a xhtml?

  #15 (permalink)  
Antiguo 07/01/2003, 10:04
Avatar de mikel_gomez  
Fecha de Ingreso: febrero-2001
Mensajes: 482
Antigüedad: 23 años, 2 meses
Puntos: 3
Re: xhtml

Se tiende claramente hacia ello. Es el sucesor de HTML.

Cita de http://www.w3.org/MarkUp/
Cita:
What is XHTML?
The Extensible HyperText Markup Language (XHTML™) is a family of current and future document types and modules that reproduce, subset, and
extend HTML, reformulated in XML. XHTML Family document types are all XML-based, and ultimately are designed to work in conjunction with XML-based user agents. XHTML is the successor of HTML, and a series of specifications has been developed for XHTML.
Saludos,
Mikel
__________________
Mikel Gómez
Hay que aprender mucho para saber poco

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 12:49.