Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 14.03.2006, 23:20 Titel: Hilfee.. Zinseszins-Rechnung |
|
|
Ich muss für jemanden ein Programm erstellen das die Zinsen berechnet; und zwar einfach bis zu 30 Tagen und danach mit dem Zinseszins.
Für die Zinseszins-Formel habe ich folgendes verwendet:
input "Anfangskapital "; K
input "Zinssatz"; p
input "Laufzeit in Jahren "; n
90: L = K * ( 1 + ( p / 100 ) )*n
print "Zinseszins"; L ...(also Zinsen mit Zinseszins+Kapital)
Was ist daran falsch? Das Resultat wird stets zu hoch!
Anmerkung; ich sollte natürlich nicht in Jahren rechnen sondern in Monaten, damit werde ich mich befassen wenn die Formel funktioniert.
Vielen Dank |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 14.03.2006, 23:51 Titel: |
|
|
Hi,
du multiplizierst K * n also Kapital mal Jahre
Besser machst du hier eine FOR .. NEXT schleife.
Code: |
Dim As Double p,K
Dim As Integer n,i
input "Anfangskapital "; K
input "Zinssatz "; p
input "Laufzeit in Jahren "; n
If n > 0 Then
For i = 1 to n
K = K * ( 1 + ( p / 100 ) )
Next
End If
print "Zinseszins = "; K
|
_________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 15.03.2006, 00:36 Titel: |
|
|
zinsrechnung geht bisschen anders als k*p*t
Code: | kapital=100 '€ oder was auch immer
zinsen=2 '% pro jahr
laufzeit=5 'Jahre
endkapital=kapital*(1+zinsen)^laufzeit |
_________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 15.03.2006, 07:47 Titel: Super! |
|
|
Vielen Dank!  |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 17.03.2006, 19:41 Titel: |
|
|
Vorsicht bei MisterD's Beispiel; in seinem Code betragen die Zinsen 200% Wie du sicher weißt, musst du sie zuerst durch 100 teilen. Richtig muss es also lauten:
Code: | kapital=100 '€ oder was auch immer
zinsen=2 '% pro jahr
laufzeit=5 'Jahre
endkapital = kapital * (1! + CSng(zinsen / 100) ) ^ laufzeit |
Ob das CSng nötig ist, weiß ich nicht mit sicherheit, allerdings solltest du es verwenden, damit sichergestellt ist, dass freeBASIC auch die Nachkommastellen der Klammer nicht unter den Tisch fallen lässt. Sonst kann es sein, dass du feststellst, dass endkapital = kapital
Have a nice day
Ciao _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 18.03.2006, 03:52 Titel: |
|
|
dsa csng kannste dir sparen, wenn du \ statt / nehmen würdest gäbe es keine nachkommastellen und außerdem würden die, wenn sie denn nicht da wären, durch csng nicht dazuerfunden.. von daher wärs eh egal, was einmal weg ist kommt nich wieder  _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 18.03.2006, 18:49 Titel: |
|
|
So würde ich normal auch denken, aber ich habe mich (damals noch zu QB-Zeiten) einmal sehr gewundert, warum eine Berechnung immer ein falsches Ergebnis brachte. Sie hatte ähnliche Form wie hier. Nach einiger Zeit dann habe ich herausgefunden, dass QB auch bei Verwendung von / manchmal INTEGER zurückgibt, wenn nicht alle Variablen des Terms SINGLE sind. (Möglicherweise ist das erst durch DEFINT zustande gekommen)
Seitdem wandle ich sicherheitshalber erst mal alles nach SINGLE/DOUBLE um, oder prüfe zumindest, ob es nicht doch notwendig ist.
Und wenn man erst mal so ne Gewohnheit hat, ist es schwer, die wieder loszubringen, auch wenn FB jetzt schon über ein Jahr alt ist  _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 20.03.2006, 12:17 Titel: Perfekt |
|
|
Hallo,
vielen Dank! Mit Single/Double geht es ohne Probleme. Von diesen Befehlen wusste ich bis jetzt nichts Aber jetzt funktioniert es.
Danke |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 27.03.2006, 10:34 Titel: Problem ? |
|
|
Der Kunde prüfte das Programm und schrieb, das Resultat stimme nicht; eigentlich leuchtet mir ein, es solte ja ab 30 Tagen den Zinseszins berechnen. Bei einem Jahr und 1000.- und 10% zeigt es 1100 an. Eigentlich ja nur 10% davon, mit einfachem Zins. Allerdings habe ich im Internet gelesen mit einfachem Zins braucht es bei 10% 10 Jahre um das Anfangskapital zu verdoppeln und bei Zinseszins 7 Jahre und 100 Tage. Und das macht das Programm auch, wenn ich 7 Jahe, 3 Monate, 10 Tage eingebe verdoppelt sich das Kapital beinahe, also ein richtiges Resultat. Was ist daran falsch? Oder stimmen die 1100.- nach einem Jahr mit 10% doch?
Danke
Code: |
1:input "Anfangsdatum Jahr: "; D
input "Monat: "; E
input "Tag: ";F
input "Enddatum Jahr: "; A
input "Monat: "; B
input "Tag: "; C
dim G
dim H
dim I
dim u
dim J
W=360
R=30
asm
mov eax, [A]
sub eax, [D]
mov edx, eax
mov eax, [B]
sub eax, [E]
mov ecx, eax
mov eax, [C]
sub eax, [F]
push eax
imul edx, [W]
imul ecx, [R]
mov [G], edx
mov [H], ecx
pop eax
mov [I], eax
mov eax, [I]
add eax, [G]
add eax, [H]
mov [u], eax
end asm
dim as double n
dim as double K
dim as double p
dim as double Z
dim as single L
dim as single M
n=u/360
input "Anfangskapital "; K
input "Zinssatz (Jahr)"; p
print " "
print " Laufzeit in Jahren: ";n; " in Tagen: "; u
Z=(K*p*n)/100
if u>30 goto 90
print "Zins"; Z; " Endkapital "; K+Z
goto 120
90: L = K * ( 1 + ( p / 100 ) )^n
M=L-K
print "Zins (mit Zinseszins: "; M; " Endkapital (mit Zinseszins)"; L
120:print " "
print " "
beep
input "i fuer Information, n fuer neue Berechnung, b zum beenden "; v$
if v$="i" goto 200
if v$="n" goto 130
if v$="b" goto 500
130: cls
131: beep
132: goto 1
200: cls
print "Informationen"
print " "
print "Programm zur Berechnung des Zinses/Zinseszinses. Grundlage ist die Formel"
print "Z=(K*p*n)/100 bei einer Laufzeit unter 30 Tagen"
print" und K1 = K * ( 1 + ( p / 100 ) )n bei einer Laufzeit ab 30 Tagen"
print "Die Berechnung der Tage erfolgt durch abziehen und berechnen des Totals"
print "der Tage und anschliessend des Jahres. 30 Tage/Monat, 360 Tage/Jahr"
print " "
print "Nach jeder Eingabe ist ENTER zu druecken. Es muss immer eine Eingabe"
print "erfolgen; bei leeeren Feldern rechnet das Programm willkuerlich."
print "Buchstaben fuer die Steuerung sind wie vorgegeben (klein) einzugeben und"
print "ENTER zu druecken."
print "Achtung; der Benutzer/die Benutzerin traegt die Verantwortung fuer die "
print" zulassung dieser Formeln/dieses Programmes fuer den entsprechenden Zweck"
print " "
print "C. M. Obrecht, Reben Studio&Aufnahmemedien C. M. Obrecht, "
print "www.rhapsodyonline.de.vu c.m.obrecht@bluewin.ch FAX 079 770 10 29, "
print "Telex 041 210 639"
print "Besuchen Sie meine Homepage"
201: goto 120
500: print "Ende"
501: sleep 300
502:beep
503: Declare Function MessageBox Lib "user32" Alias "MessageBoxA" _
(ByVal hWnd As Integer, ByVal lpText As String, _
ByVal lpCaption As String, ByVal wType As Integer) As Integer
Const fbOkOnly = 0 'Nur die Schaltfläche OK anzeigen
Const fbOkCancel = 1 'Schaltflächen OK und Abbrechen anzeigen
Const fbAbortRetryIgnore = 2 'Abbruch, Wiederholen und Ignorieren
Const fbYesNoCancel = 3 'Ja, Nein und Abbrechen
Const fbYesNo = 4 'Schaltflächen Ja und Nein
Const fbRetryCancel = 5 'Schaltflächen Wiederholen und Abbrechen
Const fbCritical = 16 'Stop-Symbol
Const fbQuestion = 32 'Fragezeichen-Symbol
Const fbExclamation = 48 'Ausrufezeichen-Symbol
Const fbInformation = 64 'Information-Symbol
Dim s As Integer
s = MessageBox (me.hWnd, "© C. M. Obrecht; Reben Studio&Aufnehmemedien C.M.Obrecht, www.rhapsodyonline.de.vu Für weitere Informationen wählen Sie die Information im Programm. Für die zugelassene Verwendung der Resultate/Formeln/dieses Programmes für den entsprechenden Zweck trägt der Benutzer/die Benutzerin Verantwortung. Vielen Dank!", "Programmende",fbInformation)
End
|
|
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.03.2006, 11:43 Titel: |
|
|
ähm
du hast 1000 Geld. Nach einem Jahr sind das dann 10% mehr. 10% von 1000 sind 1000*0.1=100, das zusammengezählt ergibt dann 1100. Wo is dein Problem? _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 27.03.2006, 14:17 Titel: Das Problem... |
|
|
Hallo
Das leuchtet mir ein. Allerdings geht es hier um eine Rechnung mit Zinseszins... Meiner Meinung nach funktioniert das Programm schon richtig doch die Person, für die es bestimmt ist meint es müsse doch (wegen dem Zinseszins) mehr geben, 100 mehr sei bloss der einfache Zins. |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 27.03.2006, 17:17 Titel: |
|
|
nein weil der zinseszins auch nach jahresrythmus abgerechnet wird. Erst am Ende des Jahres werden die Zinsen addiert und erst dann fließen sie auch als Zineszins wieder selbst mit ein:
Jahr 0: 1000
Zinsen: +100
Jahr 1: 1100
Zinsen: +110
Jahr 2: 1210
Zinsen: +121
Jahr 3: 1331
verstehst du? Die Zinsen werden nicht fließend berechnet sondern eben immer in den Jahresstufen _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 27.03.2006, 17:34 Titel: |
|
|
@c.m.obrecht
Zitat: | Anfangsdatum Jahr: ? 06
Monat: ? 1
Tag: ? 1
Enddatum Jahr: ? 08
Monat: ? 1
Tag: ? 1
Anfangskapital ? 100
Zinssatz (Jahr)? 10
Laufzeit in Jahren: 2 in Tagen: 720
Zins (mit Zinseszins: 21 Endkapital (mit Zinseszins) 121 |
Das ist Korrekt.
Zitat: | Anfangsdatum Jahr: ? 06
Monat: ? 6
Tag: ? 1
Enddatum Jahr: ? 07
Monat: ? 6
Tag: ? 1
Anfangskapital ? 100
Zinssatz (Jahr)? 10
Laufzeit in Jahren: 1 in Tagen: 360
Zins (mit Zinseszins: 10 Endkapital (mit Zinseszins) 110 |
Das ist falsch.
Die Bank zahlt und berechnet den Zins am 31.12 des Jahres.
Also gibt es auch schon hier Zinses Zins.
Kurz noch was zum Code:
Der Asembler Teil bringt nicht viel, die Befehle INPUT und PRINT brauchen viel mehr Zeit.
Zudem Generiert Freebasic selbst schon sehr Guten Asembler Code. |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 28.03.2006, 20:10 Titel: Danke |
|
|
Vielen Dank; müsste ich im Programm etwas ändern, damit es bis zum 31. rechnet betf. der Aussage dass die Bank am 31. Zinseszins zahlt?
Zum Assembler-Code; klar bringt das daher nicht viel, allerdings kommt es bei heutigen PCs auf das sowieso nicht an Habe es mehr der Übung halber so geschrieben ausserdem fiel mir dieser Vorgang sogar eher ein als im einfachen Basic  |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 29.03.2006, 18:53 Titel: |
|
|
Am 31. Dezember zahlt die Bank den Zins.
(Woll noch nie eine Konto Abrechnung bekommen )
Das nächste mögliche Problem ist, das die Bank den Zins auch rundet, womit diese Formel L = K * ( 1 + ( p / 100 ) )^n nicht mehr passt.
Auch die Rundungsregeln sind recht komplex, wie's aber genau in Deutschland geht weiss ich nicht |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 01.04.2006, 06:59 Titel: ... |
|
|
Danke; natürlich doch es muss hier einfach der Zins nach der eingegebenen Zeit berechnet werden; nicht genau wie die Bank zahlen würde. Gerundet muss nicht werden.
Was müsste ich ändern damit es stimmt?
Danke |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 01.04.2006, 19:27 Titel: |
|
|
Ich seh bald den Wald vorlauter Bäumen nicht mehr.
Bitte deinen Kunden mal um eine genau Beschreibung der Aufgabe und eine Doku wieso das Resultat falsch ist (und welches Richtig ist).
Die Formel L = K * ( 1 + ( p / 100 ) )^n stimmt, wenn man eben Mathematische und nicht Banker Sicht zugrunde legt. |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 02.04.2006, 09:28 Titel: .... |
|
|
Genau das meine ich auch. Hier die ANforderungen die ich erhalten habe:
Anforderungsprofil:
ZINSBERECHNUNG
Anfangsdatum: 00.00.0000
Enddatum: 00.00.0000
Total Laufzeit: 000 Monate: (à 30 Tage)
00 Tage
Zinssatz: 00.0 %
Anfangskapital: 00000.00
Zinskosten: 00000.00
Totalbetrag: 00000.00
Anmerkung:
Berechnungsgrundlage: (Enddatum – Anfangsdatum) = Anzahl (Monate (Moante a 30 Tage))+((Rest-)Tage))
Zinsberechnung (Zinseszins) = (Anfangskapital + Zins (für die ersten 30 Tage) ergibt die Summe von Kapital + Zins), sofern Laufzeit kleiner als 30 Tage = Ausgabe von Anfangskapital, Zins, Endkapital, wenn Laufzeit grösser als 30 Tage dann ((Anfangskapital) + Zins für die ersten 30 Tage)) in einer Schleife um die Anzahl Monate erhöhen (Zinseszinsberechnung) + (eventuelle Resttage) berechnen.
Zinseszinsberechnung auf dieser Art sind im normalem kaufmännischem Verkehr eigentlich nicht gestattet. Diese gewünschte Berechnungsformel wird jedoch nur innerhalb der eigenen Firma zwecks der Festlegung der gegenseitigen Kapitaleinlagen (Darlehen) der beiden Firmeneigentümer unter der Berücksichtigung der für das eingebrachte Kapital zu bezahlenden Zinslasten (z.B. Kreditkartendarlehen) benötigt. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 02.04.2006, 12:25 Titel: |
|
|
Aha ...
Zitat: | wenn Laufzeit grösser als 30 Tage dann ((Anfangskapital) + Zins für die ersten 30 Tage)) in einer Schleife um die Anzahl Monate erhöhen (Zinseszinsberechnung) + (eventuelle Resttage) berechnen. |
Dein Kunde möchte eine ganz andere Berechnung als üblich!
Mal sehn wie ich diese Formeln anpassen muss.
L = K * ( 1 + ( p / 100 ) )^n
Da die Rechnung auf Jahren basiert und auf Monaten basieren soll, könnte es so gehen
L = K * ( 1 + ( p / 100 / 12 ) )^(n*12)
Ja, das gibt mehr.
Frag mal deinen Kunden ob er das gemeint hat.
Dieses Verfahren ist mir jetzt echt neu, da will er wirklich was ganz spezielles. |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 02.04.2006, 15:33 Titel: cool |
|
|
Danke!
Ich werde ihm das mal senden. Vielen Dank! Super. Hoffentlich ist es wirklich das! |
|
Nach oben |
|
 |
|