 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
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: 16.03.2006, 01:08 Titel: Zinsprogramm rechnet nicht präzis/gar nicht |
|
|
Hilfe, das Programm rechnet zu wenig genau; bei zu kleinen Laufzeiten zeigt es sogar 0 an Woran kann das liegen? Vorgegeben ist, dass das Programm bei einer Laufzeit von unter 30 Tagen ohne Zinseszins und ab 30 Tagen mit Zinseszins rechnen soll. Es gibt auch nur Ganzzahlen aus.
Das Unterprogramm um die Tage/Laufzeit zu berechnen habe ich separat getestet, das stimmt. Hier der Code:
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 (Abziehen und alles in Tage umwandeln und anschl. zusammenzählen=Total Tage)
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
n=u/360 (aus den Tagen das Total Jahre berechnen)
input "Anfangskapital "; K
input "Zinssatz (Jahr)"; p
print " Jahre: ";n; " Tage: "; u
Z K*p*n)/100
if u>30 goto 90
print "Zins"; Z; " Anfangskapital + Zins "; K+Z
sleep 1000
goto 120
90: L = K * ( 1 + ( p / 100 ) )^n
print "Anfangskapital+Zins/Zinseszins"; L
sleep
120: sleep |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 16.03.2006, 02:15 Titel: |
|
|
du musst mal schauen, dass du kommawerte speicherst. standardmäßig sind alle variablen integer, speichern also nur ganzzahlen.
DIM variable AS SINGLE, variable2 AS DOUBLE
DIM AS SINGLE variable1, variable2
irgendwie so.
Single => "wenig" kommastellen
Double => Viele kommastellen _________________ "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
|
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 16.03.2006, 09:51 Titel: Kommastellen |
|
|
Das Problem dürfte nicht bei imul liegen; dort werden nur Ganzzahlen verarbeitet und das Resultat aus diesem Programmteil stimmt. Es dürfte allerdings bei den Variablen liegen, die zu wenige Kommastellen speichern. Werde es so versuchen. |
|
Nach oben |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 16.03.2006, 10:07 Titel: Super |
|
|
Sieht schon besser aus! Vielen Dank |
|
Nach oben |
|
 |
Dusky_Joe

Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 17.03.2006, 19:48 Titel: |
|
|
Ich empfehle dir, freeBASICs eingebaute Datums-Funktionen zu verwenden; siehe:
http://www.freebasic.de/r.php?s=DATESERIAL
http://www.freebasic.de/r.php?s=DATEDIFF
http://www.freebasic.de/r.php?s=DATEPART
sowie die meisten der Links dazu.
So kannst du sehr bequem von Tagen, Monaten und Jahren in Jahre umrechnen. FBs Funktionen arbeiten durchaus schnell, so dass sie auch mit der ASM-Routine mithalten können.
Außer natürlich, es ging dir um die übung.
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 |
|
 |
c.m.obrecht

Anmeldungsdatum: 09.03.2006 Beiträge: 377 Wohnort: Hofstetten SO, CH
|
Verfasst am: 17.03.2006, 20:02 Titel: Interessant |
|
|
Ah danke, das ist ja interessant..gibt es da Funktionen dafür. Ja um die Übung, nicht direkt aber ist natürlich auch nicht schlecht  |
|
Nach oben |
|
 |
|
|
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.
|
|