Factorial en C (con bucle)

Cerrado
Usuario anónimo -  
lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   -
Hola,

Tengo que desarrollar un programa que calcule la factorial:
- utilizando un bucle (while o for),
- mediante una llamada recursiva de una función (n! = n x (n-1)!)
El usuario ingresará el entero, el programa devolverá el resultado formateado en pantalla.

Aún no hemos visto los bucles en clase, así que ¿alguien podría ayudarme a escribir estos programas?

En la siguiente parte, se nos pide explorar el papel que juega la elección de trabajar con enteros largos (long int), cortos (short int) o normales: ¿cuál es el valor máximo de n posible en cada caso? Utiliza la utilidad C sizeof() para determinar el tamaño en bytes de los enteros así declarados.

Aún no hemos visto enteros largos y cortos ni sizeof(), ¿alguien podría explicarme de qué se trata?

Luego, se nos pide hacer el mismo cálculo trabajando con la multiplicación de números reales (float) y doble precisión (double). ¿Existe una mejora de tus resultados en comparación con el cálculo hecho con enteros? ¿Cuál es el mayor entero N que se puede tratar en cada caso?

Aún no hemos visto la doble precisión, ¿alguien podría explicarme de qué se trata?

Muchas gracias de antemano por sus respuestas

3 respuestas

sebastien61 Mensajes publicados 495 Fecha de registro   Estado Miembro Última intervención   59
 
Hola,

en cuanto al bucle:

 int n;// el entero cuyo factorial quieres calcular int resultado = 1; // el resultado del cálculo int i = n; // un índice temporal while (i>1) { resultado = resultado * i; i--; // equivalente a i = i-1; } // aquí el resultado vale n! 


Para el método recursivo, es más fácil:

 int facto(int n) { if (n==0) // probamos el caso simple: caso en que n=0 return 1; else { return n * facto(n-1); // de lo contrario devolvemos n * facto(n-1) } } 


Si tienes preguntas, ¡no dudes!
5
artragis Mensajes publicados 510 Estado Miembro 146
 
Un bucle permite repetir una acción (siempre la misma) mientras una condición sea verdadera.
Por ejemplo
mientras i<1 escribir demasiado pequeño leer i fin mientras 

El bucle for permite hacer la misma acción varias veces un cierto número de veces
c=1 para i=1 a i =10 por paso de 1 hacer c+1 fin para

El bucle ha añadido 1 a C cada vez mientras 1 era menor que 10.

Un factorial es multiplicar el resultado por el siguiente entero. Por ejemplo !5 = 1*2*3*4*5
de ahí puedes crear tu bucle. El más corto es un bucle for, sin embargo si no lo has entendido, un bucle while funciona muy bien.

Ahora, un entero corto (cour) es con signo de 8 bits, va entonces de -128 a 127
un entero largo con signo de 16 bits, Por lo tanto hay que mirar en potencia de 2: 2^0 + 2^1+2^2+...+2^16. y obtendrás el número máximo que se puede tomar sabiendo que hay igual número de negativos que de positivos menos 1

Para la precisión simple, toma un cierto número de decimales, la precisión doble... toma el doble (haz una búsqueda en la web, la encontrarás fácilmente). En tu ejercicio trabajas con enteros... toca a ti hacer tu conclusión
3
lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
 
Hola,

No hemos visto aún las estructuras de bucles en clase, así que ¿alguien podría ayudarme a escribir estos programas?

No creo que el profe les haya dado ejercicios con los bucles que ya hayan hecho en las clases.

Tampoco veo un esfuerzo de tu parte para mostrarnos lo que has hecho.
Lo que veo es que pides que hagan los ejercicios por ti.
La respuesta está ahí Pedir ayuda para tus ejercicios en CCM
Por respeto a quienes ya han publicado una solución, no voy a eliminar el mensaje.
Será para los siguientes si sigues en esa dirección.
Tienes una adivinanza aquí http://www.commentcamarche.net/forum/affich 11290011 devinette en lenguaje c?#1

Cierro.
--
106485010510997108
2