Somme de factorielles

, par Pierre

Sujet (contrôle de TP 2009)

Soit une variable entière n initialisée à une valeur positive. ècrire un programme qui :
- calcule la factorielle de n (le produit des en- tiers de 1 à n) et affiche le résultat. Exemple de sortie (pour n = 3) :


- puis calcule la somme des factorielles des n premiers entiers positifs. Exemple de sortie (pour n = 3) :

Le programme doit fonctionner pour n’importe quelle valeur positive de n.

Solution

Note : lorsqu’on utilise un accumulateur (additif ou multiplicatif), il faut penser à l’initialiser correctement. Ici il fallait penser à remettre l’accumulateur multiplicatif fact à 1 avant chaque nouveau calcul d’une factorielle.

  1. /* Declaration de fonctionnalites supplementaires */
  2. #include <stdlib.h> /* pour EXIT_SUCCESS */
  3. #include <stdio.h> /* pour printf() */
  4.  
  5. /* Declaration des constantes et types utilisateur */
  6.  
  7. /* Declaration des fonctions utilisateur */
  8.  
  9. /* Fonction principale */
  10. int main()
  11. {
  12. /* Declaration et initialisation des variables */
  13. int n = 5;
  14. int fact = 1;
  15. int i; /* var de boucle */
  16. int somme = 0; /* accumulateur de somme */
  17. int x; /* var de boucle */
  18.  
  19. /* Question 1 */
  20. /* calcul de la factorielle */
  21. for (i = 1; i <= n; i = i + 1) /* pour i = 1, ..., n */
  22. {
  23. fact = fact * i;
  24. }
  25. /* affichage */
  26. printf("Factorielle de %d : %d! = %d\n", n, n, fact);
  27.  
  28.  
  29. /* Question 2 */
  30. for (x = 1; x <= n; x = x + 1)/* pour chaque x entre 1 et n */
  31. {
  32. /* calculer factorielle de x */
  33. fact = 1; /* reinitialisation de l'accumulateur fact */
  34. for (i = 1; i <= x; i = i + 1) /* pour i = 1, ..., n */
  35. {
  36. fact = fact * i;
  37. }
  38. /* l'ajouter a la somme */
  39. somme = somme + fact;
  40. printf("x = %d, somme = %d, fact = %d\n", x, somme, fact);
  41. }
  42. printf("Somme des factorielles jusqu'a %d = %d\n", n, somme);
  43.  
  44. /* Valeur fonction */
  45. return EXIT_SUCCESS;
  46. }
  47.  
  48. /* Definition des fonctions utilisateur */

Télécharger

Revenu et logement, Je livre ici quelques éléments de comparaison concernant mon niveau de vie, pour couper court à quelques idées reçues, et un condensé de nombreuses (...)
Revenu et travail d’un enseignant-chercheur, Cet article complète l'article Revenu et logement, en détaillant un peu le budget de mon ménage, mon parcours d'enseignant-chercheur en terme de (...)
Cybersyn (el systemo synco), Au café, mardi 5 avril 2011, j'ai bien vu que, mis à part Antoine Allombert, personne ne connaissait l'histoire de l'extraordinaire projet chilien (...) [jpg, jpg, png]