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:

Zinsprogramm rechnet nicht präzis/gar nicht

 
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: 16.03.2006, 01:08    Titel: Zinsprogramm rechnet nicht präzis/gar nicht Antworten mit Zitat

Hilfe, das Programm rechnet zu wenig genau; bei zu kleinen Laufzeiten zeigt es sogar 0 an traurig 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

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



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

BeitragVerfasst am: 16.03.2006, 02:15    Titel: Antworten mit Zitat

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



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 16.03.2006, 07:57    Titel: Antworten mit Zitat

Dann folgt aber das Problem, das imul nur Vorzeichen Behaftete Interger Variabeln verarbeiten kann, siehe:
http://andremueller.gmxhome.de/befehle.html#mul
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: 16.03.2006, 09:51    Titel: Kommastellen Antworten mit Zitat

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
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: 16.03.2006, 10:07    Titel: Super Antworten mit Zitat

Sieht schon besser aus! Vielen Dank
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:48    Titel: Antworten mit Zitat

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. 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
c.m.obrecht



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

BeitragVerfasst am: 17.03.2006, 20:02    Titel: Interessant Antworten mit Zitat

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 lächeln
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
Seite 1 von 1

 
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