Problema con Factorial..

Iniciado por Komodo, 3 Septiembre 2010, 14:20 PM

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

Komodo

#include <stdio.h>

//Ejercicio 10

int factorial(int ff) {
    if (ff > 0)
        return ff * factorial(ff-1);
    else return 1;
}

int main()
{
    int num=0,n=0,array[num],a,resto=0;
printf("Introduce numero: ");
scanf("%i",&num);
for(a=num;a>0;a--){
        array[n]=a;
        n++;
}

for(n=0;n<num;n++){
if(array[n]!=1){
printf("%i*",array[n]);
    }
    else{
     printf("%i",array[n]);
    }
}
printf("=%i",factorial(num));
return 0;
}


Este programa coge un numero e imprime su factorial y el proceso, ejemplo:

4 - 4*3*2*1 = 24

Vale, y si lo prueban veran que a partir del 8 no funciona...

porque?


clodan

#1
No se si es lo que buscabas, pero te la complicaste demasiado...

ya lo probe y asi queda mas compacto:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
 int a=1, c, resultado=1;
 scanf("%d",&c);
 while (c!=a){
       resultado=resultado*a;
       a++; // jejeje toy empezando a usar estos como me dijeron  ;D
 }
 printf("%d", resultado);

 system("PAUSE");
 return 0;
}


Obviamente, al usar variables int, tenes menos espacios reservados y por lo tanto no vas a tener tanta libertad al preguntar un numero... osea, no creo qe el maximo a evaluar sea 25 o 20...

Komodo

#2
Tio ayudame si sabes de verdad, el code mio esta hecho así porque es para una web.

Y tu code tiene un error.

Esto es una tontería: resultado=resultado*a;

Tienes que sumar a resultado la operación que tu pones detrás.

Yo lo que quiero es que me expliquen porque cuando pongo 9 el programa se cierra y da error.

eDITO: yo no lo hice como todo el mundo que va añadiendo hasta que llega al numero que ingreso, yo he ido restando hasta que llega a 1, y por eso lo ves tan dificil.


clodan

el code mio no tira ningun error xD si copiaste y lo pegaste en 1 sola linea, cualquier code tira error.


En que parte de todo lo que dijiste dice qe es para una web??? porqe lo lei 2 o 3 veces y no encuerto la parte esa...
Cita de: Komodo en  3 Septiembre 2010, 14:20 PM

#include <stdio.h>

//Ejercicio 10

int factorial(int ff) {
    if (ff > 0)
        return ff * factorial(ff-1);
    else return 1;
}

int main()
{
    int num=0,n=0,array[num],a,resto=0;
printf("Introduce numero: ");
scanf("%i",&num);
for(a=num;a>0;a--){
        array[n]=a;
        n++;
}

for(n=0;n<num;n++){
if(array[n]!=1){
printf("%i*",array[n]);
    }
    else{
     printf("%i",array[n]);
    }
}
printf("=%i",factorial(num));
return 0;
}


Este programa coge un numero e imprime su factorial y el proceso, ejemplo:

4 - 4*3*2*1 = 24

Vale, y si lo prueban veran que a partir del 8 no funciona...

porque?

Komodo

Es un error lógico no que tire un error el compilador  ¬¬

Lo digo yo, y donde dice que no lo puedo hacer así?

Jajajjaa LOL


clodan

#5
Cita de: Komodo en  3 Septiembre 2010, 16:47 PM
Es un error lógico no que tire un error el compilador  ¬¬

Lo digo yo, y donde dice que no lo puedo hacer así?

Jajajjaa LOL

mira, ahi hice que ande... ahora te muestro lo que cambie:

La funcion la mande abajo y arriba la declare nada mas, despues al num=0 le saque el =0, ya que si despues le vas a asignar un valor, es innecesario asignarle 0, Agrege un par de \n para dejar espacios.. y mmm no me acuerdo qe mas cambie :s ahora anda barbaro, lo unico qe tiene es que suponete... si vos ingresas 10 te va a devolver este resultado:


Ingrese un Numero:
10 //el numero qe ingresamos
10
9
8
7
6
5
4
3
2
1
3628800 // este seria el resultado


Esto lo hace el programa porqe le pusiste aca:

for(n=0;n<num;n++){
    if(array[n]!=1){
       printf("%i\n",array[n]);
       }
    else {
       printf("%i\n",array[n]);
       }
    }

los printf()... si no los pondrias y asignaras eso a algun valor quedaria solamente el resultado.

Salu2!


#include <stdio.h>
#include <stdlib.h>

int factorial(int ff);

int main(){
 int num,n=0,array[num],a,resto=0;
 printf("Introduce numero: \n");
 scanf("%i",&num);
 for(a=num;a!=0;a--){
    array[n]=a;
    n++;
    }
 for(n=0;n<num;n++){
    if(array[n]!=1){
       printf("%i\n",array[n]);
       }
    else {
       printf("%i\n",array[n]);
       }
    }
printf("%i\n",factorial(num));
system("PAUSE");
return 0;
}

int factorial(int ff){
  if (ff > 0){
        return (ff * factorial(ff-1));
        }
  else {
        return 1;
        }
   }


EI: juntando mensajes.

igualmente el problema qe veo qe persiste es que el resultado es un numero tan grande que probablemente supere el espacio reservado y tira error el programa, pero hasta 12 o 13 anda barbaro el programa.

Komodo

Primero no hagas doble post esta prohibido.

Segundo se perfectamente que si quito el printf y tal me queda solo el resultado, pero es que no quiero, veo que no lees..



clodan

En que parte de todo lo que dijiste que lo pongo aca abajo para qe puedas "leer" especificaste como querias el resultado??

En ningun momento dijiste: Para que es el codigo, que funcionamiento debia tener ni con que fin o para que uso, entonces mejor lee tus comentarios y despues lee los mios  :xD


Cita de: Komodo en  3 Septiembre 2010, 17:14 PM
Primero no hagas doble post esta prohibido.

Segundo se perfectamente que si quito el printf y tal me queda solo el resultado, pero es que no quiero, veo que no lees..


Cita de: Komodo en  3 Septiembre 2010, 16:47 PM
Es un error lógico no que tire un error el compilador  ¬¬

Lo digo yo, y donde dice que no lo puedo hacer así?

Jajajjaa LOL
Cita de: Komodo en  3 Septiembre 2010, 15:56 PM
Tio ayudame si sabes de verdad, el code mio esta hecho así porque es para una web.

Y tu code tiene un error.

Esto es una tontería: resultado=resultado*a;

Tienes que sumar a resultado la operación que tu pones detrás.

Yo lo que quiero es que me expliquen porque cuando pongo 9 el programa se cierra y da error.

eDITO: yo no lo hice como todo el mundo que va añadiendo hasta que llega al numero que ingreso, yo he ido restando hasta que llega a 1, y por eso lo ves tan dificil.
Cita de: Komodo en  3 Septiembre 2010, 14:20 PM
#include <stdio.h>

//Ejercicio 10

int factorial(int ff) {
    if (ff > 0)
        return ff * factorial(ff-1);
    else return 1;
}

int main()
{
    int num=0,n=0,array[num],a,resto=0;
printf("Introduce numero: ");
scanf("%i",&num);
for(a=num;a>0;a--){
        array[n]=a;
        n++;
}

for(n=0;n<num;n++){
if(array[n]!=1){
printf("%i*",array[n]);
    }
    else{
     printf("%i",array[n]);
    }
}
printf("=%i",factorial(num));
return 0;
}


Este programa coge un numero e imprime su factorial y el proceso, ejemplo:

4 - 4*3*2*1 = 24

Vale, y si lo prueban veran que a partir del 8 no funciona...

porque?

satu

Hola

No he probado tu código pero a simple vista creo que el fallo está aquí


int num=0, array[num]


Estás declarando un array con 0 posiciones, cámbialo a ver si se soluciona

Saludos
Breakbeat como forma de vida

clodan

Cita de: satu en  3 Septiembre 2010, 19:36 PM
Hola

No he probado tu código pero a simple vista creo que el fallo está aquí


int num=0, array[num]


Estás declarando un array con 0 posiciones, cámbialo a ver si se soluciona

Saludos

el problema estaba justo donde vos lo marcaste... esta declarando un array con la cantidad de espacios 0 jajaja osea, cada vez qe se quiere meter algo en el array no se puede! jajaja buena observacion!

yo le habia sacado al codigo el =0 del num para que el array qede indefinido.