JavaScript - Calculador de factorial defectuoso. Ayuda!

 
Vista:
sin imagen de perfil

Calculador de factorial defectuoso. Ayuda!

Publicado por seba (7 intervenciones) el 21/02/2020 04:22:04
Hola, no hace mucho empecé a estudiar programación y leyendo un libro de JS se plantea como desafío elaborar un programa que calcule el factorial de un número x con el bucle for. El caso es que no me sale y estoy empecinado en llegar hasta las últimas consecuencias antes de ir a YouTube a ver cómo lo resuelven otras personas. Primero, me gustaría que alguien me señalara de forma comprensible para un novato el error (muy burdo seguramente) y como podría solucionarlo. Muchas gracias de antemano. A continuación mi código.

1
2
3
4
5
6
7
8
9
10
//programa que calcula el factoria de un número entero
 
var numero = prompt('Ingrese un número entero positivo:'); //ingreso 4 por ejemplo
 
for(i=1; i<=numero-1; i++){
var resultado=numero;
resultado = resultado * i
}
document.write(resultado);
// me devuelve como resultad 12
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 60
Ha disminuido su posición en 2 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Calculador de factorial defectuoso. Ayuda!

Publicado por Julio (17 intervenciones) el 21/02/2020 05:26:20
Hola.

Fíjate que en cada iteración del bucle estás volviendo a definir la variable resultado, con lo que machacas lo que había y vuelve a ser 4 cada vez. Al final, como la última vez que hace la iteración tienes a i con valor 3, entonces por eso te muestra 4*3, o sea, 12.

Saca la definición de resultado fuera del bucle, tal que así:

1
2
3
4
5
6
7
var numero = prompt('Ingrese un número entero positivo:');
 
var resultado=numero;
for(i=1; i<=numero-1; i++){
    resultado = resultado * i
}
document.write(resultado);

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Calculador de factorial defectuoso. Ayuda!

Publicado por Diego Domene (7 intervenciones) el 22/02/2020 02:08:59
Claro, si lo imprimía por consola podía ver primero 4, 8 y finalmente 12. Que si hubiera alguna forma de sumarlos llegaría al mismo resultado. No sé si se pueda eso. De cualquier manera, la indicación que me diste soluciona el problema totalmente así que muchas gracias. Me contento al menos con que no era necesario corregir tanto el código, pensé que por ahí sobraría o faltaría algo. Vale la pena hacer siempre el esfuerzo no?
Gracias de nuevo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Calculador de factorial defectuoso. Ayuda!

Publicado por Diego Domene (7 intervenciones) el 22/02/2020 03:33:26
Aprovechando tu buena voluntad y criterio, te pregunto de paso otra cosa. En otro libro me encuentro con éste código:
(*sirve para encontrar el primer nro mayor a 20 y divisible por 7*)

1 for (var actual = 20; ; actual++) {
2 if (actual % 7 == 0)
3 break;
4 }
5 console.log(actual);
6 // → 21
Y como soy curioso, meto adentro el console.log, después del break para ver que pasa y lo que pasa es que me imprime sólo 20. Ahora bien, yo me pregunto por qué no imprime también el 21 abajo del 20, teniendo en cuenta que según el libro, como en el bucle for no está definido el condicional del centro, éste se debería ejecutar indefinidamente hasta que la sentencia break sea ejecutada, pero yo entiendo que dicha sentencia se debería ejecutar si y sólo si se cumple la condición del if, ergo como la primera vez no se cumple por valer "acutal=20", entonces por qué imprime el resultado y se sale de la función? No debería volver a ejecutarse una vez más por la actualización "actual++"? O el break se ejecuta independientemente se cumpla la sentencia del if? Gracias nuevamente.

Dice EloquentJavaScript: “La construcción for en este ejemplo no tiene la parte que verifica si el bucle debe terminar. Esto significa que el loop nunca terminará hasta que la sentencia break que está adentro sea ejecutada.”
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 60
Ha disminuido su posición en 2 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Calculador de factorial defectuoso. Ayuda!

Publicado por Julio (17 intervenciones) el 22/02/2020 08:33:11
Hola.

Para ello debes hacer una "traza", es decir, ir paso a paso ejecutando cada instrucción para ver qué pasa. En el caso que comentas, hace esto:

1. Asigna a la variable actual el valor 20 al inicio del for
2. Evalúa la condición del if haciendo 20 % 7, que no da como resultado 0, así que no entra en el break
3. Imprime el console.log que dices que le pones después del break, siendo la variable actual 20
4. Se ejecuta el actual++ en la siguiente iteración del for, ahora actual vale 21
5. Evalúa la condición del if haciendo 21 % 7, que ahora sí da un resultado igual a 0
6. Ejecuta el break, así que sale del for
7. Acaba el programa

Como ves, no te saca el 21 colocando un console.log después del break porque, una vez llega al break, sale del for y no ejecuta nunca ese nuevo console.log que le has puesto. Sencillamente, ahí no llega nunca.

Si estás aprendiendo y sientes curiosidad, permíteme sugerirte que te suscribas a mi blog, en donde estoy abordando la programación desde cero intentando llevarla de forma simplista y accesible. Aunque todavía no he hablado de JavaScript, sí estoy dándole a PHP y, por ejemplo, hace poco publiqué sobre el while en este artículo. Además, puedes ver el índice de contenidos para ver todo lo que hay publicado y la programación de lo próximo que voy a ir publicando. ¡Sería genial verte por allí!

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar