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 >
Wrap
Text File
|
1993-04-06
|
82KB
|
2,314 lines
Karl Jenz JZ-Finanzmathe
─────────────────────────────────────────────────────────── 1 ──
J Z - F I N A N Z M A T H E
eine Toolbox für Finanzmathematik
in Borland Pascal von
Karl Jenz
7302 Ostfildern 1 Horbstr. 7
<ab 1.7.93:> 73760 Ostfildern Horbstraße 7
8. März 1993 Vers. 1.1
Revision: 6. April 1993 JZ-Finanzmathe Überblick
─────────────────────────────────────────────────────────── 3 ──
1. Überblick
1.1 Übersicht
Die Finanzmathematik ist teilweise eine ziemlich komplizierte
Materie, die nur mit einer Programmiersprache befriedigend
bewältigt werden kann.
Die Toolbox stellt verschiedene Objekte zur Verfügung, die sehr
leicht zu verwenden sind. Der Programmierer muß nicht unbedingt
selber objektorientiert programmieren, die Beispiele im
nächsten Kapitel zeigen die problemlose Anwendung der Objekte.
Die Toolbox wird als Quelltext zur Verfügung gestellt, der vom
Programmierer selbst zu compilieren ist. Natürlich wird der
Compiler nicht geliefert.
Der Programmierer muß die Eingabe und die Ausgabe selbst
programmieren, dafür bietet die Toolbox keine brauchbaren
Hilfen. Auch die Beispiele zeigen lediglich die Anwendung der
Objekte.
Theoretische Erläuterungen finden Sie im Kapital Theorie.
Dieses Kapitel setzt allerdings voraus, daß finanzmathematische
Grundkenntnisse vorhanden sind.
1.2 Bestellung
Auf der Diskette befindet sich die Datei bestell.txt. Diese
Datei sollten Sie sich ausdrucken lassen, wenn Sie die
Vollversion bestellen wollen. Der Ausdruck kann so erfolgen:
copy bestell.txt prn
Dem Bestellformular entnehmen Sie bitte den Preis.
1.3 Rechte
Die Rechte an der Toolbox sind bei dem Autor:
Karl Jenz 7302 Ostfildern 1 Horbstraße 7
Tel. 0711 / 444082
Wenn die Toolbox regulär gekauft wurde, dürfen die Objekte in
eigene Programme eingebunden werden. Der Quelltext der Toolbox
darf dabei aber nicht weitergegeben werden. JZ-Finanzmathe Überblick
─────────────────────────────────────────────────────────── 4 ──
1.4 Haftung
Die Toolbox ist getestet und die Ergebnisse sind geprüft.
Jegliche Schadenersatzansprüche sind aber ausgeschlossen.
Die Toolbox ist nicht darauf eingerichtet, jede Fehleingabe
abzufangen. In Ihrem Programm sollten Sie die Eingaben
überprüfen, bevor Sie Werte an die Objekte der Toolbox
übergeben.
1.5 Installation
Die Quelltexte finanzl*.pas sind in das Verzeichnis des
Compilers zu kopieren und zu compilieren. Empfohlen wird ein
eigenes Unterverzeichnis für Finanzmathematik, z. B. finanzm.
Entwickelt wurde die Toolbox mit BORLAND PASCAL, aber die
Anwendung mit Turbo Pascal ab Version 5.5 dürfte keinerlei
Schwierigkeiten bereiten.
Es wird empfohlen, den Quelltext unverändert zu belassen und
nicht zu erweitern. Eigene Erweiterungen sollten in einer
eigenen UNIT erfolgen, die die Toolbox einbindet.
Für künftige Erweiterungen der Toolbox durch weitere Units sind
die Bezeichnungen finanzl3 bis finanzl9 vorgesehen. Deshalb
sollten diese Bezeichnungen nicht für eigene Erweiterungen
verwendet werden.
1.6 eingeschränkte Version
Die Toolbox gibt es als eingeschränkte Version. Dabei enthält
der Quelltext in Pascal die ersten drei Objekte der Unit
finanzl.
Die eingeschränkte Version darf kopiert und an Dritte
weitergegeben werden. Dabei dürfen allerdings weder der
Quelltext noch die Beschreibung geändert werden.
1.7 Beispielprogramm
Zum Lieferumfang gehört das Beispielprogramm fintv.pas im
Quelltext. Es zeigt, wie man mit Turbo Vision von Borland
Pascal ziemlich schnell ansprechende Programme schreiben kann. UNIT finanzl Interface
─────────────────────────────────────────────────────────── 5 ──
2. UNIT Finanzl
2.1 Interface
unit finanzl ;
{
*****************************
J Z - F I N A N Z M A T H E Vers. 1.1 26.3.93
eine Toolbox für Finanzmathematik in Borland Pascal
Alle Rechte bei: Karl Jenz
7302 Ostfildern 1 Horbstraße 7
*****************************
}
INTERFACE
const
ja = true ;
nein = false;
nullR = 0.0 ; { null bei real }
zinsAnzWe = 7 ; { Anzahl Zinssätze bei Zinssatzwechsel }
anzSonderTi = 3 ;
{ Anzahl Sondertilgungen bei Tilgungsplan }
type
defPerioden = ( mtl, vj, hj, j ) ;
{ mögliche Perioden mtl. vj. hj. j. }
defZahlgTerm = ( vorsch, nachsch ) ;
{ vorschüssige oder nachschüssige Zahlungsweise bei Raten }
defZinsPr = array [1..zinsAnzWe] of real ;
{ Anzahl Zinssätze bei Zinswechsel }
defZahlgArt = ( gutschr, auszahlg );
{ Gutschrift / Belastung der Zinsen oder Zahlung } UNIT finanzl Interface
─────────────────────────────────────────────────────────── 6 ──
PEinmal = ^defEinmal ; { Einmalzahlungen }
defEinmal = object
public
perioden, restmonate : integer ;
{ Methoden: }
procedure null1 ; virtual ;
function qfaktor ( proz : real ; per : real ) : real ;
{ berechnet aus Zinssatz und Periode den qWert
12 % Zins Periode 3=vj ergibt 1,03 }
procedure laufzBer ( monate, periode : integer ;
VAR vollPer, restMon : integer ) ;
{ liefert Anzahl der Perioden = vollPer
und Restmonate = restMon }
function potenz ( basis, faktor : real ) : real ;
{ Potenzieren }
function zinsAusQ ( qWert : real ; periode : integer ) :
real ;
{ berechnet aus q und zinsperiode den Zinssatz }
function naeherg ( diffErg, diffBasis, steigBasis : real ) :
real ;
{ Unterfunktion für Näherungsverfahren }
public
{ Schnittstelle zu Programmen }
constructor init ;
destructor done ;
function ergebnis ( zinsPr : real ; monate, zinsPer :
integer ) : real ;
{ Ergebnis bei 1,-- Kapital = Rechenwert }
function zinsPrBer ( monate, zinsPer : integer ;
qWert : real ) : real ;
{ Berechnet Zinssatz aus qWert z.B. aus 1,6875 }
end; UNIT finanzl Interface
─────────────────────────────────────────────────────────── 7 ──
PRaten = ^defRaten ;
defRaten = object ( defEinmal ) { Ratenzahlungen }
public
procedure null1 ; virtual ;
function zinsMonate ( ratenPer, zinsPer : integer ;
zahlgTermin : defZahlgTerm ) : real ;
{ berechnet wieviele Monate die Raten
im Schnitt während der Zinsperiode verzinst werden }
function perEndWert ( zinsPr : real ; ratenPer, zinsPer :
integer; zahlgTermin : defZahlgTerm ) : real ;
{ Endwert bei Rate von 1 DM zum Ende Zinsperiode }
function restEndWert ( zinsPr : real ; ratenPer, restPer :
integer ; zahlgTermin : defZahlgTerm ) : real ;
{ Berechnung Restmonate nach letzter voller
Zinsperiode }
function endkap ( zinsPr : real ; ratenPer, zinsPer :
integer ; zahlgTermin : defZahlgTerm ) : real ;
{ Berechnung Endkapital aus perioden und
restmonate
diese müssen vorher berechnet sein }
public
constructor init ;
destructor done ;
function endWert ( anzahl : integer ; zinsPr : real ;
ratenPer, zinsPer : integer ;
zahlgTermin : defZahlgTerm ) : real ;
{ Endwert der Rate von 1 DM nach x Raten }
function zinsPrRa ( anzahl : integer ; ratenPer, zinsPer :
integer; zahlgTermin : defZahlgTerm ; qWert : real ) :
real ;
{ berechnet Zinssatz für qWert
qWert = Multiplikator bei einer Rate von 1 DM }
end; UNIT finanzl Interface
─────────────────────────────────────────────────────────── 8 ──
PZinsWe = ^defZinsWe ; { Anlage mit Zinssatzwechsel }
defZinsWe = object ( defEinmal)
public
jahre : integer ; { nur für ganze Jahre berechnen }
zinsPrWe : defZinsPr ; { Zinssätze }
zahlgArt : defZahlgArt ;
endWert, rendite : real ;
procedure null1 ; virtual ;
function wurzel ( basis, faktor : real ) : real ;
procedure berechnWe2 ;
function berechnWeUnt ( pr0 : real ) : real ;
public
constructor init ;
destructor done ;
procedure berechnWe ( jahre2 : integer ; zinsPrWe2 :
defZinsPr ; zahlgArt2 : defZahlgArt );
function ret_rendite : real ;
function ret_endWert : real ;
end;
PWertp = ^defWertp ;
{ Rendite festverzinsl. Wertpapier }
defWertp = object ( defEinmal )
public
procedure null1 ; virtual ;
public
constructor init ;
destructor done ;
function rendWp ( kaufKurs , zinsPr : real ; zinsPer :
integer ; rueckKurs : real ; laufzMonate : integer ) :
real ;
{ Berechnung Rendite nach der internationalen Methode von
AIBD Funktion gibt Rendite zurück }
end; UNIT finanzl Interface
─────────────────────────────────────────────────────────── 9 ──
PDarl = ^defDarl ; { normale Darlehen }
defDarl = object ( defRaten )
public
auszPr, rueckPr, zinsPr, tilgPr : real ;
zinsPer, tilgPer, lfzMonate : integer;
rate, rest, effektiv : real ;
procedure null1 ; virtual ;
procedure lfzMonBer ;
function restBer ( darl, zinsPr2, rate2 : real ;
zinsPer2, tilgPer2 : integer ) : real ;
procedure effektivBer ;
{ effektiver Jahreszins berechnen }
public
constructor init ;
destructor done ;
procedure berechnDa ( auszPr2, rueckPr2, zinsPr2, tilgPr2 :
real ; zinsPer2, tilgPer2, lfzMonate2 : integer ) ;
{ Berechnung Darlehenswerte
wenn lfzMonate2 = 0, dann Laufzeit bis
Darlehensende berechnen }
function ret_rest : real ; { Restschuld zurückgeben }
function ret_laufzMte : integer ;
function ret_effektiv : real ;
end;
defSonderTi = object
{ Sondertilgungen für Tilgungsplan }
public
jahr, monat : integer ;
betrag : real ;
public
procedure null1 ;
constructor init ;
destructor done ;
procedure eingabe ( jahr2, monat2 : integer ; betrag2 : real );
function tilgDa ( jahr2, monat2 : integer ) : boolean ;
{ ob Sondertilgung zum Termin vorhanden }
function ret_tilg : real ; { Tilgungsbetrag zurückgeben }
end;
defSonderTi2 = array[1..anzSonderTi] of defSonderTi ; UNIT finanzl Interface
─────────────────────────────────────────────────────────── 10 ──
PTilgPl = ^defTilgPl ; { Tilgungsplan }
defTilgPl = object
public
darlDm, zinsPr, tilgPr, rateDm : real ;
zinsPer, tilgPer : integer ;
ausJahr, ausMonat : integer ;
SonderTi : defSonderTi2 ; { Sondertilgungen }
rate, rest, zinsZaehler, zinsDm, tilgDm : real ;
lfdJahr, lfdMonat : integer ;
sumZins, sumTilg : real ;
nullStop, sondertEin, endeDa : boolean ;
procedure null1 ; virtual ;
procedure monWeiter ; { 1 Monat weiterzählen,
Jahreswechsel beachten}
procedure ratenBer ; { Tilgungsrate berechnen }
procedure tilgBer ; { fällige Tilgung verrechnen }
procedure zinsBer ; { fällige Zinsen verrechnen }
procedure sondertBer ;
{ Sondertilgungen verrechnen, wenn vorhanden }
procedure abschlussBer ;
{ Abschließen, letzte Berechnung vornehmen }
public
constructor init ;
destructor done ;
procedure eingDarl ( darlDm2, zinsPr2, tilgPr2, rateDm2 :
real ; zinsPer2, tilgPer2, ausJahr2, ausMonat2 :
integer ; nullStop2 : boolean );
{ anstelle einer Tilgung in Prozenz (tilgPr2) kann auch
die Tilgungsrate in DM (rateDm2) gemeldet werden.
nullStop2 = bei völliger Rückzahlung Berechnung
beenden }
procedure eingSonderTi ( nr, jahr, monat : integer ;
betrag : real );
{ Die Eingabe muß NACH Aufruf von eingDarl (..) erfolgen }
procedure schritt ;
{ 1 Tilgungsperiode weiterrechnen }
function faellig ( monat, periode : integer ) : boolean ;
{ ob in dem Monat gemäß Zins- oder Tilgungsperiode
Zins oder Zahlung fällig
Kann auch verwendet werden um Ausgabe zu verdichten
} UNIT finanzl Interface
─────────────────────────────────────────────────────────── 11 ──
{ noch defTilgPl Rückgaben: }
function ret_lfdJahr : integer ;
function ret_lfdMonat : integer ;
function ret_zinsDm : real ;
function ret_tilgDm : real ;
{ nach Rückgabe von Zins und Tilgung werden
diese Zählvariablen auf Null gestellt }
function ret_rest : real ;
function ret_sumZins : real ;
function ret_sumTilg : real ;
function ret_endeDa : boolean ;
end; { ende defTilgPl }
{ Allgemeine Funktion: }
function perZahl ( perArt : defPerioden ) : integer ;
{ ermöglicht die Eingabe der Perioden mit Kürzel mtl
usw. dadurch Programm besser lesbar
Diese Funktion gibt den Rechenwert zurück }
function wertDaR ( wert : real ) : boolean ;
{ prüft ob ein Wert vorhanden ist. }
function abschneiden ( wert : real ) : real ;
{ auf 2 Stellen nach Komma abschneiden } UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 12 ──
2.2 Beschreibung
Die nachfolgende Beschreibung ist Ihr Nachschlagewerk, wenn Sie
programmieren. Beschrieben werden zunächst die Typen und
allgemeinen Funktionen; dann die Objektmethoden, die als
Schnittstelle zu Ihrem Programm vorgesehen sind.
Nur solche Variablen und Methoden der Objekte werden
beschrieben, die als Schnittstelle zum Programm vorgesehen
sind.
Die Beschreibung enthält auch nicht den constructor und
destructor der Objekte. Deren problemlose Verwendung ist aus
den Beispielprogrammen ersichtlich.
2.2.1 Allgemeine Typen
Perioden (defPerioden)
──────────────────────
Für die Zinsperioden und die Ratenperioden gibt es 4 fest
definierte Termine, die alle einen Rechenwert haben. Übersicht:
Periode Rechenwert Bedeutung
-------------------------------------------
mtl 1 monatlich am 30.
vj 3 vierteljährlich zum Quartalsende
hj 6 halbjährlich am 30.6. und 30.12.
j 12 jährlich am 30.12.
Wenn Sie einem Objekt eine Periode übergeben, können Sie
entweder den Rechenwert übergeben oder die
allgemeine Funktion perZahl ( Periode )
dafür verwenden. Übersicht der Übergabemöglichkeiten:
1 oder perZahl (mtl)
3 oder perZahl (vj)
6 oder perZahl (hj)
12 oder perZahl (j)
Sie sollten den Objekten nur eine der vorgesehenen 4 Perioden
übergeben. Andere Werte können zu einem falschen Ergebnis
führen. UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 13 ──
Zahlungstermine (defZahlgTerm)
──────────────────────────────
Über den Zahlungstermin wird festgelegt, ob eine Rate zu Beginn
einer Ratenperiode (=vorschüssig) oder am Ende der Ratenperiode
(=nachschüssig) zu bezahlen ist.
Bei Sparvorgängen geht man immer von vorschüssiger
Zahlungsweise aus.
Die Tilgungsraten für Darlehen werden dagegen immer
nachschüssig gezahlt.
Ob Raten vorschüssig oder nachschüssig zu bezahlen sind, das
sollten Sie nicht abfragen. Das muß Ihr Programm selber wissen.
Finanzmathematische Berechnungen gehen im übrigen meistens vom
Zeitpunkt 0 aus. Man nimmt also an, daß die erste Zahlung an
einem 30.12. erfolgt.
Ein Bild mit vierteljährlichen Raten soll das Thema abrunden:
│ │ │ │
1. Sparrate│ │ 2. Sparrate <-- vorschüssig
│ │ │ │
Auszahlg. │ │ │
Darlehen │ │ │
│ │ │ 1. Tilgung <-- nachschüssig
│ │ │ │
└─────┴─────┴─────┴───────────────
Monat --> 0 1 2 3 4 ...
Zinssätze (defZinsPr)
─────────────────────
Die Toolbox enthält ein Objekt mit Zinssatzwechsel. Dafür ist
ein einfaches array mit Zinssätzen definiert.
Zahlungsart (defZahlgArt)
─────────────────────────
Für das gleiche Objekt mit Zinssatzwechsel ist definiert, ob
die Zinsen bei Fälligkeit
gutgeschrieben (gutschr) oder
ausbezahlt (auszahlg)
werden. UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 14 ──
2.2.2 Objekte
2.2.2.1 Einmalzahlung (defEinmal)
Kurzinfo
────────
Verzinsung von Einmalzahlungen,
Objekt geht von 1 DM Anfangskapital aus.
Methoden
────────
function ergebnis ( zinsPr : real ; monate, zinsPer : integer )
: real ;
Parameter Beispiel Bedeutung
--------------------------------------------------
zinsPr 6.75 Zinssatz
monate 34 Laufzeit in Monaten
zinsPer 12 Zinsperiode
Ergebnis: Endkapital bei 1 DM Anfangskapital
function zinsPrBer ( monate, zinsPer : integer ;
qWert : real ) : real ;
Parameter Beispiel Bedeutung
--------------------------------------------------
monate 34 Laufzeit in Monaten
zinsPer 12 Zinsperiode
qWert 1.3375 Endkapital bei 1 DM Anfangskap.
Ergebnis: Zinssatz UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 15 ──
Beispiel
────────
program finanz01 ;
uses finanzl ;
var Einmal : PEinmal ;
kap0, kap1, zinsPr : real ;
monate, periode : integer ;
begin
Einmal := New ( PEinmal, init );
kap0 := 1500 ; kap1 := 1943.08 ;
zinsPr := 8.5 ; monate := 38 ;
periode := perZahl (j); { oder periode := 12 }
writeln ;
writeln ( ' Endkapital = ' ,
kap0 * Einmal^.ergebnis ( zinsPr, monate, periode):10:2) ;
writeln ( ' Anfangskapital = ' ,
kap1 / Einmal^.ergebnis ( zinsPr, monate, periode):10:2) ;
writeln ( ' Zinssatz = ' ,
Einmal^.zinsPrBer ( monate, periode, kap1 / kap0 ) : 10:3) ;
writeln ;
readln ;
dispose ( Einmal,done );
end.
Ausgabe:
Endkapital = 1943.08
Anfangskapital = 1500.00
Zinssatz = 8.500 UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 16 ──
2.2.2.2 Raten (defRaten)
Kurzinfo
────────
Verzinsung von Ratenzahlungen,
Objekt geht von Rate von 1 DM aus.
Methoden
────────
function endWert ( anzahl : integer ; zinsPr : real ;
ratenPer, zinsPer : integer ; zahlgTermin : defZahlgTerm )
: real ;
Parameter Beispiel Bedeutung
--------------------------------------------------
anzahl 38 Anzahl Raten
zinsPr 6.75 Zinssatz
ratenPer 1 Periode der Ratenzahlung
(mtl, vj, hj, j = 1,3,6,12)
zinsPer 12 Periode der Zinsgutschrift
(mtl, vj, hj, j = 1,3,6,12)
zahlgTerm. vorsch Vorschüssige oder nachschüssige
Ratenzahlung (siehe oben)
Ergebnis: Endkapital bei 1 DM Rate
function zinsPrRa ( anzahl : integer ; ratenPer, zinsPer :
integer ; zahlgTermin : defZahlgTerm ; qWert : real ) :
real ;
Parameter Beispiel Bedeutung
--------------------------------------------------
anzahl 38 Anzahl Raten
ratenPer 1 Periode der Ratenzahlung
(mtl, vj, hj, j = 1,3,6,12)
zinsPer 12 Periode der Zinsgutschrift
(mtl, vj, hj, j = 1,3,6,12)
zahlgTerm. vorsch Vorschüssige oder nachschüssige
Ratenzahlung (siehe oben)
qWert 45,2754 Endkapital bei 1 DM Rate
Ergebnis: Zinssatz
Wichtiger Hinweis: Die Ratenperiode darf in der ganzen Toolbox
niemals größer sein als die Zinsperiode. Beispiele:
Ratenperiode Zinsperiode
------------ -----------
1 1 OK
1 3 OK
3 1 <-- NEIN UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 17 ──
Beispiel
────────
program finanz02 ;
{ Sparvorgänge }
uses finanzl ;
var Raten : PRaten ;
endkap, rate, zinsPr : real ;
ratenPer, zinsPer, anz : integer ;
begin
Raten := New ( PRaten, init );
rate := 50 ;
ratenPer := perZahl (mtl);
anz := 15 ;
zinsPr := 6.0 ;
zinsPer := perZahl ( j ) ;
endkap := 780.29 ;
writeln ;
writeln ( ' Endkapital = ' ,
rate * Raten^.endWert ( anz, zinsPr, ratenPer, zinsPer,
vorsch ) : 10 : 2 );
writeln ( ' Rate = ' ,
endkap / Raten^.endWert ( anz, zinsPr, ratenPer, zinsPer,
vorsch ) : 10 : 2 );
writeln ( ' Zinssatz = ' ,
Raten^.zinsPrRa ( anz, ratenPer, zinsPer, vorsch,
endkap / rate ) : 10 : 3 ) ;
writeln ;
readln ;
dispose ( Raten, done );
end.
Ausgabe:
Endkapital = 780.29
Rate = 50.00
Zinssatz = 5.999 UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 18 ──
2.2.2.3 Zinssatzwechsel (defZinsWe)
Kurzinfo
────────
jährlicher Zinssatzwechsel für eine Einmalzahlung, Zinsen
können gutgeschrieben oder ausbezahlt werden.
Methoden
────────
procedure berechnWe ( jahre2 : integer ; zinsPrWe2 :
defZinsPr ; zahlgArt2 : defZahlgArt );
Parameter Beispiel Bedeutung
--------------------------------------------------
jahre2 6 Laufzeitjahre insgesamt
zinsPrWe2 6 Zinssätze als defZinsPr
(siehe oben)
zahlgArt2 gutschr Zinsen werden
gutgeschrieben = gutschr oder
ausbezahlt = auszahlg
Ergebnis: berechnet Rendite und Endkapital
RÜCKGABE ERGEBNISSE
Function Rückgabe
------------------------------------------------
ret_rendite Rendite der Anlage
ret_endWert Endkapital bei Anlage von 1 DM UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 19 ──
Beispiel
────────
program finanz03 ;
uses finanzl ;
var ZinsWe : PZinsWe ;
anfKap : real ;
j, x : integer ;
ZZ : defZinsPr ; { einzelne Zinssätze }
begin
zinsWe := New ( PZinsWe, init );
anfKap := 1000 ;
for x := 1 to zinsAnsWe do
ZZ[x] := 0.0 ;
j := 7 ; { 7 Jahre }
ZZ[1] := 5.0 ; ZZ[2] := 6.0 ; ZZ[3] := 7.5 ;
ZZ[4] := 8.0 ; ZZ[5] := 9.0 ; ZZ[6] := 10.0 ;
ZZ[7] := 10.0 ;
ZinsWe^.berechnWe ( j, ZZ, auszahlg );
writeln ;
writeln ( ' Zinsen werden ausbezahlt. ' );
writeln ( ' Rendite = ' , ZinsWe^.ret_rendite : 10 : 3 ) ;
writeln ( ' Endkapital = '
ZinsWe^.ret_endWert * anfKap : 10:2);
writeln ;
ZinsWe^.berechnWe ( j, ZZ, gutschr );
writeln ;
writeln ( ' Zinsen werden gutgeschrieben ' );
writeln ( ' Rendite = ' , ZinsWe^.ret_rendite : 10 : 3 ) ;
writeln ( ' Endkapital = '
ZinsWe^.ret_endWert * anfKap : 10:2);
writeln ;
readln ;
dispose ( ZinsWe, done );
end.
Ausgabe:
Zinsen werden ausbezahlt.
Rendite = 7.669
Endkapital = 1000.00
Zinsen werden gutgeschrieben
Rendite = 7.914
Endkapital = 1704.27 UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 20 ──
2.2.2.4 Wertpapier (defWertp)
Kurzinfo
────────
Rendite festverzinsliches Wertpapier mit jährlicher oder
halbjährlicher Zinszahlung. Berechnung nach international
gebräuchlicher Methode.
Methoden
────────
function rendWp ( kaufKurs, zinsPr : real ; zinsPer : integer ;
rueckKurs : real ; laufzMonate : integer ) : real ;
Parameter Beispiel Bedeutung
--------------------------------------------------
kaufKurs 98.75 Kurs in Prozent beim Kauf
zinsPr 6.75 Nominalzins pro Jahr
zinsPer 12 Zinsperiode NUR 6 oder 12!
rueckKurs 100 Kurs in Prozent bei Rückzahlung
laufzMon. 48 Restmonate bis Fälligkeit
Ergebnis: Rendite
Beispiel
────────
program finanz04 ;
uses finanzl ;
var Wp : PWertp ;
kauf, zins, rueck : real ;
periode , laufz : integer ;
begin
Wp := New ( PWertp, init );
kauf := 95.0 ;
zins := 8.5 ;
periode := perZahl ( j );
rueck := 100.0 ;
laufz := 48 ; { Monate Restlaufzeit }
writeln ;
writeln ( ' Wertpapierrendite = ' ,
Wp^.rendWp ( kauf, zins, periode, rueck, laufz ) : 10:3 );
writeln ;
readln ;
dispose ( Wp, done );
end.
Ausgabe:
Wertpapierrendite = 10.080 UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 21 ──
2.2.2.5 Darlehen (defDarl)
Kurzinfo
────────
Berechnet für normale Darlehen mit gleichbleibenden
Tilgungsraten den Effektivzins, die Restschuld und bei Bedarf
die Laufzeit.
Methoden
────────
procedure berechnDa ( auszPr2, rueckPr2, zinsPr2, tilgPr2 :
real ; zinsPer2, tilgPer2, lfzMonate2 : integer ) ;
Parameter Beispiel Bedeutung
--------------------------------------------------
auszPr2 94.5 Auszahlung Darlehen in Prozent
rueckPr2 100.0 Rückzahlung Darlehen in Prozent
zinsPr2 6.75 Zinssatz für Darlehen
tilgPr2 2.0 Anfangstilgung Darlehen
zinsPer2 3 Zinsperiode
tilgPer2 1 Tilgungsperiode
darf nicht größer sein als Zinsperiode
lfzMonate2 24 LaufzeitMonate
werden 0 Monate übergeben,
berechnet das Programm die Laufzeit
bis zur vollständigen Tilgung.
Ergebnis: berechnet Restschuld, Effektivzins und
eventuell die Laufzeit.
RÜCKGABE ERGEBNISSE
Function Rückgabe
---------------------------------------------------
ret_rest Restschuld in Prozent
ret_laufzMte Laufzeit in Monaten
ret_effektiv effektiver Jahreszins
Hinweis: Der effektive Jahreszins wird bei Darlehen mit
befristeter Festzinsvereinbarung als anfänglicher effektiver
Jahreszins bezeichnet (Preisangabenverordnung). UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 22 ──
Beispiel
────────
program finanz05 ;
uses finanzl ;
var Darl : PDarl ;
aus, rueck, zins, tilg : real ;
zinsPer, tilgPer, lfz : integer ;
begin
Darl := New ( PDarl, init );
aus := 98.0 ; rueck := 102 ;
zins := 8.75 ;
zinsPer := perZahl ( vj );
tilg := 2.5 ;
tilgPer := perZahl ( mtl );
lfz := 16 ; { 16 Monate }
Darl^.berechnDa ( aus, rueck, zins, tilg, zinsPer, tilgPer,
lfz );
writeln ;
writeln ( ' Restbetrag in % = ' ,
Darl^.ret_rest : 10 : 2 );
writeln ( ' Laufzeitmonate = ' ,
Darl^.ret_laufzMte : 5 );
writeln ( ' anfänglicher effektiver Jahreszins = ' ,
Darl^.ret_effektiv : 8 : 3 ) ;
writeln ;
readln ;
dispose ( Darl, done );
end.
Ausgabe:
Restbetrag in % = 98.32
Laufzeitmonate = 16
anfänglicher effektiver Jahreszins = 12.502 UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 23 ──
2.2.2.6 Sondertilgungen (defSonderTi)
Kurzinfo
────────
nimmt Sondertilgungen entgegen und gibt sie wieder zurück. Das
Object wird in das Object defTilgPl eingebunden.
Methoden
────────
procedure eingabe (jahr2, monat2 : integer ; betrag2 : real );
Parameter Beispiel Bedeutung
--------------------------------------------------
jahr2 1998 Jahr der Sondertilgung
monat2 5 Monat im Jahr der Sondertilgung
betrag2 15000 Betrag Sondertilgung in jahr2,monat2
Ergebnis: die Eingabe wird lediglich gespeichert.
RÜCKGABE ERGEBNISSE
Function Rückgabe
---------------------------------------------------
tilgDa (jahr2,
monat2 ) gibt zurück (boolean), ob zu dem
Termin (jahr2, monat2) eine
Sondertilgung vorhanden ist.
ret_tilg Betrag der Sondertilgung.
Beispiel
────────
die Anwendung des Objects zeigt das Object defTilgPl.
Für das Object defTilgPl ist
defSonderTi2 definiert,
ein array mit Objecten vom Typ defSonderTi. UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 24 ──
2.2.2.7 Tilgungsplan (defTilgPl)
Kurzinfo
────────
damit läßt sich ein Tilgungsplan ausgeben, aber auch ein
Sparplan.
Methoden
────────
procedure eingDarl ( darlDm2, zinsPr2, tilgPr2, rateDm2 :
real ; zinsPer2, tilgPer2, ausJahr2, ausMonat2 :
integer ; nullStop2 : boolean );
Parameter Beispiel Bedeutung
--------------------------------------------------
darlDm2 100000 rückzahlbarer Darlehensbetrag
zinsPr2 8.75 Zinssatz
tilgPr2 2.5 Tilgung
rateDm2 950 anstelle einer Tilgung kann eine
Rate je Ratenperiode gemeldet werden
muß mindestens für Zinsen ausreichen
zinsPer2 3 Zinsperiode
tilgPer2 1 Tilgungsperiode
darf nicht größer sein als Zinsperiode
ausJahr2 1993 Auszahlungsjahr
ausMonat2 4 Auszahlungsmonat (1..12)
nullStop2 ja Tilgungsplan beenden, wenn
Darlehen auf 0.00 ja/nein
Ergebnis: interne Variablen werden belegt.
procedure eingSonderTi ( nr, jahr, monat : integer ;
betrag : real );
** Aufruf muß NACH eingDarl erfolgen **
Parameter Beispiel Bedeutung
--------------------------------------------------
nr 1 Sondertilgung Nr. gemäß anzSonderTi
jahr 2004 Sondertilgung im Jahr x
monat 4 Sondertilgung im Monat y des Jahres x
betrag 5000 Sondertilgung in DM
Ergebnis: Eingaben werden festgehalten.
procedure schritt ;
Ergebnis:
eine Tilgungsperiode weiterrechnen und Werte summieren UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 25 ──
function faellig ( monat, periode : integer ) : boolean ;
Parameter Beispiel Bedeutung
--------------------------------------------------
monat 4 laufender Monat
periode 3 Zinsperiode, Ratenperiode oder
Periode für Verdichtung
Ergebnis: gibt zurück, ob in dem Monat periode fällig ist.
Übersicht:
periode fällige Monate
---------------------------
1=mtl jeder Monat
3=vj 3, 6, 9, 12
6=hj 6, 12
12=j 12
Der Programmierer kann damit eine Periode für die Ausgabe
von Zahlen festlegen und die Zahlen verdichten.
RÜCKGABE ERGEBNISSE
Function Rückgabe
---------------------------------------------------
ret_lfdJahr laufendes Jahr Tilgungsplan
ret_lfdMonat laufender Monat im Jahr
ret_zinsDm kapitalisierte Zinsen
der interne Zähler wird nach
Abruf auf 0.0 gestellt
ret_tilgDm bezahlte Tilgung
der interne Zähler wird nach
Abruf auf 0.0 gestellt
ret_rest Restschuld
ret_sumZins Summe aller Zinsen
ret_sumTilg Summe aller Tilgungen
ret_endeDa liefert ja, wenn Darlehen getilgt UND
nullStop2 auf ja gesetzt ist. UNIT finanzl Beschreibung
─────────────────────────────────────────────────────────── 26 ──
Beispiel
────────
program finanz06 ;
uses finanzl, printer ;
var Ti : PTilgPl ;
x : integer ;
begin
Ti := new ( PTilgPl, init );
Ti^.eingDarl ( 85000.0 , 10.0, 2.0 , 800.0 , perZahl (vj),
perZahl (mtl), 1993, 1, ja );
Ti^.eingSonderTi ( 1, 1993, 12, 12000.0 );
writeln (Lst,' Jahr Monat Zins DM Tilgung DM Restbetrag');
writeln ( Lst );
for x := 1 to 300 do begin
{ maximal 300 Tilgungen verarbeiten }
Ti^.schritt ;
if Ti^.faellig ( Ti^.ret_lfdMonat, perZahl (hj) ) or
Ti^.ret_endeDa then begin
{ nur Ausgabe der halbjährlichen Zahlen }
write ( Lst, Ti^.ret_lfdJahr : 5, ' ',
Ti^.ret_lfdMonat : 3, ' ' );
write ( Lst, Ti^.ret_zinsDm : 8:2, ' ' ,
Ti^.ret_tilgDm : 8:2 , ' ' );
writeln ( Lst, Ti^.ret_rest : 8 : 2 );
end;
if Ti^.ret_endeDa then
break ;
end;
writeln ( Lst );
writeln ( Lst, ' Summe Zinsen: ', Ti^.ret_sumZins : 10 : 2 );
writeln ( Lst, ' Summe Tilgung: ', Ti^.ret_sumTilg : 10 : 2 );
dispose ( Ti, done );
end.
Ausdruck:
Jahr Monat Zins DM Tilgung DM Restbetrag
1993 6 3506.06 4250.00 84256.06
1993 12 4158.68 17100.00 71314.74
1994 6 3503.51 5100.00 69718.25
... usw. ... UNIT finanzl Theorie
─────────────────────────────────────────────────────────── 27 ──
2.3 Theorie
2.3.1 Einmalzahlung
Zinseszins
──────────
Der Zinseszins ist quasi der Einstieg in die Finanzmathematik.
Zum Beispiel:
6 % Zins, halbjährliche Zinsperiode, 15 Monate Laufzeit
Endkapital bei 500:
Richtig--> 500 * 1.03 * 1.03 * 1.015 = 538,41
Falsch---> 500 * potenz (1.03 , 2.5) = 538,35
(Die Toolbox verwendet die function potenz zum Potenzieren.)
Sie dürfen grundsätzlich nur volle Zinsperioden potenzieren,
sonst stimmt das Ergebnis nicht.
Näherungsverfahren
──────────────────
Sehr oft muß man einen Wert suchen, der sich nur durch ein
Näherungsverfahren (Iteration) finden läßt. Die Toolbox
verwendet in den Fällen Verfahren, die sich alle gleichen.
Zur Erläuterung ein ganz einfaches Beispiel, das man auch
einfacher lösen könnte:
500 ergeben in 2 Jahren bei jährlicher Zinsgutschrfit
561,80 Zinssatz?
Die Toolbox beginnt mit 5 % und 10 % Zins und stellt die Formel
so um, daß sich das Ergebnis 0 ergibt, wenn der richtige
Zinssatz gefunden wurde.
Ergebnis 1: 500 * 1.05 * 1.05 - 561.8 = -10.55
Ergebnis 2: 500 * 1.10 * 1.10 - 561.8 = 43.20
Auswertung:
( 43.20 - -10.55 ) / ( 1.10 - 1.05 ) = 1075
1. Näherung:
43.20 / 1075 = 0.040
Um auf Ergebnis 0 zu kommen, muß man um 0.040 kürzen
1.10 - 0.040 = 1.06
Ergebnis 3: 500 * 1.06 * 1.06 - 561.80 = 0 UNIT finanzl Theorie
─────────────────────────────────────────────────────────── 28 ──
Meistens sind zwei oder drei weitere Näherungsschritte
erforderlich, bevor der gesuchte Wert gefunden ist. Es werden
dabei jeweils die beiden letzten Ergebnisse ausgewertet.
Diese Näherungsmethode läßt sich ziemlich universell einsetzen.
Damit kann man z.B. auch die Laufzeit von Darlehen berechnen.
Es hat seine mathematische Basis aus der Differentialrechnung.
2.3.2 Raten
allgemeine Ratenformel
──────────────────────
Die Ratenformel (oder Rentenformel) ist Ihnen vielleicht
bekannt. Zum Beispiel:
Rate * ( potenz ( 1.05, 10 ) - 1 ) / ( 1.05 - 1 )
= Endwert der Raten
Diese Formel werden Sie im Prinzip auch in der Toolbox finden,
allerdings müssen wir genauer vorgehen.
Endwert je Zinsperiode
──────────────────────
Anstelle einer Rate setzen wir den Wert der Rate(n) zum Ende
der Zinsperiode ein. Beispiel:
mtl. Rate 200 6 % Zins vierteljährlich
Die Raten werden in einer Zinsperiode im Schnitt verzinst:
vorschüssig: ( 3 + 1 ) / 2 = 2 Monate
nachschüssig: ( 2 + 0 ) / 2 = 1 Monat
Endwert der Raten zum Ende der Zinsperiode:
200 * 3 * ( 1 + 6 / 1200 * Monate ) = Endwert Zinsperiode
Restmonate
──────────
Wenn die Laufzeit nicht mit der Zinsperiode übereinstimmt, wird
es ziemlich kompliziert. Beispiel:
vj. Raten, hj. Zinsen, 17 Monate Laufzeit
Das Programm berechnet in dem Fall 12 Monate normal und
verzinst das Ergebnis 5 Monate (bis Laufzeitende) weiter. Die
restlichen 5 Monate werden noch einmal aufgeteilt in ganze
Ratenperioden und allerletzte Restmonate. Dafür werden dann die
Werte berechnet und addiert. UNIT finanzl Theorie
─────────────────────────────────────────────────────────── 29 ──
2.3.3 Zinssatzwechsel
Effektivzinsberechnung
──────────────────────
Die Effektivzinsberechnung geht von den effektiven Zahlungen
aus. Was wirklich empfangen oder gezahlt wurde, das ist
maßgebend. Der Effektivzins wird bei Anlagen meistens Rendite
genannt.
effektive Zahlungen
───────────────────
Beim Zinssatzwechsel mit Zinsgutschrift fallen nur 2 effektive
Zahlungen an, nämlich
eingezahlter Anlagebetrag und
zurückgezahltes Endguthaben.
Bei Zinsauszahlungen dagegen
eingezahlter Anlagebetrag,
jährliche Zinszahlungen
zurückgezahlter Anlagebetrag.
Rendite bei Zinsgutschrift
──────────────────────────
Das Endkapital und die Rendite sind einfach zu berechnen.
Beispiel bei 3 Jahren:
1.06 * 1.07 * 1.075 = Endkapital bei 1 DM
Die Kubikwurzel des Endkapitals bei 1 DM ergibt die Rendite.
Rendite bei Zinsauszahlung
──────────────────────────
Schema:
Anlagebetrag aufgezinst bis Laufzeitende
- Zinszahlungen aufgezinst bis Laufzeitende
- Rückzahlung am Laufzeitende
───────────────────────────────────────────
= 0
Aufgezinst wird mit dem Effektivzins, den wir zu berechnen
haben (Näherungsverfahren). Er ist gefunden, wenn das Ergebnis
0 ergibt. Bei solchen Berechnungen ist wichtig, daß alle
Zahlungen zum gleichen Zeitpunkt aufgezinst werden, meistens
zum Laufzeitende. UNIT finanzl Theorie
─────────────────────────────────────────────────────────── 30 ──
2.3.4 Wertpapiere
Stückzins
─────────
Der Besitzer eines festverzinslichen Wertpapiers erhält zu den
Zinsterminen die Zinsen. Wechselt zwischen zwei Zinsterminen
der Besitzer, so wird der anteilige Zins als Stückzins
verrechnet. Diese Stückzinsen erhöhen für die Renditeberechnung
den Anlagebetrag.
Im übrigen haben wir wieder die gleichen effektiven Zahlungen
wie beim Zinssatzwechsel mit Zinsauszahlung.
Internationale Rendite
──────────────────────
Die Rendite wird von der Toolbox nach einer international
gebräuchlichen Methode berechnet, bei der für die
Renditeberechnung auch Bruchteile von Zinsperioden potenziert
werden. Das ist eine absolute (internationale) Ausnahme. Bei
anderen Berechnungen ist diese Methode nicht zulässig!
2.3.5 Darlehen
Laufzeit
────────
Wird dem Programm als Laufzeit 0 Monate übergeben, so berechnet
es die Laufzeit bis zur vollständigen Tilgung. Dabei wird das
oben beschriebene Näherungsverfahren eingesetzt.
Restschuld
──────────
Kein Problem:
Rückzahlungsbetrag aufgezinst bis Laufzeitende
- Tilgungsraten aufgezinst bis Laufzeitende
─────────────────────────────────────────────────
= Restschuld am Laufzeitende
Effektivzins
────────────
Schema:
Auszahlungsbetrag aufgezinst bis Laufzeitende
- Tilgungsraten aufgezinst bis Laufzeitende
- Restschuld am Laufzeitende
────────────────────────────────────────────────
= 0
Der (effektive) Auszahlungsbetrag und die Tilgungsraten sind so
aufzuzinsen, daß sich als Ergebnis annähernd 0 ergibt. UNIT finanzl Theorie
─────────────────────────────────────────────────────────── 31 ──
Bei der Effektivzinsberechnung ist die Zinsperiode immer
jährlich. Daher kommt die Bezeichnung effektiver Jahreszins.
2.3.6 Tilgungsplan
Dieses Objekt hat mit Finanzmathematik wenig im Sinn. Es geht
hier mehr um eine gut Logik.
Wenn Sie den Nullstop nicht setzen (false), dann können Sie
damit auch einen Sparplan erstellen.
Sie sollten die Anzahl der Berechnungen auf jeden Fall
begrenzen, damit das Programm bei Fehleingaben keinen endlosen
Plan erstellt. UNIT finanzl2 Interface
─────────────────────────────────────────────────────────── 32 ──
3. UNIT Finanzl2
3.1 Interface
unit finanzl2 ;
{
*****************************
J Z - F I N A N Z M A T H E Vers. 1.0 22.1.93
eine Toolbox für Finanzmathematik in Borland Pascal
Alle Rechte bei: Karl Jenz
7302 Ostfildern 1 Horbstraße 7
*****************************
}
INTERFACE
uses finanzl ;
CONST AbgrAnzahl = 10 ;
{ Anzahl Abgrenzungsjahre bei Disagioabgrenzung }
TYPE
PUniversal = ^defUniversal ;
defUniversal = object ( defRaten )
{ das Object beachtet den Beginn der Zahlungen }
public
restMon1 : integer ;
{ Restmonate am Anfang bis zur ersten Zinsfälligkeit }
procedure null1 ; virtual ;
procedure laufzBerSpez ( monate, periode, anfang : integer ;
VAR restMonAnf, vollPer, restMon : integer );
function einmalSpez ( zinsPr : real ; zinsPer, Monate1,
restPer, Monate2 : integer ) : real ;
function restAnfWert ( zinsPr : real ; ratenPer, zinsPer,
restMte : integer ; zahlgTermin : defZahlgTerm ;
restZinsPer, restMte2 : integer ) : real ;
{ Anfangsmonate bis zur ersten Zinsperiode,
aufgezinst bis Laufzeitende }
function endkapSpez ( zinsPr : real ; ratenPer, zinsPer :
integer ; zahlgTermin : defZahlgTerm ) : real ;
{ Berechnung Endkapital aus restMon1, perioden und
restmonate
diese müssen vorher berechnet sein } UNIT finanzl2 Interface
─────────────────────────────────────────────────────────── 33 ──
{ noch defUniversal }
public
constructor init ;
destructor done ;
function ergebnisSpez ( zinsPr : real ; monate, anfang,
zinsPer : integer ) : real ;
{ Endwert Einmalbetrag mit Beachtung Zahlungsmonat }
function endWertSpez ( lfzMonate, anfang : integer ;
zinsPr : real ; ratenPer, zinsPer : integer ;
zahlgTermin : defZahlgTerm ) : real ;
{ Endwert der Rate von 1 DM nach x Monaten,
Beginn im Monat anfang (Monatsende)
Ratentermine werden beachtet, d.h. vj. nur am
Quartalsende }
end;
PGebErst = ^defGebErst ;
defGebErst = object ( defDarl )
{ Erstattung von Kreditgebühren bei Sondertilgung
Auszahlungsmonat wird beachtet }
public
darlDm : real ; { Nennbetrag Darlehen }
anfang : integer ; { Auszahlmonat im Jahr 1..12 }
rest0, rest1, rest2 : real ;
{ Restschuld ohne Sondertilgung (rest0)
vor Erstattung Gebühen und danach }
sondertMon : integer ;
{ Sondertilgung x Monate nach Auszahlung }
sondertDm : real ; { Sondertilgung Betrag }
Universal : PUniversal ; { Object im Object }
procedure null1 ; virtual ;
procedure effektivBer2 ;
function restBer2 ( darl, zinsPr2, rate2 : real ;
zinsPer2, tilgPer2 : integer ;
sonderMon : integer ; sonderDm : real ) : real ;
{ Berechnung Restschuld unter Beachtung Sondertilgung}
function sondertBer ( sonderMon : integer ;
sonderDm, zinsPr2 : real ; zinsPer2 : integer):real ;
{ Wert Sondertilgung aufgezinst bis
Laufzeitende } UNIT finanzl2 Interface
─────────────────────────────────────────────────────────── 34 ──
{ noch defGebErst }
public
constructor init ;
destructor done ;
procedure eingDarl ( auszPr2, rueckPr2, zinsPr2,
tilgPr2, darlDm2 : real ; zinsPer2, tilgPer2,
lfzMonate2, anfang2 : integer );
{ Übergabe Darlehenswerte ohne Sondertilgung }
function erstattg ( sondertMon2 : integer ;
sondertDm2 : real ) : real ;
{ Erstattung Kreditgebühren gemäß Sondertilgung }
function ret_rest0 : real ;
{ Restschuld vor Sondertilgung }
function ret_rest1 : real ;
{ Restschuld nach Sondertilgung,
ohne Erstattung Gebühren }
end;
defAbgrWerte = object
{ Hilfsobject für defGebAbr }
public
monate : integer ;
abgr, rest : real ;
procedure null1 ;
procedure eing ( monate2 : integer ; abgr2, rest2 : real );
{ Rückgaben }
function ret_mte : integer ;
function ret_abgr : real ;
function ret_rest : real ;
end;
defAbgrWerte2 = array[1..AbgrAnzahl] of defAbgrWerte ; UNIT finanzl2 Interface
─────────────────────────────────────────────────────────── 35 ──
PGebAbgr = ^defGebAbgr ;
defGebAbgr = object ( defGebErst )
{ Abgrenzung von Kreditgebühren
auf Laufzeit Darlehen bzw. Festzinsvereinbarung }
public
AbgrWerte : defAbgrWerte2 ;
procedure abgrenzen ;
public
constructor init ;
destructor done ;
procedure berechng ( auszPr2, rueckPr2, zinsPr2, tilgPr2,
darlDm2 : real ; zinsPer2, tilgPer2, lfzMonate2,
anfang2 : integer );
{ Übergabe der Werte und Berechnung der Abgrenzung }
{ Rückgaben je Abgrenzungsjahr }
function ret_mte ( jahr : integer ) : integer ;
function ret_abgr ( jahr : integer ) : real ;
function ret_rest ( jahr : integer ) : real ;
end;
PBarWert = ^defBarWert ;
defBarWert = object ( defRaten )
{ Berechnung Barwert }
public
rate, zins, barwert : real ;
ratenPeriode, zinsPeriode, anlaufMte : integer ;
{ anlaufMte = AnlaufMonate vor erster Rate }
anz, jahre, monate : integer ; { anz = Anzahl Raten }
{ Gesamtlaufzeit in Jahren und Restmonaten }
procedure null1 ; virtual ;
public
{ Schnittstelle zum Programm }
constructor init ;
destructor done ;
procedure berechng ( rate2, zins2 : real ; anz2,
ratenPer, zinsPer, anlauf : integer );
{ anlauf = AnlaufMonate siehe oben }
function ret_BarWert : real ;
function ret_jahre : integer ;
function ret_Restmon : integer ;
end; UNIT finanzl2 Interface
─────────────────────────────────────────────────────────── 36 ──
PSonderSp = ^defSonderSp ;
defSonderSp = object ( defRaten )
{ Sondersparen mit Bonus }
public
rate, zins, zinsBonus, einzBonus : real ;
anz, restMon : integer ;
einzDm, zinsDm, bonusDm, gesamtDm, rendite : real ;
jahre, monate : integer ; { Laufzeit }
restM1, restM2, perioden2, restmonate2 : integer ;
{ restM1 = letzte Ratenperioden -keine ganzes Jahr-
restM2 = von letzter Ratenperiode bis zum Jahresende
perioden2 = Restperioden (Jahre) ohne Raten
restmonate2 = letzte Restmonate ohne Raten
}
procedure null1 ; virtual ;
function gesamtBer ( zinsPr : real ;
zinsBon, einzBon : real ) : real ;
function rendBer : real ;
{ Berechnung Rendite }
public
constructor init ;
destructor done ;
procedure berechng ( rate2 , zins2, zinsBonus2, einzBonus2 :
real ;
anz2, restMon2 : integer );
function ret_rendite : real ;
function ret_einzDm : real ;
function ret_zinsDm : real ;
function ret_bonusDm : real ;
function ret_gesDm : real ;
function ret_jahre : integer ;
function ret_monate : integer ;
end; UNIT finanzl2 Interface
─────────────────────────────────────────────────────────── 37 ──
PRatenKr = ^defRatenKr ; { Ratenkredite }
defRatenKr = object ( defRaten )
public
darlDm, zinsPm, gebPr : real ;
gebDm, zinsDm, gesDm : real ;
rate0, rate1, rate2 : real ;
effektiv, erstattg : real ;
lfzMonate, tilgMon : integer ;
{ tilgMon = Monat Resttilgung }
procedure null1 ; virtual ;
procedure lfzMonBer ;
procedure effektivBer ;
procedure erstattgBer ;
public
constructor init ;
destructor done ;
procedure eingabe ( darlDm2, gebPr2, zinsPm2, rate02 : real ;
lfzMon2, tilgMon2 : integer );
function ret_gebDm : real ;
function ret_zinsDm : real ;
function ret_gesDm : real ;
function ret_rate1 : real ; { erste Tilgungsrate }
function ret_rate2 : real ; { Restraten }
function ret_lfz : integer ; { Laufzeit in Monaten }
function ret_effektiv : real ;
function ret_erstattg : real ;
end; UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 38 ──
3.2 Beschreibung
Die Unit finanzl2 verwendet die Unit finanzl. Die Ausführungen
zur Beschreibung bei finanzl gelten daher entsprechend. Für
diese Unit gilt wie für die Unit finanzl, daß die Ratenperiode
nie größer sein darf als die Zinsperiode.
3.2.1 Allgemeine Typen
Die Unit finanzl2 definiert keine eigenen allgemeinen Typen,
sondern verwendet diese von finanzl.
3.2.2 Objekte
3.2.2.1 Universalobjekt (defUniversal)
Kurzinfo
────────
Verzinsung von Einmalzahlungen und Raten, wobei nicht
automatisch vom Zeitpunkt 0 ausgegangen wird. Es kann ein
Anfangsmonat (1..12) gemeldet werden.
Methoden
────────
function ergebnisSpez ( zinsPr : real ; monate, anfang,
zinsPer : integer ) : real ;
Parameter Beispiel Bedeutung
--------------------------------------------------
zinsPr 6.5 Zinssatz
monate 33 Laufzeit in Monaten
anfang 4 Beginn Verzinsung im Monat (4=30.4.)
zinsPer 6 Zinsperiode
Ergebnis: Endkapital bei 1 DM Anfangskapital
function endWertSpez ( lfzMonate, anfang : integer ;
zinsPr : real ; ratenPer, zinsPer : integer ;
zahlgTermin : defZahlgTerm ) : real ;
Parameter Beispiel Bedeutung
--------------------------------------------------
lfzMonate 33 33 Monate Gesamtlaufzeit
anfang 4 Beginn im Monat (1..12)
zinsPr 6.5 Zinssatz
ratenPer 3 Ratenperiode
zinsPer 6 Zinsperiode
zahlgTerm. nachsch vorschüssige oder nachschüssige
Ratenzahlung
Ergebnis: Endkapital bei Rate von 1 DM
Ratentermine werden beachtet, z.B. am 30.4. ist keine
vj. Rate fällig, erst wieder am 30.6. UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 39 ──
Beispiel
────────
program finanz07 ;
uses finanzl, finanzl2 ;
var Universal : PUniversal ;
kap0, rate, zinsPr : real ;
lfz, anfang, zinsPer, ratenPer : integer ;
erg1, erg2 : real ;
Termin : defZahlgTerm ;
begin
Universal := New ( PUniversal, init );
kap0 := 1675 ; rate := 50 ;
zinsPr := 12.5 ;
lfz := 13 ; anfang := 1 ;
zinsPer := 6 ; ratenPer := 3 ;
Termin := nachsch ;
erg1 := Universal^.ergebnisSpez ( zinsPr, lfz, anfang,
zinsPer ) * kap0 ;
erg2 := Universal^.endWertSpez ( lfz, anfang, zinsPr,
ratenPer, zinsPer, Termin ) * rate ;
writeln ;
writeln ( ' Ergebnis 1 = ' , erg1 : 10 : 3 );
writeln ( ' Ergebnis 2 = ' , erg2 : 10 : 3 );
writeln ;
readln ;
dispose ( Universal, done ) ;
end.
Ausgabe:
Ergebnis 1 = 1911.387
Ergebnis 2 = 213.837 UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 40 ──
3.2.2.2 Gebührenerstattung (defGebErst)
Kurzinfo
────────
Erfolgen bei Darlehen Sondertilgungen, so kann ein Anspruch auf
teilweise Rückerstattung der Kreditgebühren bestehen.
Methoden
────────
function eingDarl ( auszPr2, rueckPr2, zinsPr2,
tilgPr2, darlDm2 : real ; zinsPer2, tilgPer2,
lfzMonate2, anfang2 : integer ) ;
Parameter Beispiel Bedeutung
--------------------------------------------------
auszPr2 94.5 Auszahlung in %
rueckPr2 100 Rückzahlung in %
zinsPr2 8.5 Zinssatz
tilgPr2 2.5 Tilgung in %
Zins und Tilgung ergeben Annuität
darlDm2 100000 Kreditbetrag
zinsPer2 3 Zinsperiode
tilgPer2 1 Tilgungsperiode
lfzMonate2 36 muß gemeldet werden, sonst ergibt
Erstattung keinen Sinn
anfang 4 Auszahlungsmonat
Ergebnis: Werte werden im Objekt gespeichert.
function erstattg ( sondertMon2 : integer ;
sondertDm2 : real ) : real ;
Parameter Beispiel Bedeutung
--------------------------------------------------
sondertMon2
22 x Monate nach Auszahlung erfolgt
Sondertilgung
sondertDm2 15000 Betrag der Sondertilgung
Ergebnis: Erstattungsbetrag Gebühren
RÜCKGABE ERGEBNISSE
Function Rückgabe
---------------------------------------------------
ret_rest0 Restschuld VOR Sondertilgung
rest_rest1 Restschuld NACH Sondertilgung UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 41 ──
Beispiel
────────
program finanz08 ;
uses finanzl, finanzl2 ;
var GebErst : PGebErst ;
darl, aus, rueck, zins, tilg : real ;
zinsPer, tilgPer, ausMonat : integer ;
lfz, tilgMon : integer ;
tilgDm, erst : real ;
begin
GebErst := New ( PGebErst, init );
darl := 100000.0 ;
aus := 95 ; rueck := 100.0 ;
zins := 8.5 ; tilg := 5.0 ;
zinsPer := perZahl (vj) ; tilgPer := perZahl (mtl);
lfz := 28 ; ausMonat := 2 ;
tilgMon := 22 ; tilgDm := 15000.0 ;
GebErst^.eingDarl ( aus,rueck,zins,tilg,darl,zinsPer,
tilgPer,lfz,ausMonat );
erst := GebErst^.erstattg ( tilgMon, tilgDm );
writeln ;
writeln ( ' Restschuld ohne Sondertilgung = ' ,
GebErst^.ret_rest0 : 12 : 2 );
writeln ( ' Neue Restschuld = ' ,
GebErst^.ret_rest1 : 12 : 2 );
writeln ( ' Erstattung Gebühren = ' ,
erst : 10 : 2 ) ;
writeln ( ' Effektivzins = ' ,
GebErst^.effektiv : 8 : 3 );
writeln ;
readln ;
dispose ( GebErst, done );
end.
Ausgabe:
Restschuld ohne Sondertilg = 87006.94
Neue Restschuld = 71362.66
Erstattung Gebühren = 202.14
Effektivzins = 11.131 UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 42 ──
3.2.2.3 Gebührenabgrenzung (defGebAbgr)
Kurzinfo
────────
Kreditgebühren werden zinsgerecht auf die Laufzeit der
Festzinsvereinbarung aufgeteilt.
Das Objekt verwendet auch das Objekt defAbgrWerte.
Methoden
────────
procedure berechng ( auszPr2, rueckPr2, zinsPr2,
tilgPr2, darlDm2 : real ; zinsPer2, tilgPer2,
lfzMonate2, anfang2 : integer );
Parameter Beispiel Bedeutung
--------------------------------------------------
auszPr2 93.5 Auszahlung Darlehen in %
rueckPr2 100 Rückzahlung in %
zinsPr2 8.75 Zinssatz
tilgPr2 2.5 Tilgung in %
darlDm2 100000 Darlehensbetrag
zinsPer2 3 Zinsperiode
tilgPer2 1 Tilgungsperiode
lfzMonate2 36 Laufzeit der Festzinsvereinbarung
in Monaten
anfang2 4 Auszahlungsmonat (1-12)
Ergebnis: Interne Berechnung
RÜCKGABE ERGEBNISSE
Function Rückgabe
---------------------------------------------------
ret_mte (jahr : integer )
Zinsmonate im Abgrenzungsjahr
ret_abgr ( jahr : integer )
Abgrenzungsbetrag für Jahr
ret_rest ( jahr : integer )
Restbetrag für Jahr UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 43 ──
Beispiel
────────
program finanz09 ;
uses finanzl, finanzl2, printer ;
var GebAbgr : PGebAbgr ;
darl, aus, rueck, zins, tilg : real ;
zinsPer, tilgPer, ausMonat : integer ;
lfz, x : integer ;
begin
GebAbgr := New ( PGebAbgr, init );
darl := 100000 ;
aus := 100.0 ; rueck := 103.0 ;
zins := 8.5 ; tilg := 5.0 ;
zinsPer := perZahl (vj) ; tilgPer := perZahl (mtl );
lfz := 60 ; { maximal 120 Monate }
ausMonat := 4 ;
GebAbgr^.berechng ( aus, rueck, zins, tilg, darl, zinsPer,
tilgPer, lfz, ausMonat );
writeln ( Lst, ' Jahr Monate Abgrenzung Restbetrag ' );
for x := 1 to ( lfz DIV 12 ) + 1 do begin
write ( Lst, x : 4, ' ' , GebAbgr^.ret_mte ( x ) : 4, ' ');
write ( Lst, GebAbgr^.ret_abgr ( x ) : 10 : 2 , ' ' );
writeln ( Lst, GebAbgr^.ret_rest (x) : 10 : 2 ) ;
end;
writeln ( Lst );
writeln ( Lst, ' Effektivzinssatz = ' ,
GebAbgr^.ret_effektiv : 10 : 3 , ' % ' );
write ( Lst, #12, #13 );
dispose ( GebAbgr, done );
end.
Ausdruck:
Jahr Monate Abgrenzung Restbetrag
1 8 394.27 2605.73
2 12 597.31 2008.42
... usw. ...
6 4 199.54 0.00
Effektivzinssatz = 9.353 % UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 44 ──
3.2.2.4 Barwert (defBarWert)
Kurzinfo
────────
Abzinsung von Einzelforderungen und Ratenforderungen.
Methoden
────────
procedure berechng ( rate2, zins2 : real ; anz ,
ratenPer, zinsPer, anlauf : integer );
Parameter Beispiel Bedeutung
--------------------------------------------------
rate2 1500 Rate oder Einzelbetrag
zins2 6.5 Zinssatz für Abzinsung
anz 45 Anzahl Raten
1=Einzelbetrag
ratenPer 1 Ratenperiode
zinsPer 12 Zinsperiode, normal 12
anlauf 0 zusätzliche Abzinsmonate
bis zur Fälligkeit 1. Rate
Ergebnis: interne Berechnung
RÜCKGABE ERGEBNISSE
Function Rückgabe
---------------------------------------------------
ret_BarWert gibt Barwert zurück
ret_jahre Laufzeit in Jahren und
ret_Restmon Restmonate
Hinweis: Der Barwert wird in der Praxis meistens auf volle
hundert DM gerundet. UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 45 ──
Beispiel
────────
program finanz10 ;
uses finanzl, finanzl2 ;
var BarWert : PBarWert ;
rate, zinsPr, bar : real ;
ratenPer, zinsPer, anlauf, anzahl : integer ;
begin
BarWert := New ( PBarWert, init );
rate := 10000.0 ; zinsPr := 6.5 ;
ratenPer := perZahl (mtl ); zinsPer := perZahl (j);
anlauf := 76 ; anzahl := 1 ;
BarWert^.berechng ( rate, zinsPr, anzahl, ratenPer,
zinsPer, anlauf );
writeln ;
writeln ( ' Barwert = ' , BarWert^.ret_BarWert :10:2);
writeln ( ' Jahre = ' , BarWert^.ret_jahre : 4 );
writeln ( ' Restmonate = ' , BarWert.ret_Restmon : 3 );
writeln ;
readln ;
dispose ( BarWert, done );
end.
Ausgabe:
Barwert = 6708.00
Jahre = 6
Restmonate = 4 UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 46 ──
3.2.2.6 Sondersparen (defSonderSp)
Kurzinfo
────────
Sparverträge mit Zinsbonus oder Einzahlungsbonus.
Methoden
────────
berechng ( rate2, zins2, zinsBonus2, einzBonus2, anz2,
restMon2 ) ;
Parameter Beispiel Bedeutung
--------------------------------------------------
rate2 50 monatliche Sparrate
zins2 5.5 Sparzins
zinsBonus2 0 Bonus auf Sparzinsen
einzBonus2 10 Bonus auf Einzahlungen
anz2 72 Anzahl Sparraten
restMon2 12 Sperrfrist nach Einzahlungen
Ergebnis: interne Berechnung
RÜCKGABE ERGEBNISSE
Function Rückgabe
---------------------------------------------------
ret_rendite Rendite Sparvertrag
ret_einzDm Summe Einzahlungen
ret_zinsDM Summe Zinsen
ret_bonusDM Bonusbetrag
ret_gesDm Endguthaben insgesamt
ret_jahre Laufzeit in Jahren und
ret_monate Restmonate
Hinweis: In der Praxis wird nur entweder ein Zinsbonus ODER ein
Einzahlungsbonus vergütet. UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 47 ──
Beispiel
────────
program finanz11 ;
uses finanzl, finanzl2 ;
var SonderSp : PSonderSp ;
rate, zinsPr, zinsBonus, einzBonus : real ;
anzahl, restMonate : integer ;
begin
SonderSp := New ( PSonderSp, init );
rate := 50.0 ; zinsPr := 6 ; zinsBonus := 0 ;
einzBonus := 10 ;
anzahl := 70 ; restMonate := 21 ;
SonderSp^.berechng ( rate, zinsPr, zinsBonus, einzBonus,
anzahl, restMonate );
writeln ;
writeln ( ' Einzahlungen = ' ,
SonderSp^.ret_einzDm : 10 : 2 );
writeln ( ' Zinsen = ' , SonderSp^.ret_zinsDm : 10 : 2 );
writeln ( ' Bonus = ' , SonderSp^.ret_bonusDm : 10:2 );
writeln ( ' Gesamt = ' , SonderSp^.ret_gesDm : 10 : 2 );
writeln ( ' Rendite = ' , SonderSp^.ret_rendite :7:3);
writeln ( ' Laufzeit Jahre = ', SonderSp^.ret_jahre : 3 );
writeln ( ' Restmonate = ', SonderSp^.ret_monate :3);
writeln ;
readln ;
dispose ( SonderSp, done );
end.
Ausgabe:
Einzahlungen = 3500.00
Zinsen = 1130.26
Bonus = 350.00
Gesamt = 4980.26
Rendite = 7.581
Laufzeit Jahre = 7
Restmonate = 7 UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 48 ──
3.2.2.6 Ratenkredit (defRatenKr)
Kurzinfo
────────
Ratenkredite mit Zins p.M.
Methoden
────────
eingabe ( darlDm2, gebPr2, zinsPm2, rate02 : real ;
lfzMon2, tilgMon2 : integer ) ;
Parameter Beispiel Bedeutung
--------------------------------------------------
darlDm2 2000 Kreditbetrag
gebPr2 2 Gebühren in %
zinsPm2 0.4 Zins p.M.
rate02 100 monatlicher Ratenbetrag ODER
lfzMon2 0 Laufzeit in Monaten
nur Rate oder Laufzeit melden
tilgMon2 0 bei vorzeitiger Gesamttilgung:
Tilgung x Monate nach Auszahlung
Ergebnis: interne Berechnung
RÜCKGABE ERGEBNISSE
Function Rückgabe
---------------------------------------------------
ret_gebDm Gebühren in DM
ret_zinsDm Kreditzinsen in DM
ret_gesDm Gesamtschuld
ret_rate1 1. monatliche Kreditrate
ret_rate2 monatliche Folgeraten
ret_lfz Laufzeit in Monaten
ret_effektiv effektiver Jahreszins
ret_erstattg Erstattungsbetrag bei
vorzeitiger Gesamttilgung
Hinweis: Vom Programm wird berücksichtigt, daß die erste
Kreditrate nicht größer sein darf als die Folgeraten. UNIT finanzl2 Beschreibung
─────────────────────────────────────────────────────────── 49 ──
Beispiel
────────
program finanz12 ;
uses finanzl, finanzl2 ;
var RatenKr : PRatenKr ;
darl, zins, geb, rate : real ;
lfz, tilgMonat : integer ;
begin
RatenKr := New ( PRatenKr, init );
darl := 2000 ; zins := 0.4 ; geb := 2 ;
rate := 100 ; lfz := 0 ; tilgMonat := 15 ;
RatenKr^.eingabe ( darl, geb, zins, raten, lfz, tilgMonat );
writeln ;
writeln ( ' Kreditbetrag ' , darl : 10 : 2 );
writeln ( ' Gebühren ' ,
RatenKr^.ret_gebDm : 10 : 2 );
writeln ( ' Zinsen ' ,
RatenKr^.ret_zinsDm : 10 : 2 );
writeln ( ' Gesamtbetrag ' ,
RatenKr^.ret_gesDm : 10 : 2 );
writeln ( ' Laufzeitmonate ' ,
RatenKr^.ret_lfz : 5 );
writeln ( ' erste Rate ' ,
RatenKr^.ret_rate1 : 10 : 2 );
writeln ( ' weitere Raten ' ,
RatenKr^.ret_rate2 : 10 : 2 );
writeln ( ' effektiver Jahreszins ' ,
RatenKr^.ret_effektiv : 7 : 3 ) ;
if ( tilgMonat > 0 ) then
writeln ( ' Rückerstattung ' ,
RatenKr^.ret_erstattg : 10 : 2 );
writeln ;
readln ;
dispose ( RatenKr, done );
end.
Ausgabe:
Kreditbetrag 2000.00
Gebühren 40.00
Zinsen 176.00
Gesamtbetrag 2216.00
Laufzeitmonate 22
erste Rate 100.67
weitere Raten 100.73
effektiver Jahreszins 11.569
Rückerstattung 23.90 UNIT finanzl2 Theorie
─────────────────────────────────────────────────────────── 50 ──
3.3 Theorie
3.3.1 Universalobjekt
Anfangsmonat
────────────
Im Normalfall beginnen finanzmathematische Berechnungen zum
Zeitpunkt 0 (=30.12.). Dieses Objekt bietet die Möglichkeit,
den wirklichen Beginn der Zahlungen zu beachten. Auf diese
Weise kann eine Zinskapitalisierung früher fällig sein.
Bei Raten sind die Ratenperioden zwingend. Wenn Sie zum
Beispiel bei vj. Raten als Anfang den Monat 4 (=30.April)
melden, so wird die erste Rate im Monat 6 (30.6.) eingesetzt.
Das reichlich komplizierte Objekt gibt für sich alleine keinen
rechten Sinn. Es wird bei anderen Objekten im Hintergrund
gebraucht.
3.3.2 Gebührenerstattung
Um die Genauigkeit zu erhöhen, geht man vom wirklichen
Auszahlungsmonat aus. Dafür wird das obige Objekt verwendet.
Des weiteren wird die Zinsperiode auch für die
Effektivzinsberechnung übernommen. Dieser Effektivzins ist kein
effektiver Jahreszins im Sinne der Preisangabenverordnung.
Das Programm geht davon aus, daß die Erstattung am Ende der
Festzinsvereinbarung vergütet wird.
Mehrere Sondertilgungen können nicht seperat abgerechnet
werden. Vielmehr muß in dem Fall ein Objekt abgeleitet werden,
das mehrere Sondertilgungen entgegennimmt.
3.3.3 Gebührenabgrenzung
Der Rechenvorgang entspricht weitgehend dem bei der
Gebührenerstattung. Der jährliche Gebührenanteil ergibt sich
aus der Differenz zwischen dem jährlichen Effektivzins in DM
und dem Darlehenszins in DM. UNIT finanzl2 Theorie
─────────────────────────────────────────────────────────── 51 ──
3.3.4 Barwert
Raten werden bis zum Laufzeitende aufgezinst und von dort zum
gewünschten Zeitpunkt abgezinst.
Das Programm geht bei Raten auch dann vom Zeitpunkt 0 aus, wenn
Anlaufmonate vorhanden sind.
3.3.5 Sondersparen
Bei der Berechnung des Endguthabens mit Bonus hat die Toolbox
zu beachten, daß Zinsen auf jeden Fall nur jährlich
kapitalisiert werden. Dies ist mit einigem Programmieraufwand
verbunden.
Für das Endguthaben ist der Zinssatz (=Rendite) zu finden, der
OHNE Bonus das gleiche Guthaben erbringt.
3.3.6 Ratenkredit
Die Berechnung entspricht dem Objekt Darlehen, ist aber
einfacher.
Die Erstattung bei vorzeitiger Gesamttilgung ergibt sich
einfach aus
Restschuld auf Darlehenskonto
- Restschuld gemäß Effektivzinsberechnung
────────────────────────────────────────
= Erstattungsbetrag
Wobei die Restschulden zum Monat der Gesamttilgung zu berechnen
sind. JZ-Finanzmathe Inhalt
─────────────────────────────────────────────────────────── 2 ──
Inhaltsverzeichnis
1. Überblick 3
1.1 Übersicht 3
1.2 Bestellung 3
1.3 Rechte 3
1.4 Haftung 4
1.5 Installation 4
1.6 eingeschränkte Version 4
1.7 Beispielprogramm 4
2. UNIT Finanzl 5
2.1 Interface 5
2.2 Beschreibung 12
2.2.1 Allgemeine Typen 12
2.2.2 Objekte 14
2.2.2.1 Einmalzahlung (defEinmal) 14
2.2.2.2 Raten (defRaten) 16
2.2.2.3 Zinssatzwechsel (defZinsWe) 18
2.2.2.4 Wertpapier (defWertp) 20
2.2.2.5 Darlehen (defDarl) 21
2.2.2.6 Sondertilgungen (defSonderTi) 23
2.2.2.7 Tilgungsplan (defTilgPl) 24
2.3 Theorie 27
2.3.1 Einmalzahlung 27
2.3.2 Raten 28
2.3.3 Zinssatzwechsel 29
2.3.4 Wertpapiere 30
2.3.5 Darlehen 30
2.3.6 Tilgungsplan 31
3. UNIT Finanzl2 32
3.1 Interface 32
3.2 Beschreibung 38
3.2.1 Allgemeine Typen 38
3.2.2 Objekte 38
3.2.2.1 Universalobjekt (defUniversal) 38
3.2.2.2 Gebührenerstattung (defGebErst) 40
3.2.2.3 Gebührenabgrenzung (defGebAbgr) 42
3.2.2.4 Barwert (defBarWert) 44
3.2.2.6 Sondersparen (defSonderSp) 46
3.2.2.6 Ratenkredit (defRatenKr) 48
3.3 Theorie 50
3.3.1 Universalobjekt 50
3.3.2 Gebührenerstattung 50
3.3.3 Gebührenabgrenzung 50
3.3.4 Barwert 51
3.3.5 Sondersparen 51
3.3.6 Ratenkredit 51