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

Bluehats & UnivMobile , Présentation de la démarche design employée pour UnivMobile faite à la rencontre bluehats du 11 décembre 2019. [pdf, jpg]
Mon université en 2030, Texte d'une intervention que j'ai faite dans le cadre d'une soirée Cap 2030, organisée par le EdFab à Cap Digital le 27 février (...)
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]