home *** CD-ROM | disk | FTP | other *** search
/ Best of German Only 1 / romside_best_of_german_only_1.iso / finanzen / jz / pack8.exe / FINANZL.DOK next >
Text File  |  1993-04-06  |  82KB  |  2,314 lines

  1.      Karl Jenz   JZ-Finanzmathe
  2.      ─────────────────────────────────────────────────────────── 1 ──
  3.  
  4.        
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.                          J Z - F I N A N Z M A T H E
  18.  
  19.  
  20.                       eine Toolbox für Finanzmathematik
  21.                             in Borland Pascal von
  22.  
  23.  
  24.                                   Karl Jenz
  25.                         7302 Ostfildern 1 Horbstr. 7
  26.  
  27.                  <ab 1.7.93:> 73760 Ostfildern  Horbstraße 7
  28.  
  29.  
  30.  
  31.  
  32.        8. März 1993 Vers. 1.1
  33.        Revision: 6. April 1993      JZ-Finanzmathe Überblick
  34.      ─────────────────────────────────────────────────────────── 3 ──
  35.  
  36.        
  37.        1. Überblick
  38.  
  39.        1.1 Übersicht
  40.  
  41.        Die Finanzmathematik ist teilweise eine ziemlich komplizierte
  42.        Materie, die nur mit einer Programmiersprache befriedigend
  43.        bewältigt werden kann.
  44.  
  45.        Die Toolbox stellt verschiedene Objekte zur Verfügung, die sehr
  46.        leicht zu verwenden sind. Der Programmierer muß nicht unbedingt
  47.        selber objektorientiert programmieren, die Beispiele im
  48.        nächsten Kapitel zeigen die problemlose Anwendung der Objekte.
  49.  
  50.        Die Toolbox wird als Quelltext zur Verfügung gestellt, der vom
  51.        Programmierer selbst zu compilieren ist. Natürlich wird der
  52.        Compiler nicht geliefert.
  53.  
  54.        Der Programmierer muß die Eingabe und die Ausgabe selbst
  55.        programmieren, dafür bietet die Toolbox keine brauchbaren
  56.        Hilfen. Auch die Beispiele zeigen lediglich die Anwendung der
  57.        Objekte.
  58.  
  59.        Theoretische Erläuterungen finden Sie im Kapital Theorie.
  60.        Dieses Kapitel setzt allerdings voraus, daß finanzmathematische
  61.        Grundkenntnisse vorhanden sind.
  62.  
  63.  
  64.        1.2 Bestellung
  65.  
  66.        Auf der Diskette befindet sich die Datei bestell.txt. Diese
  67.        Datei sollten Sie sich ausdrucken lassen, wenn Sie die
  68.        Vollversion bestellen wollen. Der Ausdruck kann so erfolgen:
  69.  
  70.           copy bestell.txt prn
  71.  
  72.        Dem Bestellformular entnehmen Sie bitte den Preis.
  73.  
  74.  
  75.        1.3 Rechte
  76.  
  77.        Die Rechte an der Toolbox sind bei dem Autor:
  78.  
  79.           Karl Jenz  7302 Ostfildern 1  Horbstraße 7
  80.           Tel. 0711 / 444082
  81.  
  82.        Wenn die Toolbox regulär gekauft wurde, dürfen die Objekte in
  83.        eigene Programme eingebunden werden. Der Quelltext der Toolbox
  84.        darf dabei aber nicht weitergegeben werden.      JZ-Finanzmathe Überblick
  85.      ─────────────────────────────────────────────────────────── 4 ──
  86.  
  87.        
  88.        1.4 Haftung
  89.  
  90.        Die Toolbox ist getestet und die Ergebnisse sind geprüft.
  91.        Jegliche Schadenersatzansprüche sind aber ausgeschlossen.
  92.  
  93.        Die Toolbox ist nicht darauf eingerichtet, jede Fehleingabe
  94.        abzufangen. In Ihrem Programm sollten Sie die Eingaben
  95.        überprüfen, bevor Sie Werte an die Objekte der Toolbox
  96.        übergeben.
  97.  
  98.  
  99.        1.5 Installation
  100.  
  101.        Die Quelltexte finanzl*.pas sind in das Verzeichnis des
  102.        Compilers zu kopieren und zu compilieren. Empfohlen wird ein
  103.        eigenes Unterverzeichnis für Finanzmathematik, z. B. finanzm.
  104.  
  105.        Entwickelt wurde die Toolbox mit BORLAND PASCAL, aber die
  106.        Anwendung mit Turbo Pascal ab Version 5.5 dürfte keinerlei
  107.        Schwierigkeiten bereiten.
  108.  
  109.        Es wird empfohlen, den Quelltext unverändert zu belassen und
  110.        nicht zu erweitern. Eigene Erweiterungen sollten in einer
  111.        eigenen UNIT erfolgen, die die Toolbox einbindet.
  112.  
  113.        Für künftige Erweiterungen der Toolbox durch weitere Units sind
  114.        die Bezeichnungen finanzl3 bis finanzl9 vorgesehen. Deshalb
  115.        sollten diese Bezeichnungen nicht für eigene Erweiterungen
  116.        verwendet werden.
  117.  
  118.  
  119.        1.6 eingeschränkte Version
  120.  
  121.        Die Toolbox gibt es als eingeschränkte Version. Dabei enthält
  122.        der Quelltext in Pascal die ersten drei Objekte der Unit
  123.        finanzl.
  124.  
  125.        Die eingeschränkte Version darf kopiert und an Dritte
  126.        weitergegeben werden. Dabei dürfen allerdings weder der
  127.        Quelltext noch die Beschreibung geändert werden.
  128.  
  129.  
  130.        1.7 Beispielprogramm
  131.  
  132.        Zum Lieferumfang gehört das Beispielprogramm fintv.pas im
  133.        Quelltext. Es zeigt, wie man mit Turbo Vision von Borland
  134.        Pascal ziemlich schnell ansprechende Programme schreiben kann.      UNIT finanzl    Interface
  135.      ─────────────────────────────────────────────────────────── 5 ──
  136.  
  137.        
  138.        2. UNIT Finanzl
  139.  
  140.        2.1 Interface
  141.  
  142.  
  143.        unit finanzl ;
  144.                 {
  145.                   *****************************
  146.             J Z - F I N A N Z M A T H E  Vers. 1.1  26.3.93
  147.             eine Toolbox für Finanzmathematik in Borland Pascal
  148.             Alle Rechte bei: Karl Jenz
  149.                              7302 Ostfildern 1 Horbstraße 7
  150.                   *****************************
  151.                     }
  152.  
  153.        INTERFACE
  154.  
  155.        const
  156.             ja = true ;
  157.             nein = false;
  158.             nullR = 0.0 ;  { null bei real }
  159.             zinsAnzWe = 7 ;   { Anzahl Zinssätze bei Zinssatzwechsel }
  160.             anzSonderTi = 3 ;
  161.                { Anzahl Sondertilgungen bei Tilgungsplan }
  162.  
  163.        type
  164.  
  165.           defPerioden = ( mtl, vj, hj, j ) ;
  166.              { mögliche Perioden mtl. vj. hj. j. }
  167.  
  168.           defZahlgTerm = ( vorsch, nachsch ) ;
  169.          { vorschüssige oder nachschüssige Zahlungsweise bei Raten }
  170.  
  171.           defZinsPr = array [1..zinsAnzWe] of real ;
  172.              { Anzahl Zinssätze bei Zinswechsel }
  173.  
  174.           defZahlgArt = ( gutschr, auszahlg );
  175.              { Gutschrift / Belastung der Zinsen oder Zahlung }      UNIT finanzl    Interface
  176.      ─────────────────────────────────────────────────────────── 6 ──
  177.  
  178.        
  179.           PEinmal = ^defEinmal ;   { Einmalzahlungen }
  180.           defEinmal = object
  181.              public
  182.              perioden, restmonate : integer ;
  183.  
  184.  
  185.              { Methoden: }
  186.              procedure null1 ; virtual ;
  187.  
  188.              function qfaktor ( proz : real ; per : real ) : real ;
  189.                { berechnet aus Zinssatz und Periode den qWert
  190.                   12 % Zins Periode 3=vj  ergibt 1,03 }
  191.  
  192.              procedure laufzBer ( monate, periode : integer ;
  193.                         VAR vollPer, restMon : integer ) ;
  194.                  { liefert Anzahl der Perioden = vollPer
  195.                     und Restmonate = restMon }
  196.  
  197.              function potenz ( basis, faktor : real ) : real ;
  198.                 { Potenzieren }
  199.  
  200.              function zinsAusQ ( qWert : real ; periode : integer ) :
  201.                        real ;
  202.                   { berechnet aus q und zinsperiode den Zinssatz }
  203.           function naeherg ( diffErg, diffBasis, steigBasis : real ) :
  204.                         real ;
  205.                   { Unterfunktion für Näherungsverfahren }
  206.  
  207.              public
  208.              { Schnittstelle zu Programmen }
  209.              constructor init ;
  210.              destructor done ;
  211.  
  212.             function ergebnis ( zinsPr : real ; monate, zinsPer :
  213.                         integer ) : real ;
  214.                 { Ergebnis bei 1,-- Kapital = Rechenwert }
  215.  
  216.              function zinsPrBer ( monate, zinsPer : integer ;
  217.                                qWert : real ) : real ;
  218.                   { Berechnet Zinssatz aus qWert z.B. aus 1,6875 }
  219.  
  220.             end;      UNIT finanzl    Interface
  221.      ─────────────────────────────────────────────────────────── 7 ──
  222.  
  223.        
  224.            PRaten = ^defRaten ;
  225.            defRaten = object ( defEinmal )   { Ratenzahlungen }
  226.              public
  227.              procedure null1 ; virtual ;
  228.  
  229.              function zinsMonate ( ratenPer, zinsPer : integer ;
  230.                         zahlgTermin : defZahlgTerm ) : real ;
  231.                { berechnet wieviele Monate die Raten
  232.                  im Schnitt während der Zinsperiode verzinst werden }
  233.  
  234.             function perEndWert (  zinsPr : real ; ratenPer, zinsPer :
  235.               integer; zahlgTermin : defZahlgTerm ) : real ;
  236.                 { Endwert bei Rate von 1 DM  zum Ende Zinsperiode }
  237.  
  238.            function restEndWert ( zinsPr : real ; ratenPer, restPer :
  239.                integer ; zahlgTermin : defZahlgTerm ) : real ;
  240.                   { Berechnung Restmonate nach letzter voller
  241.                            Zinsperiode }
  242.  
  243.            function endkap ( zinsPr : real ; ratenPer, zinsPer :
  244.              integer ; zahlgTermin : defZahlgTerm ) : real ;
  245.                     { Berechnung Endkapital aus perioden und
  246.                               restmonate
  247.                           diese müssen vorher berechnet sein }
  248.  
  249.              public
  250.              constructor init ;
  251.              destructor done ;
  252.  
  253.            function endWert ( anzahl : integer ; zinsPr : real ;
  254.                      ratenPer, zinsPer : integer ;
  255.                         zahlgTermin : defZahlgTerm ) : real ;
  256.                 { Endwert der Rate von 1 DM nach x Raten }
  257.  
  258.             function zinsPrRa ( anzahl : integer ; ratenPer, zinsPer :
  259.               integer; zahlgTermin : defZahlgTerm ; qWert : real ) :
  260.                             real ;
  261.                 { berechnet Zinssatz für qWert
  262.                     qWert = Multiplikator bei einer Rate von 1 DM }
  263.  
  264.             end;      UNIT finanzl    Interface
  265.      ─────────────────────────────────────────────────────────── 8 ──
  266.  
  267.        
  268.            PZinsWe = ^defZinsWe ;  { Anlage mit Zinssatzwechsel }
  269.            defZinsWe = object ( defEinmal)
  270.             public
  271.             jahre : integer ;  { nur für ganze Jahre berechnen }
  272.             zinsPrWe : defZinsPr ; { Zinssätze }
  273.             zahlgArt : defZahlgArt ;
  274.             endWert, rendite : real ;
  275.             procedure null1 ; virtual ;
  276.             function wurzel ( basis, faktor : real ) : real ;
  277.             procedure berechnWe2 ;
  278.             function berechnWeUnt ( pr0 : real ) : real ;
  279.             public
  280.             constructor init ;
  281.             destructor done ;
  282.  
  283.             procedure berechnWe ( jahre2 : integer ; zinsPrWe2 :
  284.               defZinsPr ; zahlgArt2 : defZahlgArt );
  285.             function ret_rendite : real ;
  286.             function ret_endWert : real ;
  287.            end;
  288.  
  289.          PWertp = ^defWertp ;
  290.             { Rendite festverzinsl. Wertpapier }
  291.          defWertp = object ( defEinmal )
  292.            public
  293.            procedure null1  ; virtual ;
  294.  
  295.            public
  296.            constructor init ;
  297.            destructor done ;
  298.            function rendWp ( kaufKurs , zinsPr : real ; zinsPer :
  299.                 integer ; rueckKurs : real ; laufzMonate : integer ) :
  300.                        real ;
  301.            { Berechnung Rendite nach der internationalen Methode von
  302.                      AIBD   Funktion gibt Rendite zurück }
  303.            end;      UNIT finanzl    Interface
  304.      ─────────────────────────────────────────────────────────── 9 ──
  305.  
  306.        
  307.          PDarl = ^defDarl ;    { normale Darlehen }
  308.          defDarl = object ( defRaten )
  309.            public
  310.            auszPr, rueckPr, zinsPr, tilgPr : real ;
  311.            zinsPer, tilgPer, lfzMonate : integer;
  312.            rate, rest, effektiv : real ;
  313.  
  314.            procedure null1 ; virtual ;
  315.            procedure lfzMonBer ;
  316.            function restBer ( darl, zinsPr2, rate2 : real ;
  317.                      zinsPer2, tilgPer2 : integer ) : real ;
  318.            procedure effektivBer ;
  319.                     { effektiver Jahreszins berechnen }
  320.  
  321.            public
  322.            constructor init ;
  323.            destructor done ;
  324.            procedure berechnDa ( auszPr2, rueckPr2, zinsPr2, tilgPr2 :
  325.                 real ; zinsPer2, tilgPer2, lfzMonate2 : integer ) ;
  326.                   { Berechnung Darlehenswerte
  327.                      wenn lfzMonate2 = 0, dann Laufzeit bis
  328.                      Darlehensende berechnen }
  329.  
  330.            function ret_rest : real ;  { Restschuld zurückgeben }
  331.            function ret_laufzMte : integer ;
  332.            function ret_effektiv : real ;
  333.          end;
  334.  
  335.  
  336.         defSonderTi = object
  337.             { Sondertilgungen für Tilgungsplan }
  338.           public
  339.           jahr, monat : integer ;
  340.           betrag : real ;
  341.           public
  342.           procedure null1 ;
  343.           constructor init ;
  344.           destructor done ;
  345.        procedure eingabe ( jahr2, monat2 : integer ; betrag2 : real );
  346.        function tilgDa ( jahr2, monat2 : integer ) : boolean ;
  347.                 { ob Sondertilgung zum Termin vorhanden }
  348.        function ret_tilg : real ; { Tilgungsbetrag zurückgeben }
  349.          end;
  350.  
  351.         defSonderTi2 = array[1..anzSonderTi] of defSonderTi ;      UNIT finanzl    Interface
  352.      ─────────────────────────────────────────────────────────── 10 ──
  353.  
  354.        
  355.         PTilgPl = ^defTilgPl ;     { Tilgungsplan }
  356.         defTilgPl = object
  357.             public
  358.             darlDm, zinsPr, tilgPr, rateDm : real ;
  359.             zinsPer, tilgPer : integer ;
  360.             ausJahr, ausMonat : integer ;
  361.             SonderTi : defSonderTi2 ; { Sondertilgungen }
  362.             rate, rest, zinsZaehler, zinsDm, tilgDm : real ;
  363.             lfdJahr, lfdMonat : integer ;
  364.             sumZins, sumTilg : real ;
  365.             nullStop, sondertEin, endeDa : boolean ;
  366.  
  367.             procedure null1 ; virtual ;
  368.             procedure monWeiter ;  { 1 Monat weiterzählen,
  369.                                     Jahreswechsel beachten}
  370.             procedure ratenBer ; { Tilgungsrate berechnen }
  371.             procedure tilgBer ; { fällige Tilgung verrechnen }
  372.             procedure zinsBer ; { fällige Zinsen verrechnen }
  373.             procedure sondertBer ;
  374.                 { Sondertilgungen verrechnen, wenn vorhanden }
  375.             procedure abschlussBer ;
  376.                 { Abschließen, letzte Berechnung vornehmen }
  377.  
  378.             public
  379.             constructor init ;
  380.             destructor done ;
  381.             procedure eingDarl ( darlDm2, zinsPr2, tilgPr2, rateDm2 :
  382.                real ; zinsPer2, tilgPer2, ausJahr2, ausMonat2 :
  383.                 integer ; nullStop2 : boolean );
  384.               { anstelle einer Tilgung in Prozenz (tilgPr2) kann auch
  385.                 die Tilgungsrate in DM (rateDm2) gemeldet werden.
  386.                 nullStop2 = bei völliger Rückzahlung Berechnung
  387.                   beenden }
  388.             procedure eingSonderTi ( nr, jahr, monat : integer ;
  389.                     betrag : real );
  390.            { Die Eingabe muß NACH Aufruf von eingDarl (..) erfolgen }
  391.             procedure schritt ;
  392.               { 1 Tilgungsperiode weiterrechnen }
  393.             function faellig ( monat, periode : integer ) : boolean ;
  394.               { ob in dem Monat gemäß Zins- oder Tilgungsperiode
  395.                    Zins oder Zahlung fällig
  396.                 Kann auch verwendet werden um Ausgabe zu verdichten
  397.                         }      UNIT finanzl    Interface
  398.      ─────────────────────────────────────────────────────────── 11 ──
  399.  
  400.        
  401.                  { noch defTilgPl    Rückgaben: }
  402.             function ret_lfdJahr : integer ;
  403.             function ret_lfdMonat : integer ;
  404.  
  405.             function ret_zinsDm : real ;
  406.             function ret_tilgDm : real ;
  407.                 { nach Rückgabe von Zins und Tilgung werden
  408.                   diese Zählvariablen auf Null gestellt }
  409.  
  410.             function ret_rest : real ;
  411.             function ret_sumZins : real ;
  412.             function ret_sumTilg : real ;
  413.             function ret_endeDa : boolean ;
  414.             end;  { ende defTilgPl }
  415.  
  416.  
  417.            { Allgemeine Funktion: }
  418.          function perZahl ( perArt : defPerioden ) : integer ;
  419.                { ermöglicht die Eingabe der Perioden mit Kürzel mtl
  420.                   usw.  dadurch Programm besser lesbar
  421.                   Diese Funktion gibt den Rechenwert zurück }
  422.  
  423.          function wertDaR ( wert : real ) : boolean ;
  424.             { prüft ob ein Wert vorhanden ist. }
  425.  
  426.          function abschneiden ( wert : real ) : real ;
  427.             { auf 2 Stellen nach Komma abschneiden }      UNIT finanzl    Beschreibung
  428.      ─────────────────────────────────────────────────────────── 12 ──
  429.  
  430.        
  431.        2.2 Beschreibung
  432.  
  433.        Die nachfolgende Beschreibung ist Ihr Nachschlagewerk, wenn Sie
  434.        programmieren. Beschrieben werden zunächst die Typen und
  435.        allgemeinen Funktionen; dann die Objektmethoden, die als
  436.        Schnittstelle zu Ihrem Programm vorgesehen sind.
  437.  
  438.        Nur solche Variablen und Methoden der Objekte werden
  439.        beschrieben, die als Schnittstelle zum Programm vorgesehen
  440.        sind.
  441.  
  442.        Die Beschreibung enthält auch nicht den constructor und
  443.        destructor der Objekte. Deren problemlose Verwendung ist aus
  444.        den Beispielprogrammen ersichtlich.
  445.  
  446.  
  447.        2.2.1 Allgemeine Typen
  448.  
  449.        Perioden (defPerioden)
  450.        ──────────────────────
  451.        Für die Zinsperioden und die Ratenperioden gibt es 4 fest
  452.        definierte Termine, die alle einen Rechenwert haben. Übersicht:
  453.  
  454.           Periode  Rechenwert  Bedeutung
  455.           -------------------------------------------
  456.             mtl       1        monatlich am 30.
  457.             vj        3        vierteljährlich zum Quartalsende
  458.             hj        6        halbjährlich am 30.6. und 30.12.
  459.             j        12        jährlich am 30.12.
  460.  
  461.        Wenn Sie einem Objekt eine Periode übergeben, können Sie
  462.        entweder den Rechenwert übergeben oder die
  463.  
  464.           allgemeine Funktion perZahl ( Periode )
  465.  
  466.        dafür verwenden. Übersicht der Übergabemöglichkeiten:
  467.  
  468.              1   oder   perZahl (mtl)
  469.              3   oder   perZahl (vj)
  470.              6   oder   perZahl (hj)
  471.             12   oder   perZahl (j)
  472.  
  473.  
  474.        Sie sollten den Objekten nur eine der vorgesehenen 4 Perioden
  475.        übergeben. Andere Werte können zu einem falschen Ergebnis
  476.        führen.      UNIT finanzl    Beschreibung
  477.      ─────────────────────────────────────────────────────────── 13 ──
  478.  
  479.        
  480.        Zahlungstermine (defZahlgTerm)
  481.        ──────────────────────────────
  482.        Über den Zahlungstermin wird festgelegt, ob eine Rate zu Beginn
  483.        einer Ratenperiode (=vorschüssig) oder am Ende der Ratenperiode
  484.        (=nachschüssig) zu bezahlen ist.
  485.  
  486.        Bei Sparvorgängen geht man immer von vorschüssiger
  487.        Zahlungsweise aus.
  488.  
  489.        Die Tilgungsraten für Darlehen werden dagegen immer
  490.        nachschüssig gezahlt.
  491.  
  492.        Ob Raten vorschüssig oder nachschüssig zu bezahlen sind, das
  493.        sollten Sie nicht abfragen. Das muß Ihr Programm selber wissen.
  494.  
  495.        Finanzmathematische Berechnungen gehen im übrigen meistens vom
  496.        Zeitpunkt 0 aus. Man nimmt also an, daß die erste Zahlung an
  497.        einem 30.12. erfolgt.
  498.  
  499.        Ein Bild mit vierteljährlichen Raten soll das Thema abrunden:
  500.  
  501.                   │     │     │     │
  502.              1. Sparrate│     │ 2. Sparrate      <-- vorschüssig
  503.                   │     │     │     │
  504.               Auszahlg. │     │     │
  505.               Darlehen  │     │     │
  506.                   │     │     │ 1. Tilgung       <-- nachschüssig
  507.                   │     │     │     │
  508.                   └─────┴─────┴─────┴───────────────
  509.        Monat -->  0     1     2     3     4  ...
  510.  
  511.  
  512.  
  513.        Zinssätze (defZinsPr)
  514.        ─────────────────────
  515.        Die Toolbox enthält ein Objekt mit Zinssatzwechsel. Dafür ist
  516.        ein einfaches array mit Zinssätzen definiert.
  517.  
  518.  
  519.        Zahlungsart (defZahlgArt)
  520.        ─────────────────────────
  521.        Für das gleiche Objekt mit Zinssatzwechsel ist definiert, ob
  522.        die Zinsen bei Fälligkeit
  523.  
  524.             gutgeschrieben (gutschr)    oder
  525.             ausbezahlt (auszahlg)
  526.  
  527.        werden.      UNIT finanzl    Beschreibung
  528.      ─────────────────────────────────────────────────────────── 14 ──
  529.  
  530.        
  531.        2.2.2 Objekte
  532.  
  533.        2.2.2.1 Einmalzahlung (defEinmal)
  534.  
  535.        Kurzinfo
  536.        ────────
  537.        Verzinsung von Einmalzahlungen,
  538.        Objekt geht von 1 DM Anfangskapital aus.
  539.  
  540.        Methoden
  541.        ────────
  542.        function ergebnis ( zinsPr : real ; monate, zinsPer : integer )
  543.                             : real ;
  544.  
  545.           Parameter  Beispiel  Bedeutung
  546.           --------------------------------------------------
  547.           zinsPr     6.75      Zinssatz
  548.           monate     34        Laufzeit in Monaten
  549.           zinsPer    12        Zinsperiode
  550.  
  551.           Ergebnis: Endkapital bei 1 DM Anfangskapital
  552.  
  553.  
  554.  
  555.        function zinsPrBer ( monate, zinsPer : integer ;
  556.                   qWert : real ) : real ;
  557.  
  558.           Parameter  Beispiel  Bedeutung
  559.           --------------------------------------------------
  560.           monate     34        Laufzeit in Monaten
  561.           zinsPer    12        Zinsperiode
  562.           qWert      1.3375    Endkapital bei 1 DM Anfangskap.
  563.  
  564.           Ergebnis: Zinssatz      UNIT finanzl    Beschreibung
  565.      ─────────────────────────────────────────────────────────── 15 ──
  566.  
  567.        
  568.        Beispiel
  569.        ────────
  570.        program finanz01 ;
  571.        uses finanzl ;
  572.        var Einmal : PEinmal ;
  573.            kap0, kap1, zinsPr : real ;
  574.            monate, periode : integer ;
  575.  
  576.        begin
  577.        Einmal := New ( PEinmal, init );
  578.        kap0 := 1500 ; kap1 := 1943.08 ;
  579.        zinsPr := 8.5 ; monate := 38 ;
  580.        periode := perZahl (j);   { oder periode := 12  }
  581.        writeln ;
  582.        writeln ( ' Endkapital = ' ,
  583.          kap0 * Einmal^.ergebnis ( zinsPr, monate, periode):10:2) ;
  584.        writeln ( ' Anfangskapital = ' ,
  585.          kap1 / Einmal^.ergebnis ( zinsPr, monate, periode):10:2) ;
  586.        writeln ( ' Zinssatz = ' ,
  587.          Einmal^.zinsPrBer ( monate, periode, kap1 / kap0 ) : 10:3) ;
  588.        writeln ;
  589.        readln ;
  590.        dispose ( Einmal,done );
  591.        end.
  592.  
  593.  
  594.        Ausgabe:
  595.  
  596.        Endkapital =  1943.08
  597.        Anfangskapital = 1500.00
  598.        Zinssatz = 8.500      UNIT finanzl    Beschreibung
  599.      ─────────────────────────────────────────────────────────── 16 ──
  600.  
  601.        
  602.        2.2.2.2 Raten (defRaten)
  603.  
  604.        Kurzinfo
  605.        ────────
  606.        Verzinsung von Ratenzahlungen,
  607.        Objekt geht von Rate von 1 DM aus.
  608.  
  609.        Methoden
  610.        ────────
  611.        function endWert ( anzahl : integer ; zinsPr : real ;
  612.             ratenPer, zinsPer : integer ; zahlgTermin : defZahlgTerm )
  613.                          : real ;
  614.  
  615.           Parameter  Beispiel  Bedeutung
  616.           --------------------------------------------------
  617.           anzahl     38        Anzahl Raten
  618.           zinsPr     6.75      Zinssatz
  619.           ratenPer   1         Periode der Ratenzahlung
  620.                                (mtl, vj, hj, j = 1,3,6,12)
  621.           zinsPer    12        Periode der Zinsgutschrift
  622.                                (mtl, vj, hj, j = 1,3,6,12)
  623.           zahlgTerm. vorsch    Vorschüssige oder nachschüssige
  624.                                Ratenzahlung (siehe oben)
  625.  
  626.           Ergebnis: Endkapital bei 1 DM Rate
  627.  
  628.  
  629.        function zinsPrRa ( anzahl : integer ; ratenPer, zinsPer :
  630.           integer ; zahlgTermin : defZahlgTerm ; qWert : real ) :
  631.                   real ;
  632.  
  633.           Parameter  Beispiel  Bedeutung
  634.           --------------------------------------------------
  635.           anzahl     38        Anzahl Raten
  636.           ratenPer   1         Periode der Ratenzahlung
  637.                                (mtl, vj, hj, j = 1,3,6,12)
  638.           zinsPer    12        Periode der Zinsgutschrift
  639.                                (mtl, vj, hj, j = 1,3,6,12)
  640.           zahlgTerm. vorsch    Vorschüssige oder nachschüssige
  641.                                Ratenzahlung (siehe oben)
  642.           qWert      45,2754   Endkapital bei 1 DM Rate
  643.  
  644.           Ergebnis: Zinssatz
  645.  
  646.        Wichtiger Hinweis: Die Ratenperiode darf in der ganzen Toolbox
  647.        niemals größer sein als die Zinsperiode. Beispiele:
  648.  
  649.             Ratenperiode  Zinsperiode
  650.             ------------  -----------
  651.                 1             1        OK
  652.                 1             3        OK
  653.                 3             1        <-- NEIN      UNIT finanzl    Beschreibung
  654.      ─────────────────────────────────────────────────────────── 17 ──
  655.  
  656.        
  657.        Beispiel
  658.        ────────
  659.  
  660.        program finanz02 ;
  661.            { Sparvorgänge }
  662.        uses finanzl ;
  663.  
  664.        var Raten : PRaten ;
  665.            endkap, rate, zinsPr : real ;
  666.            ratenPer, zinsPer, anz : integer ;
  667.  
  668.        begin
  669.        Raten := New ( PRaten, init );
  670.        rate := 50 ;
  671.        ratenPer := perZahl (mtl);
  672.        anz := 15 ;
  673.        zinsPr := 6.0 ;
  674.        zinsPer := perZahl ( j ) ;
  675.        endkap := 780.29 ;
  676.  
  677.        writeln ;
  678.        writeln ( ' Endkapital = ' ,
  679.           rate * Raten^.endWert ( anz, zinsPr, ratenPer, zinsPer,
  680.             vorsch ) : 10 : 2 );
  681.        writeln ( ' Rate = ' ,
  682.           endkap / Raten^.endWert ( anz, zinsPr, ratenPer, zinsPer,
  683.             vorsch ) : 10 : 2 );
  684.        writeln ( ' Zinssatz = ' ,
  685.           Raten^.zinsPrRa ( anz, ratenPer, zinsPer, vorsch,
  686.            endkap / rate ) : 10 : 3 ) ;
  687.        writeln ;
  688.        readln ;
  689.        dispose ( Raten, done );
  690.        end.
  691.  
  692.  
  693.        Ausgabe:
  694.  
  695.        Endkapital = 780.29
  696.        Rate = 50.00
  697.        Zinssatz = 5.999      UNIT finanzl    Beschreibung
  698.      ─────────────────────────────────────────────────────────── 18 ──
  699.  
  700.        
  701.        2.2.2.3 Zinssatzwechsel (defZinsWe)
  702.  
  703.        Kurzinfo
  704.        ────────
  705.        jährlicher Zinssatzwechsel für eine Einmalzahlung, Zinsen
  706.        können gutgeschrieben oder ausbezahlt werden.
  707.  
  708.        Methoden
  709.        ────────
  710.        procedure berechnWe ( jahre2 : integer ; zinsPrWe2 :
  711.             defZinsPr ; zahlgArt2 : defZahlgArt );
  712.  
  713.           Parameter  Beispiel  Bedeutung
  714.           --------------------------------------------------
  715.           jahre2     6         Laufzeitjahre insgesamt
  716.           zinsPrWe2            6 Zinssätze als defZinsPr
  717.                                (siehe oben)
  718.           zahlgArt2  gutschr   Zinsen werden
  719.                                gutgeschrieben = gutschr  oder
  720.                                ausbezahlt = auszahlg
  721.  
  722.           Ergebnis: berechnet Rendite und Endkapital
  723.  
  724.  
  725.        RÜCKGABE ERGEBNISSE
  726.  
  727.           Function             Rückgabe
  728.           ------------------------------------------------
  729.           ret_rendite          Rendite der Anlage
  730.           ret_endWert          Endkapital bei Anlage von 1 DM      UNIT finanzl    Beschreibung
  731.      ─────────────────────────────────────────────────────────── 19 ──
  732.  
  733.        
  734.        Beispiel
  735.        ────────
  736.  
  737.        program finanz03 ;
  738.  
  739.        uses finanzl ;
  740.  
  741.        var ZinsWe : PZinsWe ;
  742.            anfKap : real ;
  743.            j, x : integer ;
  744.            ZZ : defZinsPr ; { einzelne Zinssätze }
  745.  
  746.        begin
  747.        zinsWe := New ( PZinsWe, init );
  748.        anfKap := 1000 ;
  749.        for x := 1 to zinsAnsWe do
  750.           ZZ[x] := 0.0 ;
  751.        j := 7 ;  { 7 Jahre }
  752.        ZZ[1] := 5.0 ; ZZ[2] := 6.0 ; ZZ[3] := 7.5 ;
  753.        ZZ[4] := 8.0 ; ZZ[5] := 9.0 ; ZZ[6] := 10.0 ;
  754.        ZZ[7] := 10.0 ;
  755.  
  756.        ZinsWe^.berechnWe ( j, ZZ, auszahlg );
  757.        writeln ;
  758.        writeln ( ' Zinsen werden ausbezahlt. ' );
  759.        writeln ( ' Rendite = ' , ZinsWe^.ret_rendite : 10 : 3 ) ;
  760.        writeln ( ' Endkapital = '
  761.                   ZinsWe^.ret_endWert * anfKap : 10:2);
  762.        writeln ;
  763.        ZinsWe^.berechnWe ( j, ZZ, gutschr );
  764.        writeln ;
  765.        writeln ( ' Zinsen werden gutgeschrieben ' );
  766.        writeln ( ' Rendite = ' , ZinsWe^.ret_rendite : 10 : 3 ) ;
  767.        writeln ( ' Endkapital = '
  768.                   ZinsWe^.ret_endWert * anfKap : 10:2);
  769.        writeln ;
  770.        readln ;
  771.        dispose ( ZinsWe, done );
  772.        end.
  773.  
  774.        Ausgabe:
  775.  
  776.        Zinsen werden ausbezahlt.
  777.        Rendite = 7.669
  778.        Endkapital = 1000.00
  779.  
  780.        Zinsen werden gutgeschrieben
  781.        Rendite = 7.914
  782.        Endkapital = 1704.27      UNIT finanzl    Beschreibung
  783.      ─────────────────────────────────────────────────────────── 20 ──
  784.  
  785.        
  786.  
  787.        2.2.2.4 Wertpapier (defWertp)
  788.  
  789.        Kurzinfo
  790.        ────────
  791.        Rendite festverzinsliches Wertpapier mit jährlicher oder
  792.        halbjährlicher Zinszahlung. Berechnung nach international
  793.        gebräuchlicher Methode.
  794.  
  795.        Methoden
  796.        ────────
  797.        function rendWp ( kaufKurs, zinsPr : real ; zinsPer : integer ;
  798.           rueckKurs : real ; laufzMonate : integer ) : real ;
  799.  
  800.           Parameter  Beispiel  Bedeutung
  801.           --------------------------------------------------
  802.           kaufKurs   98.75     Kurs in Prozent beim Kauf
  803.           zinsPr     6.75      Nominalzins pro Jahr
  804.           zinsPer    12        Zinsperiode NUR 6 oder 12!
  805.           rueckKurs  100       Kurs in Prozent bei Rückzahlung
  806.           laufzMon.  48        Restmonate bis Fälligkeit
  807.  
  808.           Ergebnis: Rendite
  809.  
  810.  
  811.        Beispiel
  812.        ────────
  813.        program finanz04 ;
  814.        uses finanzl ;
  815.        var Wp : PWertp ;
  816.            kauf, zins, rueck : real ;
  817.            periode , laufz : integer ;
  818.  
  819.        begin
  820.        Wp := New ( PWertp, init );
  821.        kauf := 95.0 ;
  822.        zins := 8.5 ;
  823.        periode := perZahl ( j );
  824.        rueck := 100.0 ;
  825.        laufz := 48 ;  { Monate Restlaufzeit }
  826.        writeln ;
  827.        writeln ( ' Wertpapierrendite = ' ,
  828.         Wp^.rendWp ( kauf, zins, periode, rueck, laufz ) : 10:3 );
  829.        writeln ;
  830.        readln ;
  831.        dispose ( Wp, done );
  832.        end.
  833.  
  834.  
  835.        Ausgabe:
  836.  
  837.        Wertpapierrendite = 10.080      UNIT finanzl    Beschreibung
  838.      ─────────────────────────────────────────────────────────── 21 ──
  839.  
  840.        
  841.        2.2.2.5 Darlehen (defDarl)
  842.  
  843.        Kurzinfo
  844.        ────────
  845.        Berechnet für normale Darlehen mit gleichbleibenden
  846.        Tilgungsraten den Effektivzins, die Restschuld und bei Bedarf
  847.        die Laufzeit.
  848.  
  849.        Methoden
  850.        ────────
  851.        procedure berechnDa ( auszPr2, rueckPr2, zinsPr2, tilgPr2 :
  852.          real ; zinsPer2, tilgPer2, lfzMonate2 : integer ) ;
  853.  
  854.           Parameter  Beispiel  Bedeutung
  855.           --------------------------------------------------
  856.           auszPr2    94.5      Auszahlung Darlehen in Prozent
  857.           rueckPr2   100.0     Rückzahlung Darlehen in Prozent
  858.           zinsPr2    6.75      Zinssatz für Darlehen
  859.           tilgPr2    2.0       Anfangstilgung Darlehen
  860.           zinsPer2   3         Zinsperiode
  861.           tilgPer2   1         Tilgungsperiode
  862.                                darf nicht größer sein als Zinsperiode
  863.           lfzMonate2 24        LaufzeitMonate
  864.                                werden 0 Monate übergeben,
  865.                                berechnet das Programm die Laufzeit
  866.                                bis zur vollständigen Tilgung.
  867.  
  868.           Ergebnis: berechnet Restschuld, Effektivzins und
  869.                     eventuell die Laufzeit.
  870.  
  871.        RÜCKGABE ERGEBNISSE
  872.  
  873.           Function             Rückgabe
  874.           ---------------------------------------------------
  875.           ret_rest             Restschuld in Prozent
  876.           ret_laufzMte         Laufzeit in Monaten
  877.           ret_effektiv         effektiver Jahreszins
  878.  
  879.           Hinweis: Der effektive Jahreszins wird bei Darlehen mit
  880.           befristeter Festzinsvereinbarung als anfänglicher effektiver
  881.           Jahreszins bezeichnet (Preisangabenverordnung).      UNIT finanzl    Beschreibung
  882.      ─────────────────────────────────────────────────────────── 22 ──
  883.  
  884.        
  885.        Beispiel
  886.        ────────
  887.  
  888.        program finanz05 ;
  889.  
  890.        uses finanzl ;
  891.  
  892.        var Darl : PDarl ;
  893.            aus, rueck, zins, tilg : real ;
  894.            zinsPer, tilgPer, lfz : integer ;
  895.  
  896.        begin
  897.        Darl := New ( PDarl, init );
  898.        aus := 98.0 ; rueck := 102 ;
  899.        zins := 8.75 ;
  900.        zinsPer := perZahl ( vj );
  901.        tilg := 2.5 ;
  902.        tilgPer := perZahl ( mtl );
  903.        lfz := 16 ;  { 16 Monate }
  904.  
  905.        Darl^.berechnDa ( aus, rueck, zins, tilg, zinsPer, tilgPer,
  906.                lfz );
  907.        writeln ;
  908.        writeln ( ' Restbetrag in % = ' ,
  909.                  Darl^.ret_rest : 10 : 2 );
  910.        writeln ( ' Laufzeitmonate = ' ,
  911.                  Darl^.ret_laufzMte : 5 );
  912.        writeln ( ' anfänglicher effektiver Jahreszins = ' ,
  913.                Darl^.ret_effektiv : 8 : 3 ) ;
  914.        writeln ;
  915.        readln ;
  916.        dispose ( Darl, done );
  917.        end.
  918.  
  919.  
  920.        Ausgabe:
  921.  
  922.        Restbetrag in % = 98.32
  923.        Laufzeitmonate =  16
  924.        anfänglicher effektiver Jahreszins = 12.502      UNIT finanzl    Beschreibung
  925.      ─────────────────────────────────────────────────────────── 23 ──
  926.  
  927.        
  928.        2.2.2.6 Sondertilgungen (defSonderTi)
  929.  
  930.        Kurzinfo
  931.        ────────
  932.        nimmt Sondertilgungen entgegen und gibt sie wieder zurück. Das
  933.        Object wird in das Object defTilgPl eingebunden.
  934.  
  935.        Methoden
  936.        ────────
  937.        procedure eingabe (jahr2, monat2 : integer ; betrag2 : real );
  938.  
  939.           Parameter  Beispiel  Bedeutung
  940.           --------------------------------------------------
  941.           jahr2      1998      Jahr der Sondertilgung
  942.           monat2     5         Monat im Jahr der Sondertilgung
  943.           betrag2    15000     Betrag Sondertilgung in jahr2,monat2
  944.  
  945.           Ergebnis: die Eingabe wird lediglich gespeichert.
  946.  
  947.  
  948.        RÜCKGABE ERGEBNISSE
  949.  
  950.           Function             Rückgabe
  951.           ---------------------------------------------------
  952.           tilgDa (jahr2,
  953.                monat2 )        gibt zurück (boolean), ob zu dem
  954.                                Termin (jahr2, monat2) eine
  955.                                Sondertilgung vorhanden ist.
  956.           ret_tilg             Betrag der Sondertilgung.
  957.  
  958.  
  959.        Beispiel
  960.        ────────
  961.        die Anwendung des Objects zeigt das Object defTilgPl.
  962.  
  963.        Für das Object defTilgPl ist
  964.  
  965.          defSonderTi2 definiert,
  966.  
  967.        ein array mit Objecten vom Typ defSonderTi.      UNIT finanzl    Beschreibung
  968.      ─────────────────────────────────────────────────────────── 24 ──
  969.  
  970.        
  971.        2.2.2.7 Tilgungsplan (defTilgPl)
  972.  
  973.        Kurzinfo
  974.        ────────
  975.        damit läßt sich ein Tilgungsplan ausgeben, aber auch ein
  976.        Sparplan.
  977.  
  978.        Methoden
  979.        ────────
  980.        procedure eingDarl ( darlDm2, zinsPr2, tilgPr2, rateDm2 :
  981.          real ; zinsPer2, tilgPer2, ausJahr2, ausMonat2 :
  982.          integer ; nullStop2 : boolean );
  983.  
  984.           Parameter  Beispiel  Bedeutung
  985.           --------------------------------------------------
  986.           darlDm2    100000    rückzahlbarer Darlehensbetrag
  987.           zinsPr2    8.75      Zinssatz
  988.           tilgPr2    2.5       Tilgung
  989.           rateDm2    950       anstelle einer Tilgung kann eine
  990.                                Rate je Ratenperiode gemeldet werden
  991.                                muß mindestens für Zinsen ausreichen
  992.           zinsPer2   3         Zinsperiode
  993.           tilgPer2   1         Tilgungsperiode
  994.                                darf nicht größer sein als Zinsperiode
  995.           ausJahr2   1993      Auszahlungsjahr
  996.           ausMonat2  4         Auszahlungsmonat (1..12)
  997.           nullStop2  ja        Tilgungsplan beenden, wenn
  998.                                Darlehen auf 0.00 ja/nein
  999.  
  1000.           Ergebnis: interne Variablen werden belegt.
  1001.  
  1002.  
  1003.        procedure eingSonderTi ( nr, jahr, monat : integer ;
  1004.                   betrag : real );
  1005.  
  1006.        ** Aufruf muß NACH eingDarl erfolgen **
  1007.  
  1008.           Parameter  Beispiel  Bedeutung
  1009.           --------------------------------------------------
  1010.           nr         1         Sondertilgung Nr. gemäß anzSonderTi
  1011.           jahr       2004      Sondertilgung im Jahr x
  1012.           monat      4         Sondertilgung im Monat y des Jahres x
  1013.           betrag     5000      Sondertilgung in DM
  1014.  
  1015.           Ergebnis: Eingaben werden festgehalten.
  1016.  
  1017.  
  1018.        procedure schritt ;
  1019.  
  1020.           Ergebnis:
  1021.           eine Tilgungsperiode weiterrechnen und Werte summieren      UNIT finanzl    Beschreibung
  1022.      ─────────────────────────────────────────────────────────── 25 ──
  1023.  
  1024.        
  1025.        function faellig ( monat, periode : integer ) : boolean ;
  1026.  
  1027.           Parameter  Beispiel  Bedeutung
  1028.           --------------------------------------------------
  1029.           monat      4         laufender Monat
  1030.           periode    3         Zinsperiode, Ratenperiode oder
  1031.                                Periode für Verdichtung
  1032.  
  1033.           Ergebnis: gibt zurück, ob in dem Monat periode fällig ist.
  1034.           Übersicht:
  1035.  
  1036.                periode   fällige Monate
  1037.                ---------------------------
  1038.                1=mtl     jeder Monat
  1039.                3=vj      3, 6, 9, 12
  1040.                6=hj      6, 12
  1041.                12=j      12
  1042.  
  1043.           Der Programmierer kann damit eine Periode für die Ausgabe
  1044.           von Zahlen festlegen und die Zahlen verdichten.
  1045.  
  1046.  
  1047.  
  1048.        RÜCKGABE ERGEBNISSE
  1049.  
  1050.           Function             Rückgabe
  1051.           ---------------------------------------------------
  1052.           ret_lfdJahr          laufendes Jahr Tilgungsplan
  1053.           ret_lfdMonat         laufender Monat im Jahr
  1054.  
  1055.           ret_zinsDm           kapitalisierte Zinsen
  1056.                                der interne Zähler wird nach
  1057.                                Abruf auf 0.0 gestellt
  1058.           ret_tilgDm           bezahlte Tilgung
  1059.                                der interne Zähler wird nach
  1060.                                Abruf auf 0.0 gestellt
  1061.  
  1062.           ret_rest             Restschuld
  1063.           ret_sumZins          Summe aller Zinsen
  1064.           ret_sumTilg          Summe aller Tilgungen
  1065.  
  1066.           ret_endeDa           liefert ja, wenn Darlehen getilgt UND
  1067.                                nullStop2 auf ja gesetzt ist.      UNIT finanzl    Beschreibung
  1068.      ─────────────────────────────────────────────────────────── 26 ──
  1069.  
  1070.        
  1071.        Beispiel
  1072.        ────────
  1073.  
  1074.        program finanz06 ;
  1075.  
  1076.        uses finanzl, printer ;
  1077.  
  1078.        var Ti : PTilgPl ;
  1079.            x : integer ;
  1080.  
  1081.  
  1082.        begin
  1083.        Ti := new ( PTilgPl, init );
  1084.        Ti^.eingDarl ( 85000.0 , 10.0, 2.0 , 800.0 , perZahl (vj),
  1085.           perZahl (mtl), 1993, 1, ja );
  1086.  
  1087.        Ti^.eingSonderTi ( 1, 1993, 12, 12000.0 );
  1088.  
  1089.        writeln (Lst,' Jahr Monat   Zins DM  Tilgung DM  Restbetrag');
  1090.        writeln ( Lst );
  1091.  
  1092.        for x := 1 to 300 do begin
  1093.            { maximal 300 Tilgungen verarbeiten }
  1094.          Ti^.schritt ;
  1095.          if Ti^.faellig ( Ti^.ret_lfdMonat, perZahl (hj) ) or
  1096.             Ti^.ret_endeDa then begin
  1097.             { nur Ausgabe der halbjährlichen Zahlen }
  1098.            write ( Lst, Ti^.ret_lfdJahr : 5, '  ',
  1099.                   Ti^.ret_lfdMonat : 3, '   ' );
  1100.            write ( Lst, Ti^.ret_zinsDm : 8:2, '    ' ,
  1101.                    Ti^.ret_tilgDm : 8:2 , '    ' );
  1102.            writeln ( Lst, Ti^.ret_rest : 8 : 2 );
  1103.          end;
  1104.          if Ti^.ret_endeDa then
  1105.            break ;
  1106.        end;
  1107.  
  1108.        writeln ( Lst );
  1109.        writeln ( Lst, ' Summe Zinsen:  ', Ti^.ret_sumZins : 10 : 2 );
  1110.        writeln ( Lst, ' Summe Tilgung: ', Ti^.ret_sumTilg : 10 : 2 );
  1111.  
  1112.        dispose ( Ti, done );
  1113.        end.
  1114.  
  1115.  
  1116.        Ausdruck:
  1117.  
  1118.         Jahr Monat    Zins DM  Tilgung DM  Restbetrag
  1119.         1993    6     3506.06     4250.00    84256.06
  1120.         1993   12     4158.68    17100.00    71314.74
  1121.         1994    6     3503.51     5100.00    69718.25
  1122.            ... usw. ...      UNIT finanzl    Theorie
  1123.      ─────────────────────────────────────────────────────────── 27 ──
  1124.  
  1125.        
  1126.        2.3 Theorie
  1127.  
  1128.        2.3.1 Einmalzahlung
  1129.  
  1130.        Zinseszins
  1131.        ──────────
  1132.        Der Zinseszins ist quasi der Einstieg in die Finanzmathematik.
  1133.        Zum Beispiel:
  1134.  
  1135.          6 % Zins, halbjährliche Zinsperiode, 15 Monate Laufzeit
  1136.  
  1137.        Endkapital bei 500:
  1138.  
  1139.        Richtig-->  500 * 1.03 * 1.03 * 1.015 = 538,41
  1140.        Falsch--->  500 * potenz (1.03 , 2.5) = 538,35
  1141.  
  1142.        (Die Toolbox verwendet die function potenz zum Potenzieren.)
  1143.  
  1144.        Sie dürfen grundsätzlich nur volle Zinsperioden potenzieren,
  1145.        sonst stimmt das Ergebnis nicht.
  1146.  
  1147.  
  1148.        Näherungsverfahren
  1149.        ──────────────────
  1150.        Sehr oft muß man einen Wert suchen, der sich nur durch ein
  1151.        Näherungsverfahren (Iteration) finden läßt. Die Toolbox
  1152.        verwendet in den Fällen Verfahren, die sich alle gleichen.
  1153.  
  1154.        Zur Erläuterung ein ganz einfaches Beispiel, das man auch
  1155.        einfacher lösen könnte:
  1156.  
  1157.          500 ergeben in 2 Jahren bei jährlicher Zinsgutschrfit
  1158.          561,80  Zinssatz?
  1159.  
  1160.        Die Toolbox beginnt mit 5 % und 10 % Zins und stellt die Formel
  1161.        so um, daß sich das Ergebnis 0 ergibt, wenn der richtige
  1162.        Zinssatz gefunden wurde.
  1163.  
  1164.        Ergebnis 1:  500 * 1.05 * 1.05 - 561.8 = -10.55
  1165.        Ergebnis 2:  500 * 1.10 * 1.10 - 561.8 =  43.20
  1166.  
  1167.        Auswertung:
  1168.           ( 43.20 - -10.55 ) / ( 1.10 - 1.05 ) = 1075
  1169.  
  1170.        1. Näherung:
  1171.            43.20 / 1075 = 0.040
  1172.            Um auf Ergebnis 0 zu kommen, muß man um 0.040 kürzen
  1173.            1.10 - 0.040 = 1.06
  1174.  
  1175.        Ergebnis 3: 500 * 1.06 * 1.06 - 561.80 = 0      UNIT finanzl    Theorie
  1176.      ─────────────────────────────────────────────────────────── 28 ──
  1177.  
  1178.        Meistens sind zwei oder drei weitere Näherungsschritte
  1179.        erforderlich, bevor der gesuchte Wert gefunden ist. Es werden
  1180.        dabei jeweils die beiden letzten Ergebnisse ausgewertet.
  1181.  
  1182.        Diese Näherungsmethode läßt sich ziemlich universell einsetzen.
  1183.        Damit kann man z.B. auch die Laufzeit von Darlehen berechnen.
  1184.        Es hat seine mathematische Basis aus der Differentialrechnung.
  1185.  
  1186.  
  1187.        2.3.2 Raten
  1188.  
  1189.        allgemeine Ratenformel
  1190.        ──────────────────────
  1191.        Die Ratenformel (oder Rentenformel) ist Ihnen vielleicht
  1192.        bekannt. Zum Beispiel:
  1193.  
  1194.           Rate * ( potenz ( 1.05, 10 ) - 1 ) / ( 1.05 - 1 )
  1195.               = Endwert der Raten
  1196.  
  1197.        Diese Formel werden Sie im Prinzip auch in der Toolbox finden,
  1198.        allerdings müssen wir genauer vorgehen.
  1199.  
  1200.        Endwert je Zinsperiode
  1201.        ──────────────────────
  1202.        Anstelle einer Rate setzen wir den Wert der Rate(n) zum Ende
  1203.        der Zinsperiode ein. Beispiel:
  1204.  
  1205.          mtl. Rate 200 6 % Zins vierteljährlich
  1206.  
  1207.        Die Raten werden in einer Zinsperiode im Schnitt verzinst:
  1208.  
  1209.          vorschüssig:  ( 3 + 1 ) / 2 = 2 Monate
  1210.          nachschüssig: ( 2 + 0 ) / 2 = 1 Monat
  1211.  
  1212.        Endwert der Raten zum Ende der Zinsperiode:
  1213.  
  1214.          200 * 3 * ( 1 + 6 / 1200 * Monate ) = Endwert Zinsperiode
  1215.  
  1216.  
  1217.        Restmonate
  1218.        ──────────
  1219.        Wenn die Laufzeit nicht mit der Zinsperiode übereinstimmt, wird
  1220.        es ziemlich kompliziert. Beispiel:
  1221.  
  1222.           vj. Raten, hj. Zinsen, 17 Monate Laufzeit
  1223.  
  1224.        Das Programm berechnet in dem Fall 12 Monate normal und
  1225.        verzinst das Ergebnis 5 Monate (bis Laufzeitende) weiter. Die
  1226.        restlichen 5 Monate werden noch einmal aufgeteilt in ganze
  1227.        Ratenperioden und allerletzte Restmonate. Dafür werden dann die
  1228.        Werte berechnet und addiert.      UNIT finanzl    Theorie
  1229.      ─────────────────────────────────────────────────────────── 29 ──
  1230.  
  1231.        
  1232.        2.3.3 Zinssatzwechsel
  1233.  
  1234.        Effektivzinsberechnung
  1235.        ──────────────────────
  1236.        Die Effektivzinsberechnung geht von den effektiven Zahlungen
  1237.        aus. Was wirklich empfangen oder gezahlt wurde, das ist
  1238.        maßgebend. Der Effektivzins wird bei Anlagen meistens Rendite
  1239.        genannt.
  1240.  
  1241.        effektive Zahlungen
  1242.        ───────────────────
  1243.        Beim Zinssatzwechsel mit Zinsgutschrift fallen nur 2 effektive
  1244.        Zahlungen an, nämlich
  1245.  
  1246.            eingezahlter Anlagebetrag und
  1247.            zurückgezahltes Endguthaben.
  1248.  
  1249.  
  1250.        Bei Zinsauszahlungen dagegen
  1251.  
  1252.            eingezahlter Anlagebetrag,
  1253.            jährliche Zinszahlungen
  1254.            zurückgezahlter Anlagebetrag.
  1255.  
  1256.  
  1257.        Rendite bei Zinsgutschrift
  1258.        ──────────────────────────
  1259.        Das Endkapital und die Rendite sind einfach zu berechnen.
  1260.        Beispiel bei 3 Jahren:
  1261.  
  1262.           1.06 * 1.07 * 1.075 = Endkapital bei 1 DM
  1263.  
  1264.        Die Kubikwurzel des Endkapitals bei 1 DM ergibt die Rendite.
  1265.  
  1266.  
  1267.        Rendite bei Zinsauszahlung
  1268.        ──────────────────────────
  1269.        Schema:
  1270.  
  1271.          Anlagebetrag aufgezinst bis Laufzeitende
  1272.        - Zinszahlungen aufgezinst bis Laufzeitende
  1273.        - Rückzahlung am Laufzeitende
  1274.        ───────────────────────────────────────────
  1275.        = 0
  1276.  
  1277.        Aufgezinst wird mit dem Effektivzins, den wir zu berechnen
  1278.        haben (Näherungsverfahren). Er ist gefunden, wenn das Ergebnis
  1279.        0 ergibt. Bei solchen Berechnungen ist wichtig, daß alle
  1280.        Zahlungen zum gleichen Zeitpunkt aufgezinst werden, meistens
  1281.        zum Laufzeitende.      UNIT finanzl    Theorie
  1282.      ─────────────────────────────────────────────────────────── 30 ──
  1283.  
  1284.        
  1285.        2.3.4 Wertpapiere
  1286.  
  1287.        Stückzins
  1288.        ─────────
  1289.        Der Besitzer eines festverzinslichen Wertpapiers erhält zu den
  1290.        Zinsterminen die Zinsen. Wechselt zwischen zwei Zinsterminen
  1291.        der Besitzer, so wird der anteilige Zins als Stückzins
  1292.        verrechnet. Diese Stückzinsen erhöhen für die Renditeberechnung
  1293.        den Anlagebetrag.
  1294.  
  1295.        Im übrigen haben wir wieder die gleichen effektiven Zahlungen
  1296.        wie beim Zinssatzwechsel mit Zinsauszahlung.
  1297.  
  1298.        Internationale Rendite
  1299.        ──────────────────────
  1300.        Die Rendite wird von der Toolbox nach einer international
  1301.        gebräuchlichen Methode berechnet, bei der für die
  1302.        Renditeberechnung auch Bruchteile von Zinsperioden potenziert
  1303.        werden. Das ist eine absolute (internationale) Ausnahme. Bei
  1304.        anderen Berechnungen ist diese Methode nicht zulässig!
  1305.  
  1306.  
  1307.  
  1308.        2.3.5 Darlehen
  1309.  
  1310.        Laufzeit
  1311.        ────────
  1312.        Wird dem Programm als Laufzeit 0 Monate übergeben, so berechnet
  1313.        es die Laufzeit bis zur vollständigen Tilgung. Dabei wird das
  1314.        oben beschriebene Näherungsverfahren eingesetzt.
  1315.  
  1316.        Restschuld
  1317.        ──────────
  1318.        Kein Problem:
  1319.  
  1320.          Rückzahlungsbetrag aufgezinst bis Laufzeitende
  1321.        - Tilgungsraten aufgezinst bis Laufzeitende
  1322.        ─────────────────────────────────────────────────
  1323.        = Restschuld am Laufzeitende
  1324.  
  1325.        Effektivzins
  1326.        ────────────
  1327.        Schema:
  1328.  
  1329.           Auszahlungsbetrag aufgezinst bis Laufzeitende
  1330.         - Tilgungsraten aufgezinst bis Laufzeitende
  1331.         - Restschuld am Laufzeitende
  1332.         ────────────────────────────────────────────────
  1333.         = 0
  1334.  
  1335.        Der (effektive) Auszahlungsbetrag und die Tilgungsraten sind so
  1336.        aufzuzinsen, daß sich als Ergebnis annähernd 0 ergibt.      UNIT finanzl    Theorie
  1337.      ─────────────────────────────────────────────────────────── 31 ──
  1338.  
  1339.        
  1340.        Bei der Effektivzinsberechnung ist die Zinsperiode immer
  1341.        jährlich. Daher kommt die Bezeichnung effektiver Jahreszins.
  1342.  
  1343.  
  1344.  
  1345.        2.3.6 Tilgungsplan
  1346.  
  1347.        Dieses Objekt hat mit Finanzmathematik wenig im Sinn. Es geht
  1348.        hier mehr um eine gut Logik.
  1349.  
  1350.        Wenn Sie den Nullstop nicht setzen (false), dann können Sie
  1351.        damit auch einen Sparplan erstellen.
  1352.  
  1353.        Sie sollten die Anzahl der Berechnungen auf jeden Fall
  1354.        begrenzen, damit das Programm bei Fehleingaben keinen endlosen
  1355.        Plan erstellt.      UNIT finanzl2 Interface
  1356.      ─────────────────────────────────────────────────────────── 32 ──
  1357.  
  1358.        
  1359.        3. UNIT Finanzl2
  1360.  
  1361.        3.1 Interface
  1362.  
  1363.        unit finanzl2 ;
  1364.                 {
  1365.                   *****************************
  1366.             J Z - F I N A N Z M A T H E  Vers. 1.0  22.1.93
  1367.             eine Toolbox für Finanzmathematik in Borland Pascal
  1368.             Alle Rechte bei: Karl Jenz
  1369.                              7302 Ostfildern 1 Horbstraße 7
  1370.                   *****************************
  1371.                     }
  1372.  
  1373.        INTERFACE
  1374.  
  1375.        uses finanzl ;
  1376.  
  1377.        CONST AbgrAnzahl = 10 ;
  1378.              { Anzahl Abgrenzungsjahre bei Disagioabgrenzung }
  1379.  
  1380.        TYPE
  1381.  
  1382.        PUniversal = ^defUniversal ;
  1383.        defUniversal = object ( defRaten )
  1384.             { das Object beachtet den Beginn der Zahlungen }
  1385.           public
  1386.           restMon1 : integer ;
  1387.              { Restmonate am Anfang bis zur ersten Zinsfälligkeit }
  1388.           procedure null1 ; virtual ;
  1389.           procedure laufzBerSpez ( monate, periode, anfang : integer ;
  1390.             VAR restMonAnf, vollPer, restMon : integer );
  1391.           function einmalSpez ( zinsPr : real ; zinsPer, Monate1,
  1392.                      restPer, Monate2 : integer ) : real ;
  1393.           function restAnfWert ( zinsPr : real ; ratenPer, zinsPer,
  1394.                     restMte : integer ; zahlgTermin : defZahlgTerm ;
  1395.                     restZinsPer, restMte2 : integer ) : real ;
  1396.              { Anfangsmonate bis zur ersten Zinsperiode,
  1397.                  aufgezinst bis Laufzeitende }
  1398.          function endkapSpez ( zinsPr : real ; ratenPer, zinsPer :
  1399.               integer ; zahlgTermin : defZahlgTerm ) : real ;
  1400.              { Berechnung Endkapital aus restMon1, perioden und
  1401.                 restmonate
  1402.                   diese müssen vorher berechnet sein }      UNIT finanzl2 Interface
  1403.      ─────────────────────────────────────────────────────────── 33 ──
  1404.  
  1405.        
  1406.              { noch defUniversal }
  1407.           public
  1408.           constructor init ;
  1409.           destructor done ;
  1410.           function ergebnisSpez ( zinsPr : real ; monate, anfang,
  1411.                   zinsPer : integer ) : real ;
  1412.                 { Endwert Einmalbetrag mit Beachtung Zahlungsmonat }
  1413.           function endWertSpez ( lfzMonate, anfang : integer ;
  1414.                zinsPr : real ; ratenPer, zinsPer : integer ;
  1415.                zahlgTermin : defZahlgTerm ) : real ;
  1416.               { Endwert der Rate von 1 DM nach x Monaten,
  1417.                  Beginn im Monat anfang (Monatsende)
  1418.                  Ratentermine werden beachtet, d.h. vj. nur am
  1419.        Quartalsende }
  1420.            end;
  1421.  
  1422.  
  1423.          PGebErst = ^defGebErst ;
  1424.          defGebErst = object ( defDarl )
  1425.                    { Erstattung von Kreditgebühren bei Sondertilgung
  1426.                      Auszahlungsmonat wird beachtet }
  1427.            public
  1428.            darlDm : real ;  { Nennbetrag Darlehen }
  1429.            anfang : integer ;  { Auszahlmonat im Jahr 1..12 }
  1430.            rest0, rest1, rest2 : real ;
  1431.               { Restschuld ohne Sondertilgung (rest0)
  1432.                 vor Erstattung Gebühen und danach }
  1433.            sondertMon : integer ;
  1434.               { Sondertilgung x Monate nach Auszahlung }
  1435.            sondertDm : real ;  { Sondertilgung Betrag }
  1436.            Universal : PUniversal ; { Object im Object }
  1437.  
  1438.            procedure null1 ; virtual ;
  1439.            procedure effektivBer2 ;
  1440.            function restBer2 ( darl, zinsPr2, rate2 : real ;
  1441.                 zinsPer2, tilgPer2 : integer ;
  1442.                 sonderMon : integer ; sonderDm : real ) : real ;
  1443.                 { Berechnung Restschuld unter Beachtung Sondertilgung}
  1444.  
  1445.  
  1446.            function sondertBer ( sonderMon : integer ;
  1447.                sonderDm, zinsPr2 : real ; zinsPer2 : integer):real ;
  1448.                          { Wert Sondertilgung aufgezinst bis
  1449.                         Laufzeitende }      UNIT finanzl2 Interface
  1450.      ─────────────────────────────────────────────────────────── 34 ──
  1451.  
  1452.                     { noch defGebErst }
  1453.            public
  1454.            constructor init ;
  1455.            destructor done ;
  1456.            procedure eingDarl ( auszPr2, rueckPr2, zinsPr2,
  1457.                tilgPr2, darlDm2 : real ; zinsPer2, tilgPer2,
  1458.                lfzMonate2, anfang2 : integer );
  1459.                   { Übergabe Darlehenswerte ohne Sondertilgung }
  1460.            function erstattg ( sondertMon2 : integer ;
  1461.                                sondertDm2 : real ) : real ;
  1462.                  { Erstattung Kreditgebühren gemäß Sondertilgung }
  1463.  
  1464.            function ret_rest0 : real ;
  1465.               { Restschuld vor Sondertilgung }
  1466.            function ret_rest1 : real ;
  1467.          { Restschuld nach Sondertilgung,
  1468.                                            ohne Erstattung Gebühren }
  1469.  
  1470.           end;
  1471.  
  1472.  
  1473.        defAbgrWerte = object
  1474.           { Hilfsobject für defGebAbr }
  1475.          public
  1476.          monate : integer ;
  1477.          abgr, rest : real ;
  1478.          procedure null1 ;
  1479.          procedure eing ( monate2 : integer ; abgr2, rest2 : real );
  1480.          { Rückgaben }
  1481.          function ret_mte : integer ;
  1482.          function ret_abgr : real ;
  1483.          function ret_rest : real ;
  1484.          end;
  1485.  
  1486.        defAbgrWerte2 = array[1..AbgrAnzahl] of defAbgrWerte ;      UNIT finanzl2 Interface
  1487.      ─────────────────────────────────────────────────────────── 35 ──
  1488.  
  1489.        
  1490.        PGebAbgr = ^defGebAbgr ;
  1491.        defGebAbgr = object ( defGebErst )
  1492.               { Abgrenzung von Kreditgebühren
  1493.                 auf Laufzeit Darlehen bzw. Festzinsvereinbarung }
  1494.         public
  1495.         AbgrWerte : defAbgrWerte2 ;
  1496.         procedure abgrenzen ;
  1497.  
  1498.         public
  1499.         constructor init ;
  1500.         destructor done ;
  1501.         procedure berechng ( auszPr2, rueckPr2, zinsPr2, tilgPr2,
  1502.            darlDm2 : real ; zinsPer2, tilgPer2, lfzMonate2,
  1503.            anfang2 : integer );
  1504.           { Übergabe der Werte und Berechnung der Abgrenzung }
  1505.  
  1506.         { Rückgaben je Abgrenzungsjahr }
  1507.         function ret_mte ( jahr : integer ) : integer ;
  1508.         function ret_abgr ( jahr : integer ) : real ;
  1509.         function ret_rest ( jahr : integer ) : real ;
  1510.  
  1511.         end;
  1512.  
  1513.  
  1514.        PBarWert = ^defBarWert ;
  1515.        defBarWert = object ( defRaten )
  1516.            { Berechnung Barwert  }
  1517.          public
  1518.          rate, zins, barwert : real ;
  1519.          ratenPeriode, zinsPeriode, anlaufMte : integer ;
  1520.             { anlaufMte = AnlaufMonate vor erster Rate }
  1521.          anz, jahre, monate : integer ;  { anz = Anzahl Raten }
  1522.             { Gesamtlaufzeit in Jahren und Restmonaten }
  1523.          procedure null1 ; virtual ;
  1524.  
  1525.          public
  1526.          { Schnittstelle zum Programm }
  1527.          constructor init ;
  1528.          destructor done ;
  1529.          procedure berechng ( rate2, zins2 : real ; anz2,
  1530.             ratenPer, zinsPer, anlauf : integer );
  1531.               { anlauf = AnlaufMonate siehe oben }
  1532.          function ret_BarWert : real ;
  1533.          function ret_jahre : integer ;
  1534.          function ret_Restmon : integer ;
  1535.          end;      UNIT finanzl2 Interface
  1536.      ─────────────────────────────────────────────────────────── 36 ──
  1537.  
  1538.        
  1539.        PSonderSp = ^defSonderSp ;
  1540.        defSonderSp = object ( defRaten )
  1541.             { Sondersparen mit Bonus }
  1542.          public
  1543.          rate, zins, zinsBonus, einzBonus : real ;
  1544.          anz, restMon : integer ;
  1545.          einzDm, zinsDm, bonusDm, gesamtDm, rendite : real ;
  1546.          jahre, monate : integer ;  { Laufzeit }
  1547.          restM1, restM2, perioden2, restmonate2 : integer ;
  1548.            { restM1 = letzte Ratenperioden -keine ganzes Jahr-
  1549.              restM2 = von letzter Ratenperiode bis zum Jahresende
  1550.                perioden2 = Restperioden (Jahre) ohne Raten
  1551.                restmonate2 = letzte Restmonate ohne Raten
  1552.                    }
  1553.  
  1554.          procedure null1 ; virtual ;
  1555.          function gesamtBer ( zinsPr : real ;
  1556.                      zinsBon, einzBon : real ) : real ;
  1557.          function rendBer : real ;
  1558.               { Berechnung Rendite }
  1559.  
  1560.          public
  1561.          constructor init ;
  1562.          destructor done ;
  1563.          procedure berechng ( rate2 , zins2, zinsBonus2, einzBonus2 :
  1564.        real ;
  1565.                  anz2, restMon2 : integer );
  1566.  
  1567.          function ret_rendite : real ;
  1568.          function ret_einzDm : real ;
  1569.          function ret_zinsDm : real ;
  1570.          function ret_bonusDm : real ;
  1571.          function ret_gesDm : real ;
  1572.          function ret_jahre : integer ;
  1573.          function ret_monate : integer ;
  1574.  
  1575.  
  1576.          end;      UNIT finanzl2 Interface
  1577.      ─────────────────────────────────────────────────────────── 37 ──
  1578.  
  1579.        
  1580.        PRatenKr = ^defRatenKr ;   { Ratenkredite }
  1581.        defRatenKr = object ( defRaten )
  1582.          public
  1583.          darlDm, zinsPm, gebPr : real ;
  1584.          gebDm, zinsDm, gesDm : real ;
  1585.          rate0, rate1, rate2 : real ;
  1586.          effektiv, erstattg : real ;
  1587.          lfzMonate, tilgMon : integer ;
  1588.             { tilgMon = Monat Resttilgung }
  1589.  
  1590.          procedure null1 ; virtual ;
  1591.          procedure lfzMonBer ;
  1592.          procedure effektivBer ;
  1593.          procedure erstattgBer ;
  1594.  
  1595.          public
  1596.          constructor init ;
  1597.          destructor done ;
  1598.          procedure eingabe ( darlDm2, gebPr2, zinsPm2, rate02 : real ;
  1599.                    lfzMon2, tilgMon2 : integer );
  1600.  
  1601.          function ret_gebDm : real ;
  1602.          function ret_zinsDm : real ;
  1603.          function ret_gesDm : real ;
  1604.          function ret_rate1 : real ; { erste Tilgungsrate }
  1605.          function ret_rate2 : real ; { Restraten }
  1606.          function ret_lfz : integer ; { Laufzeit in Monaten }
  1607.          function ret_effektiv : real ;
  1608.          function ret_erstattg : real ;
  1609.  
  1610.         end;      UNIT finanzl2     Beschreibung
  1611.      ─────────────────────────────────────────────────────────── 38 ──
  1612.  
  1613.        
  1614.        3.2 Beschreibung
  1615.  
  1616.        Die Unit finanzl2 verwendet die Unit finanzl. Die Ausführungen
  1617.        zur Beschreibung bei finanzl gelten daher entsprechend. Für
  1618.        diese Unit gilt wie für die Unit finanzl, daß die Ratenperiode
  1619.        nie größer sein darf als die Zinsperiode.
  1620.  
  1621.  
  1622.        3.2.1 Allgemeine Typen
  1623.  
  1624.        Die Unit finanzl2 definiert keine eigenen allgemeinen Typen,
  1625.        sondern verwendet diese von finanzl.
  1626.  
  1627.  
  1628.        3.2.2 Objekte
  1629.  
  1630.        3.2.2.1 Universalobjekt (defUniversal)
  1631.  
  1632.        Kurzinfo
  1633.        ────────
  1634.        Verzinsung von Einmalzahlungen und Raten, wobei nicht
  1635.        automatisch vom Zeitpunkt 0 ausgegangen wird. Es kann ein
  1636.        Anfangsmonat (1..12) gemeldet werden.
  1637.  
  1638.        Methoden
  1639.        ────────
  1640.        function ergebnisSpez ( zinsPr : real ; monate, anfang,
  1641.            zinsPer : integer ) : real ;
  1642.  
  1643.           Parameter  Beispiel  Bedeutung
  1644.           --------------------------------------------------
  1645.           zinsPr     6.5       Zinssatz
  1646.           monate     33        Laufzeit in Monaten
  1647.           anfang     4         Beginn Verzinsung im Monat (4=30.4.)
  1648.           zinsPer    6         Zinsperiode
  1649.  
  1650.           Ergebnis: Endkapital bei 1 DM Anfangskapital
  1651.  
  1652.        function endWertSpez ( lfzMonate, anfang : integer ;
  1653.             zinsPr : real ; ratenPer, zinsPer : integer ;
  1654.             zahlgTermin : defZahlgTerm ) : real ;
  1655.  
  1656.           Parameter  Beispiel  Bedeutung
  1657.           --------------------------------------------------
  1658.           lfzMonate  33        33 Monate Gesamtlaufzeit
  1659.           anfang     4         Beginn im Monat (1..12)
  1660.           zinsPr     6.5       Zinssatz
  1661.           ratenPer   3         Ratenperiode
  1662.           zinsPer    6         Zinsperiode
  1663.           zahlgTerm. nachsch   vorschüssige oder nachschüssige
  1664.                                Ratenzahlung
  1665.  
  1666.           Ergebnis: Endkapital bei Rate von 1 DM
  1667.           Ratentermine werden beachtet, z.B. am 30.4. ist keine
  1668.           vj. Rate fällig, erst wieder am 30.6.      UNIT finanzl2     Beschreibung
  1669.      ─────────────────────────────────────────────────────────── 39 ──
  1670.  
  1671.        
  1672.        Beispiel
  1673.        ────────
  1674.        program finanz07 ;
  1675.  
  1676.        uses finanzl, finanzl2 ;
  1677.  
  1678.        var Universal : PUniversal ;
  1679.            kap0, rate, zinsPr : real ;
  1680.            lfz, anfang, zinsPer, ratenPer : integer ;
  1681.            erg1, erg2 : real ;
  1682.            Termin : defZahlgTerm ;
  1683.  
  1684.        begin
  1685.        Universal := New ( PUniversal, init );
  1686.        kap0 := 1675 ; rate := 50 ;
  1687.        zinsPr := 12.5 ;
  1688.        lfz := 13 ; anfang := 1 ;
  1689.        zinsPer := 6 ; ratenPer := 3 ;
  1690.        Termin := nachsch ;
  1691.  
  1692.        erg1 := Universal^.ergebnisSpez ( zinsPr, lfz, anfang,
  1693.                  zinsPer ) * kap0 ;
  1694.        erg2 := Universal^.endWertSpez ( lfz, anfang, zinsPr,
  1695.                ratenPer, zinsPer, Termin ) * rate ;
  1696.  
  1697.        writeln ;
  1698.        writeln ( ' Ergebnis 1 = ' , erg1 : 10 : 3 );
  1699.        writeln ( ' Ergebnis 2 = ' , erg2 : 10 : 3 );
  1700.        writeln ;
  1701.        readln ;
  1702.        dispose ( Universal, done ) ;
  1703.        end.
  1704.  
  1705.  
  1706.        Ausgabe:
  1707.  
  1708.        Ergebnis 1 =  1911.387
  1709.        Ergebnis 2 =   213.837      UNIT finanzl2     Beschreibung
  1710.      ─────────────────────────────────────────────────────────── 40 ──
  1711.  
  1712.        
  1713.        3.2.2.2 Gebührenerstattung (defGebErst)
  1714.  
  1715.        Kurzinfo
  1716.        ────────
  1717.        Erfolgen bei Darlehen Sondertilgungen, so kann ein Anspruch auf
  1718.        teilweise Rückerstattung der Kreditgebühren bestehen.
  1719.  
  1720.        Methoden
  1721.        ────────
  1722.        function eingDarl ( auszPr2, rueckPr2, zinsPr2,
  1723.           tilgPr2, darlDm2 : real ; zinsPer2, tilgPer2,
  1724.           lfzMonate2, anfang2 : integer ) ;
  1725.  
  1726.           Parameter  Beispiel  Bedeutung
  1727.           --------------------------------------------------
  1728.           auszPr2    94.5      Auszahlung in %
  1729.           rueckPr2   100       Rückzahlung in %
  1730.           zinsPr2    8.5       Zinssatz
  1731.           tilgPr2    2.5       Tilgung in %
  1732.                                Zins und Tilgung ergeben Annuität
  1733.           darlDm2    100000    Kreditbetrag
  1734.           zinsPer2   3         Zinsperiode
  1735.           tilgPer2   1         Tilgungsperiode
  1736.           lfzMonate2 36        muß gemeldet werden, sonst ergibt
  1737.                                Erstattung keinen Sinn
  1738.           anfang     4         Auszahlungsmonat
  1739.  
  1740.           Ergebnis: Werte werden im Objekt gespeichert.
  1741.  
  1742.  
  1743.        function erstattg ( sondertMon2 : integer ;
  1744.                sondertDm2 : real ) : real ;
  1745.  
  1746.           Parameter  Beispiel  Bedeutung
  1747.           --------------------------------------------------
  1748.           sondertMon2
  1749.                      22        x Monate nach Auszahlung erfolgt
  1750.                                Sondertilgung
  1751.  
  1752.           sondertDm2 15000     Betrag der Sondertilgung
  1753.  
  1754.  
  1755.           Ergebnis: Erstattungsbetrag Gebühren
  1756.  
  1757.  
  1758.  
  1759.        RÜCKGABE ERGEBNISSE
  1760.  
  1761.           Function             Rückgabe
  1762.           ---------------------------------------------------
  1763.           ret_rest0            Restschuld VOR Sondertilgung
  1764.           rest_rest1           Restschuld NACH Sondertilgung      UNIT finanzl2     Beschreibung
  1765.      ─────────────────────────────────────────────────────────── 41 ──
  1766.  
  1767.           
  1768.           Beispiel
  1769.           ────────
  1770.           program finanz08 ;
  1771.  
  1772.           uses finanzl, finanzl2 ;
  1773.  
  1774.           var GebErst : PGebErst ;
  1775.               darl, aus, rueck, zins, tilg : real ;
  1776.               zinsPer, tilgPer, ausMonat : integer ;
  1777.               lfz, tilgMon : integer ;
  1778.               tilgDm, erst : real ;
  1779.  
  1780.           begin
  1781.           GebErst := New ( PGebErst, init );
  1782.           darl := 100000.0 ;
  1783.           aus := 95 ; rueck := 100.0 ;
  1784.           zins := 8.5 ; tilg := 5.0 ;
  1785.           zinsPer := perZahl (vj) ; tilgPer := perZahl (mtl);
  1786.           lfz := 28 ; ausMonat := 2 ;
  1787.           tilgMon := 22 ; tilgDm := 15000.0 ;
  1788.  
  1789.           GebErst^.eingDarl ( aus,rueck,zins,tilg,darl,zinsPer,
  1790.                  tilgPer,lfz,ausMonat );
  1791.           erst := GebErst^.erstattg ( tilgMon, tilgDm );
  1792.  
  1793.           writeln ;
  1794.           writeln ( ' Restschuld ohne Sondertilgung = ' ,
  1795.                     GebErst^.ret_rest0 : 12 : 2 );
  1796.           writeln ( ' Neue Restschuld = ' ,
  1797.                     GebErst^.ret_rest1 : 12 : 2 );
  1798.           writeln ( ' Erstattung Gebühren = ' ,
  1799.                      erst : 10 : 2 ) ;
  1800.           writeln ( ' Effektivzins = ' ,
  1801.                     GebErst^.effektiv : 8 : 3 );
  1802.           writeln ;
  1803.           readln ;
  1804.           dispose ( GebErst, done );
  1805.           end.
  1806.  
  1807.  
  1808.           Ausgabe:
  1809.  
  1810.           Restschuld ohne Sondertilg =  87006.94
  1811.           Neue Restschuld =  71362.66
  1812.           Erstattung Gebühren =  202.14
  1813.           Effektivzins = 11.131      UNIT finanzl2     Beschreibung
  1814.      ─────────────────────────────────────────────────────────── 42 ──
  1815.  
  1816.           3.2.2.3 Gebührenabgrenzung (defGebAbgr)
  1817.  
  1818.           Kurzinfo
  1819.           ────────
  1820.           Kreditgebühren werden zinsgerecht auf die Laufzeit der
  1821.           Festzinsvereinbarung aufgeteilt.
  1822.           Das Objekt verwendet auch das Objekt defAbgrWerte.
  1823.  
  1824.           Methoden
  1825.           ────────
  1826.           procedure berechng ( auszPr2, rueckPr2, zinsPr2,
  1827.             tilgPr2, darlDm2 : real ; zinsPer2, tilgPer2,
  1828.             lfzMonate2, anfang2 : integer );
  1829.  
  1830.           Parameter  Beispiel  Bedeutung
  1831.           --------------------------------------------------
  1832.           auszPr2    93.5      Auszahlung Darlehen in %
  1833.           rueckPr2   100       Rückzahlung in %
  1834.           zinsPr2    8.75      Zinssatz
  1835.           tilgPr2    2.5       Tilgung in %
  1836.           darlDm2    100000    Darlehensbetrag
  1837.           zinsPer2   3         Zinsperiode
  1838.           tilgPer2   1         Tilgungsperiode
  1839.           lfzMonate2 36        Laufzeit der Festzinsvereinbarung
  1840.                                in Monaten
  1841.           anfang2    4         Auszahlungsmonat (1-12)
  1842.  
  1843.           Ergebnis: Interne Berechnung
  1844.  
  1845.  
  1846.  
  1847.        RÜCKGABE ERGEBNISSE
  1848.           Function             Rückgabe
  1849.           ---------------------------------------------------
  1850.           ret_mte (jahr : integer )
  1851.                                Zinsmonate im Abgrenzungsjahr
  1852.  
  1853.           ret_abgr ( jahr : integer )
  1854.                                Abgrenzungsbetrag für Jahr
  1855.  
  1856.           ret_rest ( jahr : integer )
  1857.                                Restbetrag für Jahr      UNIT finanzl2     Beschreibung
  1858.      ─────────────────────────────────────────────────────────── 43 ──
  1859.  
  1860.        Beispiel
  1861.        ────────
  1862.  
  1863.        program finanz09 ;
  1864.  
  1865.        uses finanzl, finanzl2, printer ;
  1866.  
  1867.        var GebAbgr : PGebAbgr ;
  1868.            darl, aus, rueck, zins, tilg : real ;
  1869.            zinsPer, tilgPer, ausMonat : integer ;
  1870.            lfz, x : integer ;
  1871.  
  1872.        begin
  1873.        GebAbgr := New ( PGebAbgr, init );
  1874.        darl := 100000 ;
  1875.        aus := 100.0 ; rueck := 103.0 ;
  1876.        zins := 8.5 ; tilg := 5.0 ;
  1877.        zinsPer := perZahl (vj) ; tilgPer := perZahl (mtl );
  1878.        lfz := 60 ;   { maximal 120 Monate }
  1879.        ausMonat := 4 ;
  1880.  
  1881.        GebAbgr^.berechng ( aus, rueck, zins, tilg, darl, zinsPer,
  1882.             tilgPer, lfz, ausMonat );
  1883.        writeln ( Lst, ' Jahr  Monate  Abgrenzung  Restbetrag ' );
  1884.        for x := 1 to ( lfz DIV 12 ) + 1 do begin
  1885.        write ( Lst, x : 4, '   ' , GebAbgr^.ret_mte ( x ) : 4, '  ');
  1886.        write ( Lst, GebAbgr^.ret_abgr ( x ) : 10 : 2 , '  ' );
  1887.        writeln ( Lst, GebAbgr^.ret_rest (x) : 10 : 2 ) ;
  1888.        end;
  1889.  
  1890.        writeln ( Lst );
  1891.        writeln ( Lst, ' Effektivzinssatz = ' ,
  1892.                    GebAbgr^.ret_effektiv : 10 : 3 , ' % ' );
  1893.        write ( Lst, #12, #13 );
  1894.        dispose ( GebAbgr, done );
  1895.        end.
  1896.  
  1897.  
  1898.        Ausdruck:
  1899.  
  1900.        Jahr  Monate  Abgrenzung  Restbetrag
  1901.          1       8       394.27   2605.73
  1902.          2      12       597.31   2008.42
  1903.            ... usw. ...
  1904.          6       4       199.54      0.00
  1905.  
  1906.        Effektivzinssatz = 9.353 %      UNIT finanzl2     Beschreibung
  1907.      ─────────────────────────────────────────────────────────── 44 ──
  1908.  
  1909.        
  1910.        3.2.2.4 Barwert (defBarWert)
  1911.  
  1912.        Kurzinfo
  1913.        ────────
  1914.        Abzinsung von Einzelforderungen und Ratenforderungen.
  1915.  
  1916.        Methoden
  1917.        ────────
  1918.        procedure berechng ( rate2, zins2 : real ; anz ,
  1919.            ratenPer, zinsPer, anlauf : integer );
  1920.  
  1921.           Parameter  Beispiel  Bedeutung
  1922.           --------------------------------------------------
  1923.           rate2      1500      Rate oder Einzelbetrag
  1924.           zins2      6.5       Zinssatz für Abzinsung
  1925.           anz        45        Anzahl Raten
  1926.                                1=Einzelbetrag
  1927.           ratenPer   1         Ratenperiode
  1928.           zinsPer    12        Zinsperiode, normal 12
  1929.           anlauf     0         zusätzliche Abzinsmonate
  1930.                                bis zur Fälligkeit 1. Rate
  1931.  
  1932.           Ergebnis: interne Berechnung
  1933.  
  1934.  
  1935.  
  1936.        RÜCKGABE ERGEBNISSE
  1937.  
  1938.           Function             Rückgabe
  1939.           ---------------------------------------------------
  1940.           ret_BarWert          gibt Barwert zurück
  1941.           ret_jahre            Laufzeit in Jahren und
  1942.           ret_Restmon          Restmonate
  1943.  
  1944.  
  1945.        Hinweis: Der Barwert wird in der Praxis meistens auf volle
  1946.        hundert DM gerundet.      UNIT finanzl2     Beschreibung
  1947.      ─────────────────────────────────────────────────────────── 45 ──
  1948.  
  1949.        
  1950.        Beispiel
  1951.        ────────
  1952.  
  1953.        program finanz10 ;
  1954.  
  1955.        uses finanzl, finanzl2 ;
  1956.  
  1957.        var BarWert : PBarWert ;
  1958.            rate, zinsPr, bar : real ;
  1959.            ratenPer, zinsPer, anlauf, anzahl : integer ;
  1960.  
  1961.        begin
  1962.        BarWert := New ( PBarWert, init );
  1963.        rate := 10000.0 ; zinsPr := 6.5 ;
  1964.        ratenPer := perZahl (mtl ); zinsPer := perZahl (j);
  1965.        anlauf := 76 ; anzahl := 1 ;
  1966.  
  1967.        BarWert^.berechng ( rate, zinsPr, anzahl, ratenPer,
  1968.            zinsPer, anlauf );
  1969.  
  1970.        writeln ;
  1971.        writeln ( ' Barwert = ' , BarWert^.ret_BarWert :10:2);
  1972.        writeln ( ' Jahre = ' , BarWert^.ret_jahre : 4 );
  1973.        writeln ( ' Restmonate = ' , BarWert.ret_Restmon : 3 );
  1974.        writeln ;
  1975.        readln ;
  1976.        dispose ( BarWert, done );
  1977.        end.
  1978.  
  1979.  
  1980.        Ausgabe:
  1981.  
  1982.        Barwert = 6708.00
  1983.        Jahre = 6
  1984.        Restmonate = 4      UNIT finanzl2     Beschreibung
  1985.      ─────────────────────────────────────────────────────────── 46 ──
  1986.  
  1987.        
  1988.        3.2.2.6 Sondersparen (defSonderSp)
  1989.  
  1990.        Kurzinfo
  1991.        ────────
  1992.        Sparverträge mit Zinsbonus oder Einzahlungsbonus.
  1993.  
  1994.        Methoden
  1995.        ────────
  1996.        berechng ( rate2, zins2, zinsBonus2, einzBonus2, anz2,
  1997.               restMon2 ) ;
  1998.  
  1999.           Parameter  Beispiel  Bedeutung
  2000.           --------------------------------------------------
  2001.           rate2      50        monatliche Sparrate
  2002.           zins2      5.5       Sparzins
  2003.           zinsBonus2 0         Bonus auf Sparzinsen
  2004.           einzBonus2 10        Bonus auf Einzahlungen
  2005.           anz2       72        Anzahl Sparraten
  2006.           restMon2   12        Sperrfrist nach Einzahlungen
  2007.  
  2008.           Ergebnis: interne Berechnung
  2009.  
  2010.  
  2011.  
  2012.        RÜCKGABE ERGEBNISSE
  2013.  
  2014.           Function             Rückgabe
  2015.           ---------------------------------------------------
  2016.           ret_rendite          Rendite Sparvertrag
  2017.           ret_einzDm           Summe Einzahlungen
  2018.           ret_zinsDM           Summe Zinsen
  2019.           ret_bonusDM          Bonusbetrag
  2020.           ret_gesDm            Endguthaben insgesamt
  2021.           ret_jahre            Laufzeit in Jahren und
  2022.           ret_monate           Restmonate
  2023.  
  2024.  
  2025.        Hinweis: In der Praxis wird nur entweder ein Zinsbonus ODER ein
  2026.        Einzahlungsbonus vergütet.      UNIT finanzl2     Beschreibung
  2027.      ─────────────────────────────────────────────────────────── 47 ──
  2028.  
  2029.        
  2030.        Beispiel
  2031.        ────────
  2032.  
  2033.        program finanz11 ;
  2034.  
  2035.        uses finanzl, finanzl2 ;
  2036.  
  2037.        var SonderSp : PSonderSp ;
  2038.            rate, zinsPr, zinsBonus, einzBonus : real ;
  2039.            anzahl, restMonate : integer ;
  2040.  
  2041.        begin
  2042.        SonderSp := New ( PSonderSp, init );
  2043.        rate := 50.0 ; zinsPr := 6 ; zinsBonus := 0 ;
  2044.        einzBonus := 10 ;
  2045.        anzahl := 70 ; restMonate := 21 ;
  2046.  
  2047.        SonderSp^.berechng ( rate, zinsPr, zinsBonus, einzBonus,
  2048.              anzahl, restMonate );
  2049.  
  2050.        writeln ;
  2051.        writeln ( ' Einzahlungen = ' ,
  2052.            SonderSp^.ret_einzDm : 10 : 2 );
  2053.        writeln ( ' Zinsen = ' , SonderSp^.ret_zinsDm : 10 : 2 );
  2054.        writeln ( ' Bonus  = ' , SonderSp^.ret_bonusDm : 10:2 );
  2055.        writeln ( ' Gesamt = ' , SonderSp^.ret_gesDm : 10 : 2 );
  2056.        writeln ( ' Rendite = ' , SonderSp^.ret_rendite :7:3);
  2057.        writeln ( ' Laufzeit Jahre = ', SonderSp^.ret_jahre : 3 );
  2058.        writeln ( '    Restmonate  = ', SonderSp^.ret_monate :3);
  2059.        writeln ;
  2060.        readln ;
  2061.        dispose ( SonderSp, done );
  2062.        end.
  2063.  
  2064.  
  2065.        Ausgabe:
  2066.  
  2067.        Einzahlungen =  3500.00
  2068.        Zinsen = 1130.26
  2069.        Bonus  =  350.00
  2070.        Gesamt = 4980.26
  2071.        Rendite =   7.581
  2072.        Laufzeit Jahre = 7
  2073.           Restmonate  = 7      UNIT finanzl2     Beschreibung
  2074.      ─────────────────────────────────────────────────────────── 48 ──
  2075.  
  2076.        
  2077.        3.2.2.6 Ratenkredit (defRatenKr)
  2078.  
  2079.        Kurzinfo
  2080.        ────────
  2081.        Ratenkredite mit Zins p.M.
  2082.  
  2083.        Methoden
  2084.        ────────
  2085.        eingabe ( darlDm2, gebPr2, zinsPm2, rate02 : real ;
  2086.             lfzMon2, tilgMon2 : integer ) ;
  2087.  
  2088.           Parameter  Beispiel  Bedeutung
  2089.           --------------------------------------------------
  2090.           darlDm2    2000      Kreditbetrag
  2091.           gebPr2     2         Gebühren in %
  2092.           zinsPm2    0.4       Zins p.M.
  2093.           rate02     100       monatlicher Ratenbetrag ODER
  2094.           lfzMon2    0         Laufzeit in Monaten
  2095.                                nur Rate oder Laufzeit melden
  2096.           tilgMon2   0         bei vorzeitiger Gesamttilgung:
  2097.                                Tilgung x Monate nach Auszahlung
  2098.  
  2099.           Ergebnis: interne Berechnung
  2100.  
  2101.  
  2102.  
  2103.        RÜCKGABE ERGEBNISSE
  2104.  
  2105.           Function             Rückgabe
  2106.           ---------------------------------------------------
  2107.           ret_gebDm            Gebühren in DM
  2108.           ret_zinsDm           Kreditzinsen in DM
  2109.           ret_gesDm            Gesamtschuld
  2110.           ret_rate1            1. monatliche Kreditrate
  2111.           ret_rate2            monatliche Folgeraten
  2112.           ret_lfz              Laufzeit in Monaten
  2113.           ret_effektiv         effektiver Jahreszins
  2114.           ret_erstattg         Erstattungsbetrag bei
  2115.                                vorzeitiger Gesamttilgung
  2116.  
  2117.  
  2118.        Hinweis: Vom Programm wird berücksichtigt, daß die erste
  2119.        Kreditrate nicht größer sein darf als die Folgeraten.      UNIT finanzl2     Beschreibung
  2120.      ─────────────────────────────────────────────────────────── 49 ──
  2121.  
  2122.        
  2123.        Beispiel
  2124.        ────────
  2125.  
  2126.        program finanz12 ;
  2127.  
  2128.        uses finanzl, finanzl2 ;
  2129.  
  2130.        var RatenKr : PRatenKr ;
  2131.            darl, zins, geb, rate : real ;
  2132.            lfz, tilgMonat : integer ;
  2133.  
  2134.        begin
  2135.        RatenKr := New ( PRatenKr, init );
  2136.        darl := 2000 ; zins := 0.4 ; geb := 2 ;
  2137.        rate := 100 ; lfz := 0 ; tilgMonat := 15 ;
  2138.  
  2139.        RatenKr^.eingabe ( darl, geb, zins, raten, lfz, tilgMonat );
  2140.        writeln ;
  2141.        writeln ( ' Kreditbetrag      ' , darl : 10 : 2 );
  2142.        writeln ( ' Gebühren          ' ,
  2143.                     RatenKr^.ret_gebDm : 10 : 2 );
  2144.        writeln ( ' Zinsen            ' ,
  2145.                     RatenKr^.ret_zinsDm : 10 : 2 );
  2146.        writeln ( ' Gesamtbetrag      ' ,
  2147.                     RatenKr^.ret_gesDm : 10 : 2 );
  2148.        writeln ( ' Laufzeitmonate    ' ,
  2149.                     RatenKr^.ret_lfz : 5 );
  2150.        writeln ( ' erste Rate        ' ,
  2151.                     RatenKr^.ret_rate1 : 10 : 2 );
  2152.        writeln ( ' weitere Raten     ' ,
  2153.                     RatenKr^.ret_rate2 : 10 : 2 );
  2154.        writeln ( ' effektiver Jahreszins ' ,
  2155.                     RatenKr^.ret_effektiv : 7 : 3 ) ;
  2156.  
  2157.        if ( tilgMonat > 0 ) then
  2158.        writeln ( ' Rückerstattung ' ,
  2159.                 RatenKr^.ret_erstattg : 10 : 2 );
  2160.        writeln ;
  2161.        readln ;
  2162.        dispose ( RatenKr, done );
  2163.        end.
  2164.  
  2165.        Ausgabe:
  2166.  
  2167.        Kreditbetrag        2000.00
  2168.        Gebühren              40.00
  2169.        Zinsen               176.00
  2170.        Gesamtbetrag        2216.00
  2171.        Laufzeitmonate       22
  2172.        erste Rate           100.67
  2173.        weitere Raten        100.73
  2174.        effektiver Jahreszins  11.569
  2175.        Rückerstattung     23.90      UNIT finanzl2     Theorie
  2176.      ─────────────────────────────────────────────────────────── 50 ──
  2177.  
  2178.        
  2179.        3.3 Theorie
  2180.  
  2181.        3.3.1 Universalobjekt
  2182.  
  2183.        Anfangsmonat
  2184.        ────────────
  2185.        Im Normalfall beginnen finanzmathematische Berechnungen zum
  2186.        Zeitpunkt 0 (=30.12.). Dieses Objekt bietet die Möglichkeit,
  2187.        den wirklichen Beginn der Zahlungen zu beachten. Auf diese
  2188.        Weise kann eine Zinskapitalisierung früher fällig sein.
  2189.  
  2190.        Bei Raten sind die Ratenperioden zwingend. Wenn Sie zum
  2191.        Beispiel bei vj. Raten als Anfang den Monat 4 (=30.April)
  2192.        melden, so wird die erste Rate im Monat 6 (30.6.) eingesetzt.
  2193.  
  2194.        Das reichlich komplizierte Objekt gibt für sich alleine keinen
  2195.        rechten Sinn. Es wird bei anderen Objekten im Hintergrund
  2196.        gebraucht.
  2197.  
  2198.  
  2199.  
  2200.        3.3.2 Gebührenerstattung
  2201.  
  2202.        Um die Genauigkeit zu erhöhen, geht man vom wirklichen
  2203.        Auszahlungsmonat aus. Dafür wird das obige Objekt verwendet.
  2204.  
  2205.        Des weiteren wird die Zinsperiode auch für die
  2206.        Effektivzinsberechnung übernommen. Dieser Effektivzins ist kein
  2207.        effektiver Jahreszins im Sinne der Preisangabenverordnung.
  2208.  
  2209.        Das Programm geht davon aus, daß die Erstattung am Ende der
  2210.        Festzinsvereinbarung vergütet wird.
  2211.  
  2212.        Mehrere Sondertilgungen können nicht seperat abgerechnet
  2213.        werden. Vielmehr muß in dem Fall ein Objekt abgeleitet werden,
  2214.        das mehrere Sondertilgungen entgegennimmt.
  2215.  
  2216.  
  2217.  
  2218.        3.3.3 Gebührenabgrenzung
  2219.  
  2220.        Der Rechenvorgang entspricht weitgehend dem bei der
  2221.        Gebührenerstattung. Der jährliche Gebührenanteil ergibt sich
  2222.        aus der Differenz zwischen dem jährlichen Effektivzins in DM
  2223.        und dem Darlehenszins in DM.      UNIT finanzl2     Theorie
  2224.      ─────────────────────────────────────────────────────────── 51 ──
  2225.  
  2226.        
  2227.        3.3.4 Barwert
  2228.  
  2229.        Raten werden bis zum Laufzeitende aufgezinst und von dort zum
  2230.        gewünschten Zeitpunkt abgezinst.
  2231.  
  2232.        Das Programm geht bei Raten auch dann vom Zeitpunkt 0 aus, wenn
  2233.        Anlaufmonate vorhanden sind.
  2234.  
  2235.  
  2236.        3.3.5 Sondersparen
  2237.  
  2238.        Bei der Berechnung des Endguthabens mit Bonus hat die Toolbox
  2239.        zu beachten, daß Zinsen auf jeden Fall nur jährlich
  2240.        kapitalisiert werden.  Dies ist mit einigem Programmieraufwand
  2241.        verbunden.
  2242.  
  2243.        Für das Endguthaben ist der Zinssatz (=Rendite) zu finden, der
  2244.        OHNE Bonus das gleiche Guthaben erbringt.
  2245.  
  2246.  
  2247.  
  2248.        3.3.6 Ratenkredit
  2249.  
  2250.        Die Berechnung entspricht dem Objekt Darlehen, ist aber
  2251.        einfacher.
  2252.  
  2253.        Die Erstattung bei vorzeitiger Gesamttilgung ergibt sich
  2254.        einfach aus
  2255.  
  2256.            Restschuld auf Darlehenskonto
  2257.          - Restschuld gemäß Effektivzinsberechnung
  2258.            ────────────────────────────────────────
  2259.          = Erstattungsbetrag
  2260.  
  2261.        Wobei die Restschulden zum Monat der Gesamttilgung zu berechnen
  2262.        sind.      JZ-Finanzmathe  Inhalt
  2263.      ─────────────────────────────────────────────────────────── 2 ──
  2264.  
  2265.        Inhaltsverzeichnis
  2266.  
  2267.  
  2268.           1. Überblick                                      3
  2269.           1.1 Übersicht                                     3
  2270.           1.2 Bestellung                                    3
  2271.           1.3 Rechte                                        3
  2272.           1.4 Haftung                                       4
  2273.           1.5 Installation                                  4
  2274.           1.6 eingeschränkte Version                        4
  2275.           1.7 Beispielprogramm                              4
  2276.  
  2277.           2. UNIT Finanzl                                   5
  2278.           2.1 Interface                                     5
  2279.           2.2 Beschreibung                                  12
  2280.           2.2.1 Allgemeine Typen                            12
  2281.           2.2.2 Objekte                                     14
  2282.           2.2.2.1 Einmalzahlung (defEinmal)                 14
  2283.           2.2.2.2 Raten (defRaten)                          16
  2284.           2.2.2.3 Zinssatzwechsel (defZinsWe)               18
  2285.           2.2.2.4 Wertpapier (defWertp)                     20
  2286.           2.2.2.5 Darlehen (defDarl)                        21
  2287.           2.2.2.6 Sondertilgungen (defSonderTi)             23
  2288.           2.2.2.7 Tilgungsplan (defTilgPl)                  24
  2289.           2.3 Theorie                                       27
  2290.           2.3.1 Einmalzahlung                               27
  2291.           2.3.2 Raten                                       28
  2292.           2.3.3 Zinssatzwechsel                             29
  2293.           2.3.4 Wertpapiere                                 30
  2294.           2.3.5 Darlehen                                    30
  2295.           2.3.6 Tilgungsplan                                31
  2296.  
  2297.           3. UNIT Finanzl2                                  32
  2298.           3.1 Interface                                     32
  2299.           3.2 Beschreibung                                  38
  2300.           3.2.1 Allgemeine Typen                            38
  2301.           3.2.2 Objekte                                     38
  2302.           3.2.2.1 Universalobjekt (defUniversal)            38
  2303.           3.2.2.2 Gebührenerstattung (defGebErst)           40
  2304.           3.2.2.3 Gebührenabgrenzung (defGebAbgr)           42
  2305.           3.2.2.4 Barwert (defBarWert)                      44
  2306.           3.2.2.6 Sondersparen (defSonderSp)                46
  2307.           3.2.2.6 Ratenkredit (defRatenKr)                  48
  2308.           3.3 Theorie                                       50
  2309.           3.3.1 Universalobjekt                             50
  2310.           3.3.2 Gebührenerstattung                          50
  2311.           3.3.3 Gebührenabgrenzung                          50
  2312.           3.3.4 Barwert                                     51
  2313.           3.3.5 Sondersparen                                51
  2314.           3.3.6 Ratenkredit                                 51