javascript

Iniciado por thebus4k, 10 Mayo 2020, 19:19 PM

0 Miembros y 1 Visitante están viendo este tema.

thebus4k

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.

rub'n

#1
Cita de: 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.

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.


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

@XSStringManolo

Código (javascript) [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Factorial</title>
</head>
<body>
<script>
/* Declara 2 variables y las define en una sola expresión */
var n1 = prompt("Introduce un número"),
n2 = 1;

/* Declara otra variable. Aquí para indicar hoisting */
var div;

/* Muestra en consola que puso el usuario. */
console.log("El usuario ha introducido:" + n1);

/*
Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {

console.log("El número " + n1 + " introducido no es factorizable.");
n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
}

/* Coherce a número. */
n1 = +n1;

while(n1) {
n2 = n1 * n2;
--n1;
console.log("Valor de n2 = " + n2 + "\nValor de n1 = " + n1);
}

div = document.createElement("div");
div.id = "respuesta";
div.innerHTML = "El factorial es: " + n2;

document.body.appendChild(div);

</script>
</body>
</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.

thebus4k

#3
Cita de: @XSStringManolo en 11 Mayo 2020, 04:08 AM
Código (javascript) [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Factorial</title>
</head>
<body>
<script>
/* Declara 2 variables y las define en una sola expresión */
var n1 = prompt("Introduce un número"),
n2 = 1;

/* Declara otra variable. Aquí para indicar hoisting */
var div;

/* Muestra en consola que puso el usuario. */
console.log("El usuario ha introducido:" + n1);

/*
Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {

console.log("El número " + n1 + " introducido no es factorizable.");
n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
}

/* Coherce a número. */
n1 = +n1;

while(n1) {
n2 = n1 * n2;
--n1;
console.log("Valor de n2 = " + n2 + "\nValor de n1 = " + n1);
}

div = document.createElement("div");
div.id = "respuesta";
div.innerHTML = "El factorial es: " + n2;

document.body.appendChild(div);

</script>
</body>
</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?

@XSStringManolo

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 (javascript) [Seleccionar]
function Factorizar(num1, num2, info) {

if(num1 < 0 || isNaN(+num1) || /\s/gm.test(num1) || num1 === null || num1 === "") {
throw new error("El número no puede ser factorizado");
}

var numero1 = num1, numero2 = num2;
while(n1) {
num2 = num1 * num2;
--num1;
switch(info) {
case 1:
console.log(numero1 + " - " + numero2 + " es igual a " + num2);
break;

case 2:
alert(numero1 + " - " + numero2 + " es igual a " + num2);
break;
}
}
}


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 (javascript) [Seleccionar]
/* Declara 2 variables y las define en una sola expresión */
var n1 = prompt("Introduce un número"),
n2 = 1;

/* Declara otra variable. Aquí para indicar hoisting */
var div;

/* Muestra en consola que puso el usuario. */
console.log("El usuario ha introducido:" + n1);

/*
Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {

console.log("El número " + n1 + " introducido no es factorizable.");
n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
}

/* Coherce a número. */
n1 = +n1;

Factorizar(n1, n2, 1);

div = document.createElement("div");
div.id = "respuesta";
div.innerHTML = "El factorial es: " + n2;

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 (html4strict) [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Factorial</title>
<script src="Factorizar.js"></script>
</head>
<body>
<script src="codigo.js"></script>
</body>
</html>



thebus4k

Cita de: @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 (javascript) [Seleccionar]
function Factorizar(num1, num2, info) {

if(num1 < 0 || isNaN(+num1) || /\s/gm.test(num1) || num1 === null || num1 === "") {
throw new error("El número no puede ser factorizado");
}

var numero1 = num1, numero2 = num2;
while(n1) {
num2 = num1 * num2;
--num1;
switch(info) {
case 1:
console.log(numero1 + " - " + numero2 + " es igual a " + num2);
break;

case 2:
alert(numero1 + " - " + numero2 + " es igual a " + num2);
break;
}
}
}


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 (javascript) [Seleccionar]
/* Declara 2 variables y las define en una sola expresión */
var n1 = prompt("Introduce un número"),
n2 = 1;

/* Declara otra variable. Aquí para indicar hoisting */
var div;

/* Muestra en consola que puso el usuario. */
console.log("El usuario ha introducido:" + n1);

/*
Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {

console.log("El número " + n1 + " introducido no es factorizable.");
n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
}

/* Coherce a número. */
n1 = +n1;

Factorizar(n1, n2, 1);

div = document.createElement("div");
div.id = "respuesta";
div.innerHTML = "El factorial es: " + n2;

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 (html4strict) [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Factorial</title>
<script src="Factorizar.js"></script>
</head>
<body>
<script src="codigo.js"></script>
</body>
</html>



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

@XSStringManolo

Código (javascript) [Seleccionar]
function Factorizar(num1, num2, info) {

if(num1 < 0 || isNaN(+num1) || /\s/gm.test(num1) || num1 === null || num1 === "") {
throw new error("El número no puede ser factorizado");
}

var numero1 = num1, numero2 = num2;
while(num1) {
num2 = num1 * num2;
--num1;
switch(info) {
case 1:
console.log(numero1 + " - " + numero2 + " es igual a " + num2);
break;

case 2:
alert(numero1 + " - " + numero2 + " es igual a " + num2);
break;
}
}
return num2
}


Código (javascript) [Seleccionar]
/* Declara 2 variables y las define en una sola expresión */
var n1 = prompt("Introduce un número"),
n2 = 1;

/* Declara otra variable. Aquí para indicar hoisting */
var div;

/* Muestra en consola que puso el usuario. */
console.log("El usuario ha introducido:" + n1);

/*
Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {

console.log("El número " + n1 + " introducido no es factorizable.");
n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
}

/* Coherce a número. */
n1 = +n1;

n2 = Factorizar(n1, n2, 1);

div = document.createElement("div");
div.id = "respuesta";
div.innerHTML = "El factorial es: " + n2;

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.

thebus4k

#7
Cita de: @XSStringManolo en 11 Mayo 2020, 19:08 PM
Código (javascript) [Seleccionar]
function Factorizar(num1, num2, info) {

if(num1 < 0 || isNaN(+num1) || /\s/gm.test(num1) || num1 === null || num1 === "") {
throw new error("El número no puede ser factorizado");
}

var numero1 = num1, numero2 = num2;
while(num1) {
num2 = num1 * num2;
--num1;
switch(info) {
case 1:
console.log(numero1 + " - " + numero2 + " es igual a " + num2);
break;

case 2:
alert(numero1 + " - " + numero2 + " es igual a " + num2);
break;
}
}
return num2
}


Código (javascript) [Seleccionar]
/* Declara 2 variables y las define en una sola expresión */
var n1 = prompt("Introduce un número"),
n2 = 1;

/* Declara otra variable. Aquí para indicar hoisting */
var div;

/* Muestra en consola que puso el usuario. */
console.log("El usuario ha introducido:" + n1);

/*
Mientras el numero sea negativo, sea NaN, contenga espacios, sea null o un string sin valor ... */
while(n1 < 0 || isNaN(+n1) || /\s/gm.test(n1) || n1 === null || n1 === "") {

console.log("El número " + n1 + " introducido no es factorizable.");
n1 = prompt("El número introducido no es factorizable.\nInténtalo de nuevo");
}

/* Coherce a número. */
n1 = +n1;

n2 = Factorizar(n1, n2, 1);

div = document.createElement("div");
div.id = "respuesta";
div.innerHTML = "El factorial es: " + n2;

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?

@XSStringManolo

La función ya tiene la llamada hecha en la línea 22.


Está todo hecho.

thebus4k

Cita de: @XSStringManolo en 11 Mayo 2020, 20:37 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?