Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: thebus4k en 10 Mayo 2020, 19:19 pm



Título: javascript
Publicado por: thebus4k en 10 Mayo 2020, 19:19 pm
Hola a todos, tengo que hacer un script que calcule el factorial de un número.
Aparte debe mostrar por consola toda la operación, por ejemplo si se introduce un 4:
1.Calculando Factorial de 4
2.Operación = 4x3x2x1
3.Factorial = 24

La parte del script que lo calcule ya lo tengo y funciona
Código:

<script>
var n1,n2;
    n1=parseInt(prompt("Introduce un número"));
    n2=1;
if(n1<0){
    while(n1<0){
        n1=parseInt(prompt("El valor del número introducido debe ser mayor que 0"));
    }
}
while (n1>1){
    n2=n1*n2;
    n1=n1-1;
}

document.write("El factorial es: "+n2);
</script>

La parte de la consola no sé como implementarlo.

Espero que alguien pueda ayudarme, un saludo.


Título: Re: javascript
Publicado por: rub'n en 11 Mayo 2020, 03:53 am
Hola a todos, tengo que hacer un script que calcule el factorial de un número.
Aparte debe mostrar por consola toda la operación, por ejemplo si se introduce un 4:
1.Calculando Factorial de 4
2.Operación = 4x3x2x1
3.Factorial = 24

La parte del script que lo calcule ya lo tengo y funciona
Código:

<script>
var n1,n2;
    n1=parseInt(prompt("Introduce un número"));
    n2=1;
if(n1<0){
    while(n1<0){
        n1=parseInt(prompt("El valor del número introducido debe ser mayor que 0"));
    }
}
while (n1>1){
    n2=n1*n2;
    n1=n1-1;
}

document.write("El factorial es: "+n2);
</script>

La parte de la consola no sé como implementarlo.

Espero que alguien pueda ayudarme, un saludo.

usad console.log()

https://developer.mozilla.org/es/docs/Web/API/Console/log

recuerda este es el foro de java, un moderador deberia mover esto.


Título: Re: javascript
Publicado por: @XSStringManolo en 11 Mayo 2020, 04:08 am
Código
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Factorial</title>
  6. </head>
  7. <body>
  8. <script>
  9. /* Declara 2 variables y las define en una sola expresión */
  10. var n1 = prompt("Introduce un número"),
  11. n2 = 1;
  12.  
  13. /* Declara otra variable. Aquí para indicar hoisting */
  14. var div;
  15.  
  16. /* Muestra en consola que puso el usuario. */
  17. console.log("El usuario ha introducido:" + n1);
  18.  
  19. /*
  20. Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
  21. while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {
  22.  
  23. console.log("El número " + n1 + " introducido no es factorizable.");
  24. n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
  25. }
  26.  
  27. /* Coherce a número. */
  28. n1 = +n1;
  29.  
  30. while(n1) {
  31. n2 = n1 * n2;
  32. --n1;
  33. console.log("Valor de n2 = " + n2 + "\nValor de n1 = " + n1);
  34. }
  35.  
  36. div = document.createElement("div");
  37. div.id = "respuesta";
  38. div.innerHTML = "El factorial es: " + n2;
  39.  
  40. document.body.appendChild(div);
  41.  
  42. </script>
  43. </body>
  44. </html>
Te modifiqué un poco el código. Los temas de javascript van a desarollo web, Java no tiene lo más minimo que ver con javascript. Se le puso ese nombre para aprovecharse del tirón comercial de Java.


Título: Re: javascript
Publicado por: thebus4k en 11 Mayo 2020, 13:20 pm
Código
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Factorial</title>
  6. </head>
  7. <body>
  8. <script>
  9. /* Declara 2 variables y las define en una sola expresión */
  10. var n1 = prompt("Introduce un número"),
  11. n2 = 1;
  12.  
  13. /* Declara otra variable. Aquí para indicar hoisting */
  14. var div;
  15.  
  16. /* Muestra en consola que puso el usuario. */
  17. console.log("El usuario ha introducido:" + n1);
  18.  
  19. /*
  20. Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
  21. while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {
  22.  
  23. console.log("El número " + n1 + " introducido no es factorizable.");
  24. n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
  25. }
  26.  
  27. /* Coherce a número. */
  28. n1 = +n1;
  29.  
  30. while(n1) {
  31. n2 = n1 * n2;
  32. --n1;
  33. console.log("Valor de n2 = " + n2 + "\nValor de n1 = " + n1);
  34. }
  35.  
  36. div = document.createElement("div");
  37. div.id = "respuesta";
  38. div.innerHTML = "El factorial es: " + n2;
  39.  
  40. document.body.appendChild(div);
  41.  
  42. </script>
  43. </body>
  44. </html>
Te modifiqué un poco el código. Los temas de javascript van a desarollo web, Java no tiene lo más minimo que ver con javascript. Se le puso ese nombre para aprovecharse del tirón comercial de Java.

Muchas gracias por responder,  la próxima vez que tenga otra pregunta lo pondré es su debido foro.

Tengo otra cuestión.
Como puedo separa el contenido del script de forma que queden 2 archivos js, el primero de ellos solo debe tener el cálculo del factorial y el otro que contenga la parte de la consola?


Título: Re: javascript
Publicado por: @XSStringManolo en 11 Mayo 2020, 17:26 pm
Debes crear una función para factorizar. Le añado un tercer parámetro opcional para ver las operaciones de distintas formas.

La comprobación de si lo introducido por el usuario es válido también lo metería aquí.

Código
  1. function Factorizar(num1, num2, info) {
  2.  
  3. if(num1 < 0 || isNaN(+num1) || /\s/gm.test(num1) || num1 === null || num1 === "") {
  4. throw new error("El número no puede ser factorizado");
  5. }
  6.  
  7. var numero1 = num1, numero2 = num2;
  8. while(n1) {
  9. num2 = num1 * num2;
  10. --num1;
  11. switch(info) {
  12. case 1:
  13. console.log(numero1 + " - " + numero2 + " es igual a " + num2);
  14. break;
  15.  
  16. case 2:
  17. alert(numero1 + " - " + numero2 + " es igual a " + num2);
  18. break;
  19. }
  20. }
  21. }

Este archivo lo guardas tal cual, sin las etiquetas <script> como Factorizar.js


Ahora, donde hacías la factorización lo remplazas por la llamada a la nueva función. Lo guardas como codigo.js o main.js, index.js, programaFactorizar.js... Algo que se pueda deducir que es el script.

Código
  1. /* Declara 2 variables y las define en una sola expresión */
  2. var n1 = prompt("Introduce un número"),
  3. n2 = 1;
  4.  
  5. /* Declara otra variable. Aquí para indicar hoisting */
  6. var div;
  7.  
  8. /* Muestra en consola que puso el usuario. */
  9. console.log("El usuario ha introducido:" + n1);
  10.  
  11. /*
  12. Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
  13. while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {
  14.  
  15. console.log("El número " + n1 + " introducido no es factorizable.");
  16. n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
  17. }
  18.  
  19. /* Coherce a número. */
  20. n1 = +n1;
  21.  
  22. Factorizar(n1, n2, 1);
  23.  
  24. div = document.createElement("div");
  25. div.id = "respuesta";
  26. div.innerHTML = "El factorial es: " + n2;
  27.  
  28. document.body.appendChild(div);

Por último añades los scripts a tu html, a mi me gusta meter las librerías y funciones puras al final de la etiqueta head y el código al final del body.

Código
  1. <!DOCTYPE html>
  2. <meta charset="utf-8">
  3. <title>Factorial</title>
  4. <script src="Factorizar.js"></script>
  5. </head>
  6. <script src="codigo.js"></script>
  7. </body>
  8. </html>

 


Título: Re: javascript
Publicado por: thebus4k en 11 Mayo 2020, 17:58 pm
Debes crear una función para factorizar. Le añado un tercer parámetro opcional para ver las operaciones de distintas formas.

La comprobación de si lo introducido por el usuario es válido también lo metería aquí.

Código
  1. function Factorizar(num1, num2, info) {
  2.  
  3. if(num1 < 0 || isNaN(+num1) || /\s/gm.test(num1) || num1 === null || num1 === "") {
  4. throw new error("El número no puede ser factorizado");
  5. }
  6.  
  7. var numero1 = num1, numero2 = num2;
  8. while(n1) {
  9. num2 = num1 * num2;
  10. --num1;
  11. switch(info) {
  12. case 1:
  13. console.log(numero1 + " - " + numero2 + " es igual a " + num2);
  14. break;
  15.  
  16. case 2:
  17. alert(numero1 + " - " + numero2 + " es igual a " + num2);
  18. break;
  19. }
  20. }
  21. }

Este archivo lo guardas tal cual, sin las etiquetas <script> como Factorizar.js


Ahora, donde hacías la factorización lo remplazas por la llamada a la nueva función. Lo guardas como codigo.js o main.js, index.js, programaFactorizar.js... Algo que se pueda deducir que es el script.

Código
  1. /* Declara 2 variables y las define en una sola expresión */
  2. var n1 = prompt("Introduce un número"),
  3. n2 = 1;
  4.  
  5. /* Declara otra variable. Aquí para indicar hoisting */
  6. var div;
  7.  
  8. /* Muestra en consola que puso el usuario. */
  9. console.log("El usuario ha introducido:" + n1);
  10.  
  11. /*
  12. Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
  13. while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {
  14.  
  15. console.log("El número " + n1 + " introducido no es factorizable.");
  16. n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
  17. }
  18.  
  19. /* Coherce a número. */
  20. n1 = +n1;
  21.  
  22. Factorizar(n1, n2, 1);
  23.  
  24. div = document.createElement("div");
  25. div.id = "respuesta";
  26. div.innerHTML = "El factorial es: " + n2;
  27.  
  28. document.body.appendChild(div);

Por último añades los scripts a tu html, a mi me gusta meter las librerías y funciones puras al final de la etiqueta head y el código al final del body.

Código
  1. <!DOCTYPE html>
  2. <meta charset="utf-8">
  3. <title>Factorial</title>
  4. <script src="Factorizar.js"></script>
  5. </head>
  6. <script src="codigo.js"></script>
  7. </body>
  8. </html>

 

El primero de los códigos me genera 5 errores, en la línea 1, 4, 8, 13 y 17.


Título: Re: javascript
Publicado por: @XSStringManolo en 11 Mayo 2020, 19:08 pm
Código
  1. function Factorizar(num1, num2, info) {
  2.  
  3. if(num1 < 0 || isNaN(+num1) || /\s/gm.test(num1) || num1 === null || num1 === "") {
  4. throw new error("El número no puede ser factorizado");
  5. }
  6.  
  7. var numero1 = num1, numero2 = num2;
  8. while(num1) {
  9. num2 = num1 * num2;
  10. --num1;
  11. switch(info) {
  12. case 1:
  13. console.log(numero1 + " - " + numero2 + " es igual a " + num2);
  14. break;
  15.  
  16. case 2:
  17. alert(numero1 + " - " + numero2 + " es igual a " + num2);
  18. break;
  19. }
  20. }
  21. return num2
  22. }

Código
  1. /* Declara 2 variables y las define en una sola expresión */
  2. var n1 = prompt("Introduce un número"),
  3. n2 = 1;
  4.  
  5. /* Declara otra variable. Aquí para indicar hoisting */
  6. var div;
  7.  
  8. /* Muestra en consola que puso el usuario. */
  9. console.log("El usuario ha introducido:" + n1);
  10.  
  11. /*
  12. Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
  13. while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {
  14.  
  15. console.log("El número " + n1 + " introducido no es factorizable.");
  16. n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
  17. }
  18.  
  19. /* Coherce a número. */
  20. n1 = +n1;
  21.  
  22. n2 = Factorizar(n1, n2, 1);
  23.  
  24. div = document.createElement("div");
  25. div.id = "respuesta";
  26. div.innerHTML = "El factorial es: " + n2;
  27.  
  28. document.body.appendChild(div);

Pregunta lo que no entiendas. Con copiar y pegar no aprendes nada. Entregarás el trabajo y el día que te toque examen irás tan atrasado que no te enterarás de nada.


Deberías ir siempre 2 pasos por delante de la clase para poder preguntar dudas en clase en vez de no entender nada mirarlo en casa y no tener a quien preguntarle.


Título: Re: javascript
Publicado por: thebus4k en 11 Mayo 2020, 20:29 pm
Código
  1. function Factorizar(num1, num2, info) {
  2.  
  3. if(num1 < 0 || isNaN(+num1) || /\s/gm.test(num1) || num1 === null || num1 === "") {
  4. throw new error("El número no puede ser factorizado");
  5. }
  6.  
  7. var numero1 = num1, numero2 = num2;
  8. while(num1) {
  9. num2 = num1 * num2;
  10. --num1;
  11. switch(info) {
  12. case 1:
  13. console.log(numero1 + " - " + numero2 + " es igual a " + num2);
  14. break;
  15.  
  16. case 2:
  17. alert(numero1 + " - " + numero2 + " es igual a " + num2);
  18. break;
  19. }
  20. }
  21. return num2
  22. }

Código
  1. /* Declara 2 variables y las define en una sola expresión */
  2. var n1 = prompt("Introduce un número"),
  3. n2 = 1;
  4.  
  5. /* Declara otra variable. Aquí para indicar hoisting */
  6. var div;
  7.  
  8. /* Muestra en consola que puso el usuario. */
  9. console.log("El usuario ha introducido:" + n1);
  10.  
  11. /*
  12. Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
  13. while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {
  14.  
  15. console.log("El número " + n1 + " introducido no es factorizable.");
  16. n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
  17. }
  18.  
  19. /* Coherce a número. */
  20. n1 = +n1;
  21.  
  22. n2 = Factorizar(n1, n2, 1);
  23.  
  24. div = document.createElement("div");
  25. div.id = "respuesta";
  26. div.innerHTML = "El factorial es: " + n2;
  27.  
  28. document.body.appendChild(div);

Pregunta lo que no entiendas. Con copiar y pegar no aprendes nada. Entregarás el trabajo y el día que te toque examen irás tan atrasado que no te enterarás de nada.


Deberías ir siempre 2 pasos por delante de la clase para poder preguntar dudas en clase en vez de no entender nada mirarlo en casa y no tener a quien preguntarle.

Entiendo todo lo que me explicas, pero la función que has creado en el primer código como lo implemento en el segundo codigo?
Y lo de la comprobación que me indicas en el código 1 como lo pongo también?


Título: Re: javascript
Publicado por: @XSStringManolo en 11 Mayo 2020, 20:37 pm
La función ya tiene la llamada hecha en la línea 22.


Está todo hecho.


Título: Re: javascript
Publicado por: thebus4k en 11 Mayo 2020, 21:19 pm
La función ya tiene la llamada hecha en la línea 22.


Está todo hecho.

Me he explicdo mal, lo siento
A ver tengo que hacer el programa de la factorización para que se lea el numero entero positivo y si no se introducen un número de ese tipo volver a pedirlo, a partir de este js crear el segundo js para que se pidan los datos y se imprima por consola.

Código:

function Factorial(n) {
    var ans=1;
    for (var i = 2; i <= n; i++)
 ans = ans * i;
    return ans;
}
 
Este sería el código de la función, faltaría el segundo js.
Puedes echarme una mano?


Título: Re: javascript
Publicado por: @XSStringManolo en 11 Mayo 2020, 22:33 pm
Puedes poner el ejercicio tal cual te lo dieron? Lo que pides y como lo pides no tiene sentido que lo pidan. Tiene pinta que lo estás interpretando mal.


Título: Re: javascript
Publicado por: thebus4k en 11 Mayo 2020, 23:07 pm
Puedes poner el ejercicio tal cual te lo dieron? Lo que pides y como lo pides no tiene sentido que lo pidan. Tiene pinta que lo estás interpretando mal.
Te pongo el enunciado completo:

Para esta práctica debéis desarrollar una página web con un comportamiento sencillo
La página no tiene por que tener un diseño especial, su único propósito es que practiquéis con javascript.


Se debe pedir al usuario un número entero positivo por pantalla. (en caso de que el número no cumpla los requisitos se debe seguir pidiendo al usuario otro número hasta que los cumpla).
Posteriormente se calculará el factorial de dicho número y se mostrará en el cuerpo del html el resultado (visible en la página web por el usuario).
Además, en la consola debéis incluir la operación que habéis calculado. Por ejemplo, si el usuario introduce el número 5, la consola debe mostrar lo siguiente: 
>Calculando factorial de 5
>Operación: 5x4x3x2x1
>Resultado: 120

La página web debe estar compuesta de:

un archivo HTML
un archivo CSS para estructurar ligeramente la página
un archivo js llamado utils.js cuyo contenido será únicamente la función factorial que será la encargada de, dado un número de entrada únicamente calcular y devolver el resultado de su factorial.
un archivo JS llamado main.js donde incluiréis el resto del código javascript que necesiteis.


Título: Re: javascript
Publicado por: @XSStringManolo en 11 Mayo 2020, 23:42 pm
Te pongo el enunciado completo:

Para esta práctica debéis desarrollar una página web con un comportamiento sencillo
La página no tiene por que tener un diseño especial, su único propósito es que practiquéis con javascript.


Se debe pedir al usuario un número entero positivo por pantalla. (en caso de que el número no cumpla los requisitos se debe seguir pidiendo al usuario otro número hasta que los cumpla).
Posteriormente se calculará el factorial de dicho número y se mostrará en el cuerpo del html el resultado (visible en la página web por el usuario).
Además, en la consola debéis incluir la operación que habéis calculado. Por ejemplo, si el usuario introduce el número 5, la consola debe mostrar lo siguiente:
>Calculando factorial de 5
>Operación: 5x4x3x2x1
>Resultado: 120

La página web debe estar compuesta de:

un archivo HTML
un archivo CSS para estructurar ligeramente la página
un archivo js llamado utils.js cuyo contenido será únicamente la función factorial que será la encargada de, dado un número de entrada únicamente calcular y devolver el resultado de su factorial.
un archivo JS llamado main.js donde incluiréis el resto del código javascript que necesiteis.
Lo que dice exáctamente en este ejercicio es lo que te hice. Te falta ajustar los console.log al enunciado, añádelos en el switch donde está el console.log dentro del cuerpo de la función factorial.


También te falta añadir el css.


Practica mucho programando javascript y sigue los tutos de w3schools de javascript.


Título: Re: javascript
Publicado por: thebus4k en 12 Mayo 2020, 00:01 am
Lo que dice exáctamente en este ejercicio es lo que te hice. Te falta ajustar los console.log al enunciado, añádelos en el switch donde está el console.log dentro del cuerpo de la función factorial.


También te falta añadir el css.


Practica mucho programando javascript y sigue los tutos de w3schools de javascript.

Ya lo he probado y solo me genera la ventana para introducir el número pero no saca el factorial.


Título: Re: javascript
Publicado por: @XSStringManolo en 12 Mayo 2020, 00:21 am
Algo hiciste mal.

Va perfecto, aquí lo tienes todo junto.

Código
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Factorial</title>
  6. <script>function Factorizar(num1, num2, info) {
  7.  
  8.  if(num1 < 0 || isNaN(+num1) || /\s/gm.test(num1) || num1 === null || num1 === "") {
  9.    throw new error("El número no puede ser factorizado");
  10.  }
  11.  
  12.  var numero1 = num1, numero2 = num2;
  13.  while(num1) {
  14.    num2 = num1 * num2;
  15.   --num1;
  16.    switch(info) {
  17.      case 1:
  18.        console.log(numero1 + " - " + numero2 + " es igual a " + num2);
  19.      break;
  20.  
  21.      case 2:
  22.        alert(numero1 + " - " + numero2 + " es igual a " + num2);
  23.      break;
  24.    }
  25.  }
  26. return num2
  27. }</script>
  28. </head>
  29. <body>
  30. <script>
  31. /* Declara 2 variables y las define en una sola expresión */
  32. var n1 = prompt("Introduce un número"),
  33. n2 = 1;
  34.  
  35. /* Declara otra variable. Aquí para indicar hoisting */
  36. var div;
  37.  
  38. /* Muestra en consola que puso el usuario. */
  39. console.log("El usuario ha introducido:" + n1);
  40.  
  41. /*
  42. Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
  43. while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {
  44.  
  45.  console.log("El número " + n1 + " introducido no es factorizable.");
  46.  n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
  47. }
  48.  
  49. /* Coherce a número. */
  50. n1 = +n1;
  51.  
  52. n2 = Factorizar(n1, n2, 1);
  53.  
  54. div = document.createElement("div");
  55. div.id = "respuesta";
  56. div.innerHTML = "El factorial es: " + n2;
  57.  
  58. document.body.appendChild(div);
  59. </script>
  60. </body>
  61. </html>

Ya te expliqué anteriormente como separar los script. Míralo bien.