Section courante

A propos

Section administrative du site

Il est souvent frustrant de constater que certaines fonctions financières très élaborées sont disponibles depuis longtemps dans les tableurs, mais demeurent absentes de nombreux langages de programmation. Des logiciels tels que Lotus 1-2-3 et Quattro Pro offrent une vaste gamme d'outils permettant d'effectuer des calculs financiers complexes en quelques secondes, alors qu'un programmeur doit généralement recréer lui-même les formules lorsqu'il développe une application spécialisée. Cette situation est particulièrement fréquente dans les domaines de la gestion des prêts, du financement hypothécaire et de l'analyse des investissements. Parmi ces fonctions figure PPaymt (Principal Payment), appelée Principal dans certaines versions francisées. Contrairement aux fonctions qui calculent le montant total d'un versement ou la portion consacrée aux intérêts, cette fonction permet de déterminer la part exacte d'un paiement affectée au remboursement du capital emprunté pour une période donnée. Cette information est extrêmement utile pour comprendre l'évolution réelle d'un prêt et analyser la vitesse à laquelle la dette diminue au fil du temps.

Dans un prêt amorti, chaque versement périodique est composé de deux éléments distincts : une partie servant à payer les intérêts dus au prêteur et une autre destinée à réduire le solde du capital restant. Au début du remboursement, la plus grande partie du versement est généralement absorbée par les intérêts, tandis que seule une faible fraction sert à rembourser le montant emprunté. Avec les années, cette proportion change progressivement et la portion consacrée au capital devient de plus en plus importante. La fonction PPaymt en anglais ou Principal en français permet précisément de calculer cette composante du remboursement pour une période particulière sans devoir construire manuellement un tableau d'amortissement complet. Le programme en langage C présenté ci-dessous reproduit cette fonctionnalité en s'appuyant sur plusieurs fonctions financières complémentaires. La fonction FVal calcule des valeurs intermédiaires liées à l'évolution du prêt, tandis que Paymt détermine le montant du versement périodique. Enfin, PPaymt combine ces calculs afin d'isoler la partie du paiement correspondant au remboursement du capital.

Les exemples proposés illustrent deux scénarios financiers distincts. Le premier concerne un prêt de 10 000 $ avec des versements trimestriels et un taux de 15 % par trimestre, tandis que le second porte sur un prêt de 100 000 $ amorti sur 30 ans avec des paiements mensuels et un taux annuel de 10 %. Dans chaque cas, le programme calcule la fraction du versement qui réduit effectivement le solde du prêt à la période étudiée. Cette approche permet d'intégrer dans une application C des fonctionnalités comparables à celles offertes par les grands tableurs financiers. Elle constitue également une excellente démonstration de l'utilisation des logarithmes, des exponentielles et des mathématiques financières avancées dans le développement de logiciels spécialisés. Grâce à ce type de fonction, il devient possible de concevoir des calculateurs hypothécaires, des simulateurs de financement ou des outils d'analyse financière capables de détailler avec précision la composition de chaque versement et l'évolution du capital restant à rembourser au fil du temps.

A l'aide du code source C suivant, vous trouverez la réponse que vous souhaitez :

  1. #include "stdio.h"
  2. #include "math.h"
  3.  
  4. double FVal(double Rate,double Nper,double Pmt,double PV,double PType) {
  5.     double F=exp(Nper*log(1.0+Rate));
  6.     if(fabs(Rate)<1E-6) return -Pmt*Nper*(1.0+(Nper-1.0)*Rate/2.0)*(1.0+Rate*PType)-PV*F;
  7.                   else return Pmt*(1-F)*(1/Rate+PType)-PV*F;
  8. }
  9.  
  10. double Paymt(double Rate,double Nper,double PV,double FV,double PType) {
  11.     double F=exp(Nper*log(1.0+Rate));
  12.     return (FV+PV*F)*Rate/((1+Rate*PType)*(1.0-F));
  13. }
  14.  
  15. double PPaymt(double Rate,double Per,double NPer,double PV,double FV,double PType) {
  16.     double F=Paymt(Rate,NPer,PV,FV,PType);
  17.     return F-Rate*FVal(Rate,Per-PType-1,F,PV,PType);
  18. }
  19.  
  20. void main() {
  21.     printf("Exemple de versements trimestriels d'un prêt de 10 000$ à 15%% par trimestre:");
  22.     printf("%.2f$\n",PPaymt(0.15/4,24,40,10000,0,1));
  23.     printf("Exemple de versements d'un prêt de 100 000$ à 10%% par mois:");
  24.     printf("%.2f$\n",PPaymt(0.1/12,2*12,30*12,100000,0,0));
  25. }

on obtiendra le résultat suivant :

Exemple de versements trimestriels d'un prêt de 10 000$ à 15% par trimestre:
-233.243
Exemple de versements d'un prêt de 100 000$ à 10% par mois:
-53.542


Dernière mise à jour : Samedi, le 22 août 2015