Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Hilfee.. Zinseszins-Rechnung
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 14.03.2006, 23:20    Titel: Hilfee.. Zinseszins-Rechnung Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 14.03.2006, 23:51    Titel: Antworten mit Zitat

Hi,
du multiplizierst K * n also Kapital mal Jahre grinsen
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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 15.03.2006, 00:36    Titel: Antworten mit Zitat

zinsrechnung geht bisschen anders als k*p*thappy

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
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 15.03.2006, 07:47    Titel: Super! Antworten mit Zitat

Vielen Dank! happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 17.03.2006, 19:41    Titel: Antworten mit Zitat

Vorsicht bei MisterD's Beispiel; in seinem Code betragen die Zinsen 200% zwinkern 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 zwinkern


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
Benutzer-Profile anzeigen Private Nachricht senden
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 18.03.2006, 03:52    Titel: Antworten mit Zitat

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 lächeln
_________________
"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
Benutzer-Profile anzeigen Private Nachricht senden
Dusky_Joe



Anmeldungsdatum: 07.01.2005
Beiträge: 1007
Wohnort: Regensburg/Oberpfalz

BeitragVerfasst am: 18.03.2006, 18:49    Titel: Antworten mit Zitat

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 zwinkern
_________________
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
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 20.03.2006, 12:17    Titel: Perfekt Antworten mit Zitat

Hallo,
vielen Dank! Mit Single/Double geht es ohne Probleme. Von diesen Befehlen wusste ich bis jetzt nichts lächeln Aber jetzt funktioniert es.

Danke
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 27.03.2006, 10:34    Titel: Problem ? Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.03.2006, 11:43    Titel: Antworten mit Zitat

ä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
Benutzer-Profile anzeigen Private Nachricht senden
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 27.03.2006, 14:17    Titel: Das Problem... Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 27.03.2006, 17:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 27.03.2006, 17:34    Titel: Antworten mit Zitat

@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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 28.03.2006, 20:10    Titel: Danke Antworten mit Zitat

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 lächeln Habe es mehr der Übung halber so geschrieben ausserdem fiel mir dieser Vorgang sogar eher ein als im einfachen Basic lächeln
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 29.03.2006, 18:53    Titel: Antworten mit Zitat

Am 31. Dezember zahlt die Bank den Zins.
(Woll noch nie eine Konto Abrechnung bekommen zwinkern)

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 01.04.2006, 06:59    Titel: ... Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 01.04.2006, 19:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 02.04.2006, 09:28    Titel: .... Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 02.04.2006, 12:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
c.m.obrecht



Anmeldungsdatum: 09.03.2006
Beiträge: 377
Wohnort: Hofstetten SO, CH

BeitragVerfasst am: 02.04.2006, 15:33    Titel: cool Antworten mit Zitat

Danke!
Ich werde ihm das mal senden. Vielen Dank! Super. Hoffentlich ist es wirklich das!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz