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]