![]() |
Probleme beim programmieren eines Kapitalwertrechners
Hallo zusammen.
Bin dabei ein Kapitalwertrechenr zu schreiben und mein Quelltext ist folgender:
Delphi-Quellcode:
Das Problem ist das ich die Werte die in den Lines des Memo stehen addieren muss. Leider funktioniert meine Vorgehensweise nicht so recht.
unit Kapitalwertberechnung;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, math; type TForm1 = class(TForm) Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; BitBtn1: TBitBtn; Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin self.memo1.Text:=(''); end; procedure TForm1.Button1Click(Sender: TObject); var summe, zinssatz, z, zahlungen: real; i, n: integer; begin if edit1.text=('') then begin showmessage ('Bitte Zinssatz eingeben.'); exit end; if memo1.lines.strings[0]=('') then begin showmessage ('Bitte Zahlung eingeben.'); exit; end; i:=0; zahlungen:=0; summe:=0; zinssatz:=strtofloat(edit1.text); while (memo1.lines.strings[i]<>('')) do begin i:=i+1; end; n:=i; z:=1+zinssatz/100; z:=z*power(1/z,i); while n>0 do begin zahlungen:=zahlungen+strtofloat(memo1.Lines.Strings[n]); n:=n-1; end; summe:=zahlungen*z; self.edit2.text:=floattostr(summe); end; end. Bitte helft mir :D ich stehe gerne zu Rückfragen bereit ;) MFG Kevin |
Re: Probleme beim programmieren eines Kapitalwertrechners
Hallo,
versuche mal diesen Passus:
Delphi-Quellcode:
durch diesen auszutauschen.
n:=i;
while n>0 do begin zahlungen:=zahlungen+strtofloat(memo1.Lines.Strings[n]); n:=n-1; end;
Delphi-Quellcode:
Vielleicht kannst Du noch schreiben, was an Deiner Vorgehensweise nicht funktionert.
zahlungen:=0;
for n:=0 to memo1.lines.count -1 do if memo1.Lines.Strings[n] <> '' then zahlungen:=zahlungen + strToFloat(memo1.lines.Strings[n]); Im Memo sind da pro Zeile die Einzahlungen eines Jahres eingetragen. Dann würde ja auch noch ein Zinseszins Effekt eintreten. Grüße Klaus |
Re: Probleme beim programmieren eines Kapitalwertrechners
Zitat:
|
Re: Probleme beim programmieren eines Kapitalwertrechners
Außerdem solltest Du Logik und Darstellung trennen, d.h. die Berechnung in eine eigene Funktion auslagern, die dann vom Button (ggf. mit entsprechenden Parametern) aufgerufen wird.
P.S.: Willkommen in der DP :dp: |
Re: Probleme beim programmieren eines Kapitalwertrechners
also so wie ich es hatte kommt da '" is not is valid floating pointvalue'.
ich probier mal deinen Vorschlag Klaus danke |
Re: Probleme beim programmieren eines Kapitalwertrechners
wie trennt man Logik und Darstellung?
einfach eine Prozedur schreiben, die vom Button.click aufgerufen wird? danke für das willkommen ;) |
Re: Probleme beim programmieren eines Kapitalwertrechners
Kleines Beispiel (soll die Summe der in Stringliste übergebenen Zahlen berechnen):
Delphi-Quellcode:
Ein Aufruf könnte dann so aussehen:
function MySum(const sl: TStrings): Extended;
var i: integer; begin Result := 0; for i := 0 to Pred(sl.Count) do Result := Result + StrToFloatDef(sl[i],0); end;
Delphi-Quellcode:
[edit] Tippfehler, der Parametertyp muss natürlich TStrings heißen. [/edit]
procedure TFormWuppdi.ButtonBlaClick(Sender: TObject);
begin ShowMessage(FloatToStr(MySum(ListBoxBlubb.Items))); end; |
Re: Probleme beim programmieren eines Kapitalwertrechners
oh.. ja ^^ hab ich eigentliich vergessen zu erwähnen das ich inner 11 bin und siet anfang des Jahres im Informatik-Kurs programmiere und seit 3Monaten mit Delphi? :D
deshalb dauerts so lange bis ich zurückschreibe. muss erst euere Beiträge verstehn. Das mit Logik und so trennen merk ich mir für die nächsten Aufgaben, hab noch 10 die nicht minder schwierig sind für mich :D aber zum thema:
Delphi-Quellcode:
das heißt doch:for n:=0 to memo1.lines.count -1 do if memo1.Lines.Strings[n] <> '' then zahlungen:=zahlungen + strToFloat(memo1.lines.Strings[n]); um auf n=0 zu kommen zähle die memo.lines solange um 1 runter bis n=0 ist. oder? also mein Ziel ist es die Werte der einzelnen Lines im Memo zu addieren. Das ganze soll diese Rechung wiederspiegeln: Kapitalwert=Summe der Zahlung in Periode i *(1+Zinssatz/100)^-i Der Kapitalwert soll ausgegeben werden im Edit2 Feld. Eingeben wird der Zinssatz in Edit1. In Memo1 werden pro Line die Zahlungen eingeben, negativ oder positiv. Line 0 soll i=0 sein, line 10 also i=10. öhm? hilft euch das mir das zu erklären bzw beim problem zu helfen? danke für eure zeit |
Re: Probleme beim programmieren eines Kapitalwertrechners
.. die
for n:=0 to memo1.lines.count -1 Schleife fängt bei 0 und zählt dann bis zum Ende des Memofeldes hoch. Die Zeilen eines Memo sind 0 indiziert, d.h. sie fangen bei 0 an und enden bei Zeilenanzahl -1. Grüße Klaus |
Re: Probleme beim programmieren eines Kapitalwertrechners
Wenn man es als While-Schleife umschreibt, wird es vielleicht etwas klarer.
Delphi-Quellcode:
n := 0; //wir beginnen bei Index 0 (= erste Zeile)
while n < Memo1.Lines.Count do begin if Memo1.Lines[n] <> '' then zahlungen:=zahlungen + strToFloat(memo1.lines[n]); n := n + 1; //n hochzählen für nächste Zeile end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz