Foros del Web » Programación para mayores de 30 ;) » Java »

Crear una funcion para calcular un factorial.

Estas en el tema de Crear una funcion para calcular un factorial. en el foro de Java en Foros del Web. Wolas a todos!!! Antes de nada, agradecer a stock, marianoArg y Taito su ayuda con el problema que tuve la vez anterior (al final la ...
  #1 (permalink)  
Antiguo 07/02/2005, 12:33
 
Fecha de Ingreso: enero-2005
Mensajes: 10
Antigüedad: 19 años, 3 meses
Puntos: 0
Crear una funcion para calcular un factorial.

Wolas a todos!!!

Antes de nada, agradecer a stock, marianoArg y Taito su ayuda con el problema que tuve la vez anterior (al final la cosa no era para tanto jejeje). Weno, aki dejo una nueva duda que me ha surgido. ¿Cómo podría hacerse una función que te calculara el factorial de un número en kawa (la version que uso es la 3.51 aunque eso no creo que importe mucho)?. Llevo dos días dándole vueltas al coco y no se me ocurre nada (al final seguro que es una tonteria como la otra vez ). Si alguien tiene alguna idea... Muxas gracias de nuevo x adelantadoooo!.
  #2 (permalink)  
Antiguo 07/02/2005, 19:07
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
primeramente necesitas saber como se saca un factorial matematicamente, y si mal recuerdo es asi

5! = 5 x 4 x 3 x 2 x 1
5! = 120

asi se hace, no?? bueno, entonces que?? como programas eso?? pues si te das cuenta el numero se multiplica por por sus anteriores a el, entonces, lo primero que haces es tomar el numero que vas a sacar el factorial, e ir decrementandolo y a la vez multiplicando por su decremento y guardando el resultado en una variable por ahi, y ya!!


algo asi:

Código:
public int factorial(int num){
      int res=1;
      for(int i=num;i>0;i--){
           res *= i;
      }
       return res;
}
espero te sirva, bytes!!!
  #3 (permalink)  
Antiguo 08/02/2005, 14:41
 
Fecha de Ingreso: enero-2005
Mensajes: 10
Antigüedad: 19 años, 3 meses
Puntos: 0
Muxas gracias de nuevo stock!! Ves? la idea la tenía, pero aunque parezca de tontos, no sabía cómo escribir la instrucción "res *= i;". A ver, que ahora llega la segunda parte del problema, si tu o alguien fuera tan amable... Me explico: el problema te pide que saques los factoriales de todos los números que se encuentren entre 2 que tu introduzcas por teclado (es decir, si escribes 7 y 3 te tiene que mostrar el factorial de 7, el de 6,5,4 y 3) usando para ello una función a la que hay que realizarle llamadas. Como stock me ayudo con el pequeño problema del principio me embale y consegui sacar todo esto (pa q no se diga q no lo he intentao :P):

import java.io.* ;

public class ejercicio33
{
int factorial (int n)
{
if (n==0)
return 1;
else


n=n*(factorial(n-1));
return n;
}
public static void main (String [] args ) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader (System.in));
int x;
int y;
int resultado=0;
int contador;

String unaLinea;
System.out.println("Introduce un entero: ");
unaLinea = in.readLine();
x = Integer.parseInt(unaLinea);

String otraLinea;
System.out.println("Introduce un entero: ");
otraLinea = in.readLine();
y = Integer.parseInt(unaLinea);

contador=x;

for(contador=x;contador>=y;contador--)
{
ejercicio33 f = new ejercicio33 ();
resultado= f.factorial(x);

System.out.println("El factorial de "+x+" es " +resultado);

}
while (x>=contador)
{
resultado=resultado/x;
x=x-1;
System.out.println("El factorial de "+x+" es " +resultado);
}


}}


El problema es que si le meto como número 7 y 3, por ejemplo, sólo me muestra por pantalla las tres primeras coincidencias (7,6 y 5). ¿Sabe alguien a qué puede deberse esto?. Seguro que es algún detallito que no he puesto bien pero es que estoy por tirar el ordenador por la ventana porque no lo consigo sacar

Muxas gracias x adelantado!
  #4 (permalink)  
Antiguo 13/02/2005, 19:47
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
Puedes ir decrementando desde el maximo hasta el minimo, y vas calculando el factorial de cada uno:

Código:
public void factorialentredosnumeros(int max, int min){
      int i,res;
      for(i=max;i>=min;i--){
           res=factorial(i);
           System.out.println("el factorial de "+i+" es "+res);
      }

}


espero te sirva!!

bytes!!

Última edición por stock; 13/02/2005 a las 19:55
  #5 (permalink)  
Antiguo 14/02/2005, 02:43
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 19 años, 2 meses
Puntos: 1
Eso de pedir que te hagan los deberes está muy feo.

Un saludo

Zerjillo
  #6 (permalink)  
Antiguo 17/02/2005, 09:54
 
Fecha de Ingreso: enero-2005
Mensajes: 10
Antigüedad: 19 años, 3 meses
Puntos: 0
A ver Zerjillo, sin faltar en ningún momento al respeto, quiero aclararte un par de cositas.

1º: Yo no he pedido que me hicieran NADA. Sólo pedí consejo a alguien para ver si me podía ayudar. Además, la ayuda la pedí DESPUES de intentar hacer el ejercicio. Yo no le pido a nadie que me haga mis deberes.

2º: En este foro sólo he puesto un par de dudas sobre dos ejercicios, y si te fijas bien, en la primera, despues de resolverlo, coloqué el codigo entero para que todo el que tuviera mi problema lo pudiera resolver (cosa que también voy a hacer en este caso). y además, YO NO PIDO QUE ME HAGAN LOS EJERCICIOS SIN HABERLOS INTENTADO ANTES. ¿O es que acaso no ves el código que hice yo solito solo preguntando la duda del principio?.

Así que por favor no me digas lo que está feo ni lo que deja de estar porque es posible que puedas molestar a alguien.

Un saludo
  #7 (permalink)  
Antiguo 17/02/2005, 09:57
 
Fecha de Ingreso: enero-2005
Mensajes: 10
Antigüedad: 19 años, 3 meses
Puntos: 0
A continuación, le doy las gracias a Stock de nuevo por echarme una mano y dejo el problema resuelto POR MÍ MISMO con la ayuda de Stock por si a alguien le ocurre lo mismo:

import java.io.* ;
public class ejercicio33
{
int factorial (int n)
{
if (n==0)

return 1;

else

n=n*(factorial(n-1));

return n;
}
public static void main (String [] args ) throws IOException
{
BufferedReader in = new BufferedReader(new InputStreamReader (System.in));
int x;
int y;
int resultado=0;
int aux=0;

String unaLinea;

System.out.println("Introduce un entero: ");
unaLinea = in.readLine();
x = Integer.parseInt(unaLinea);

String otraLinea;

System.out.println("Introduce un entero: ");
otraLinea = in.readLine();
y = Integer.parseInt(otraLinea);

if (x<y)
{
aux=y;
y=x;
x=aux;
}
while (x>=y)
{
ejercicio33 f = new ejercicio33 ();
resultado= f.factorial(x);
System.out.println("El factorial de "+x+" es " +resultado);
x--;
}
}
}


Saludos!!
  #8 (permalink)  
Antiguo 18/02/2005, 02:35
 
Fecha de Ingreso: febrero-2005
Mensajes: 396
Antigüedad: 19 años, 2 meses
Puntos: 1
Riskbreaker, creo que en mi anterior mensaje no te falté el respeto.

Perdona si me equivoco, pero creo que deberías haber hecho la pregunta de la siguiente manera:

"Hola a todos

Me han pedido que haga una función que calcule el factorial de un número. Se que se trata de multiplicar ese número por todos los inferiores a el, es decir: 4! = 4*3*2*1. He estado pensando que se podría hacer con un bucle de la siguiente manera:

Código:
int fact = 4;

for (int i = 0 ; i < 4 ; i++) {
  fact = fact * i;
}

System.out.println(fact);
Pero no me funciona! Siempre me sale 0!. He estado dandole vueltas y nada, que no se donde está el error. ¿Podriais ayudarme?. Gracias por adelantado."

(Por cierto que el codigo está mal a propósito).

Así demuestras que realmente te lo has currado y que hay algo que se te escapa, porque para llegar a algo así, dado que parece que algo sabes programar, no debe serte muy dificil.

Una duda no es preguntar por tu ejercicio. Una duda es decir lo que llevas, lo que no funciona, y preguntar el detalle que se te escapa.

Repasa tu mensaje original y verás como no se parece mucho a lo que yo digo.

Por cierto que apruebo muy mucho el que luego pongas la solución al problema, porque realmente ese es el espíritu, que luego alguien con el mismo problema pueda encontrarlo.

Solo un detalle, usa los tags [ code ] y [ / code ] (sin espacios) para que tu código se vea bien formateado.

Un saludo

Zerjillo
  #9 (permalink)  
Antiguo 18/02/2005, 09:41
 
Fecha de Ingreso: enero-2005
Mensajes: 10
Antigüedad: 19 años, 3 meses
Puntos: 0
Ah! Un par de cositas. Zerjillo cuando dije que "sin faltar al respeto" queria decir que lo que iba a decir a continuación yo iba sin esa intencion, no que tu me hubieras faltado al respeto. Y segundo, aclarar que con el mosqueo que me pegue ayer se me olvidó poner que el ejercicio que puse era para "Calcular los factoriales de los números que hubiera entre otros dos que el usuario metiera por teclado". Mi duda era sobre cómo plantear la funcion del factorial. El resto lo hice yo.

Un saludo.
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




La zona horaria es GMT -6. Ahora son las 07:24.