Prêt à échéance fixe (menu)

, par Pierre

Utilisation des fonctions pour l’écriture d’un programme de simulation de prêts bancaires

Nous allons aujourd’hui aider à réduire la dette privée en écrivant un outil de simulation de prêts (à la consommation, immobilier, etc.) qui permettra de simuler le remboursement d’un prêt à taux fixe à échéances constantes.

La bibliothèque math.h fournira les fonctions mathématiques, et la page wikipedia plan de remboursement nous donnera quelques formules.

Solution

  1. /* Declaration de fonctionnalites supplementaires */
  2. #include <stdlib.h> /* pour EXIT_SUCCESS */
  3. #include <stdio.h> /* pour printf() */
  4. #include <math.h> /* pour les fonctions mathematiques : pow(base,exp), log(x) */
  5.  
  6. /* Declaration des constantes et types utilisateur */
  7. #define TRUE 1
  8. #define FALSE 0
  9.  
  10. /* Declaration des fonctions utilisateur */
  11. void afficher_menu();
  12. void afficher_pret(double capital, double taux, double echeance, double duree);
  13. int choix_utilisateur();
  14. double valeur_utilisateur();
  15. double calculer_echeance(double capital, double taux, double duree);
  16. double calculer_duree(double capital, double taux, double echeance);
  17. double mensualiser_taux(double taux);
  18. void afficher_amortissement(double capital, double taux, double echeance, double duree);
  19.  
  20. /* Fonction principale */
  21. int main()
  22. {
  23.     /* Declaration et initialisation des variables */
  24.     double capital = 200.0; /* capital emprunté */
  25.     double taux = 0.035; /* taux annuel */
  26.     double echeance = 1.0; /* montant echeance mensuelle */
  27.     double duree = 25.0;  /* nombre d'annees */
  28.  
  29.     int continuer = TRUE;
  30.     int choix = 0;
  31.  
  32.     echeance = calculer_echeance(capital, taux, duree);
  33.  
  34.     while (continuer)
  35.     {
  36.         afficher_menu();
  37.         choix = choix_utilisateur();
  38.         if (0 == choix) /* quitter */
  39.         {
  40.             continuer = FALSE;
  41.         }
  42.         if (1 == choix) /* afficher le pret */
  43.         {
  44.             afficher_pret(capital, taux, echeance, duree);
  45.         }
  46.         if (2 == choix) /* afficher le tableau d'amortissement */
  47.         {
  48.             afficher_amortissement(capital, taux, echeance, duree);
  49.         }
  50.         if (3 == choix) /* changer le capital emprunte */
  51.         {
  52.             printf("Changement du capital\n");
  53.             capital = valeur_utilisateur();
  54.             echeance = calculer_echeance(capital, taux, duree);
  55.             afficher_pret(capital, taux, echeance, duree);
  56.         }
  57.         if (4 == choix) /* changer le taux */
  58.         {
  59.             printf("Changement du taux (en pourcent)\n");
  60.             taux = valeur_utilisateur() / 100;
  61.             echeance = calculer_echeance(capital, taux, duree);
  62.             afficher_pret(capital, taux, echeance, duree);
  63.         }
  64.         if (5 == choix) /* changer la duree */
  65.         {
  66.             printf("Changement de la duree (en annees)\n");
  67.             duree = valeur_utilisateur();
  68.             echeance = calculer_echeance(capital, taux, duree);
  69.             afficher_pret(capital, taux, echeance, duree);
  70.         }
  71.         if (6 == choix) /* fixer l'echeance calculer la duree */
  72.         {
  73.             printf("Fixer le montant de l'echeance\n");
  74.             echeance= valeur_utilisateur();
  75.             duree = calculer_duree(capital, taux, echeance);
  76.             afficher_pret(capital, taux, echeance, duree);
  77.         }
  78.         if (7 == choix) /* fixer le taux calculer la duree */
  79.         {
  80.             printf("Changement du taux (en pourcent)\n");
  81.             taux = valeur_utilisateur() / 100;
  82.             duree = calculer_duree(capital, taux, echeance);
  83.             afficher_pret(capital, taux, echeance, duree);
  84.         }
  85.     }
  86.      
  87.     /* Greetings */
  88.     printf("Sayonara\n\n");
  89.     /* Valeur fonction */
  90.     return EXIT_SUCCESS;
  91. }
  92.  
  93. /* Definition des fonctions utilisateur */
  94. void afficher_menu()
  95. {
  96.     printf("**********************************************\n");
  97.     printf("* Faites votre choix :                       *\n");
  98.     printf("* 1. afficher les donnees du pret            *\n");
  99.     printf("* 2. tableau d'amortissement                 *\n");
  100.     printf("* Faire varier le montant de l'echeance      *\n");    
  101.     printf("* 3. fixer le capital emprunt'e              *\n");
  102.     printf("* 4. fixer le taux annuel                    *\n");
  103.     printf("* 5. fixer la duree                          *\n");
  104.     printf("* Faire varier la duree du pret              *\n");    
  105.     printf("* 6. fixer la mensualit'e                    *\n");
  106.     printf("* 7. fixer le taux                           *\n");
  107.     printf("*                                            *\n");
  108.     printf("* 0. quitter                                 *\n");
  109.     printf("***************************** votre choix ? ");
  110. }
  111.  
  112. int choix_utilisateur()
  113. {
  114.     int choix = 0;
  115.     scanf("%d", &choix); /* peut echouer */
  116.     return choix;
  117. }
  118.  
  119. double valeur_utilisateur()
  120. {
  121.     double valeur = 0.0;
  122.     scanf("%lg", &valeur); /* peut echouer */
  123.     return valeur;
  124. }
  125.  
  126. void afficher_pret(double capital, double taux, double echeance, double duree)
  127. {
  128.     printf("Conditions d'emprunt\n");
  129.     printf("Capital :\t %g euros\n", capital);
  130.     printf("Taux annuel :\t %g%%\n", taux * 100);
  131.     printf("Echeance :\t %g euros\n", echeance);
  132.     printf("Duree : \t %g annees\n", duree);
  133.     printf("Cout total : \t %g\n", duree * echeance * 12 - capital);       
  134. }
  135.  
  136. double calculer_echeance(double capital, double taux, double duree)
  137. {
  138.     double tauxm = mensualiser_taux(taux);
  139.     return capital * tauxm / (1 - pow(1+tauxm, - duree * 12));
  140. }
  141.  
  142. double calculer_duree(double capital, double taux, double echeance)
  143. {
  144.     double tauxm = mensualiser_taux(taux);
  145.     return ((log(echeance/capital) - log(echeance/capital - tauxm)) / log(1+tauxm)) / 12;
  146. }
  147.  
  148. double mensualiser_taux(double taux)
  149. {
  150.     return pow(1.0 + taux, 1.0 / 12.0) - 1.0;
  151. }
  152.  
  153. void afficher_amortissement(double capital, double taux, double echeance, double duree)
  154. {
  155.     double tauxm = mensualiser_taux(taux);
  156.     double interets;
  157.     double total_interets = 0.0;
  158.     double dette;
  159.     int mois = 0;
  160.     dette = capital;
  161.  
  162.     while (dette > 0)
  163.     {
  164.         mois = mois + 1;
  165.         interets = dette * tauxm;
  166.         total_interets = total_interets + interets;
  167.         dette = dette + interets - echeance;
  168.         if (mois % 6 == 1)
  169.         {
  170.             printf("mois \t%d\t restant du \t%g\t echeance\t %g (%g%% interets)\n", mois, dette, echeance, interets/echeance * 100.0);
  171.         }
  172.     }
  173.     printf("Total des interets : %g (%g%% du capital)\n", total_interets, total_interets / capital * 100.0);
  174. }

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]