Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Probleme beim programmieren eines Kapitalwertrechners (https://www.delphipraxis.net/126842-probleme-beim-programmieren-eines-kapitalwertrechners.html)

Hellraizer 3. Jan 2009 13:09


Probleme beim programmieren eines Kapitalwertrechners
 
Hallo zusammen.
Bin dabei ein Kapitalwertrechenr zu schreiben und mein Quelltext ist folgender:

Delphi-Quellcode:
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.
Das Problem ist das ich die Werte die in den Lines des Memo stehen addieren muss. Leider funktioniert meine Vorgehensweise nicht so recht.

Bitte helft mir :D ich stehe gerne zu Rückfragen bereit ;)
MFG Kevin

Klaus01 3. Jan 2009 13:17

Re: Probleme beim programmieren eines Kapitalwertrechners
 
Hallo,

versuche mal diesen Passus:
Delphi-Quellcode:
n:=i;
while n>0 do
  begin
    zahlungen:=zahlungen+strtofloat(memo1.Lines.Strings[n]);
    n:=n-1;
  end;
durch diesen auszutauschen.
Delphi-Quellcode:
zahlungen:=0;
for n:=0 to memo1.lines.count -1 do
  if memo1.Lines.Strings[n] <> '' then
    zahlungen:=zahlungen + strToFloat(memo1.lines.Strings[n]);
Vielleicht kannst Du noch schreiben, was an Deiner Vorgehensweise nicht funktionert.

Im Memo sind da pro Zeile die Einzahlungen eines Jahres eingetragen.
Dann würde ja auch noch ein Zinseszins Effekt eintreten.

Grüße
Klaus

Luckie 3. Jan 2009 13:18

Re: Probleme beim programmieren eines Kapitalwertrechners
 
Zitat:

Zitat von Hellraizer
Leider funktioniert meine Vorgehensweise nicht so recht.

Eine etwas verständlichere Fehlerbeschreibung was nicht funktioniert wäre nicht schlecht. Irgendeine Fehlermeldung oder kommt nicht das raus, was du erwartest?

DeddyH 3. Jan 2009 13:20

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:

Hellraizer 3. Jan 2009 13:22

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

Hellraizer 3. Jan 2009 13:23

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 ;)

DeddyH 3. Jan 2009 13:28

Re: Probleme beim programmieren eines Kapitalwertrechners
 
Kleines Beispiel (soll die Summe der in Stringliste übergebenen Zahlen berechnen):
Delphi-Quellcode:
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;
Ein Aufruf könnte dann so aussehen:
Delphi-Quellcode:
procedure TFormWuppdi.ButtonBlaClick(Sender: TObject);
begin
  ShowMessage(FloatToStr(MySum(ListBoxBlubb.Items)));
end;
[edit] Tippfehler, der Parametertyp muss natürlich TStrings heißen. [/edit]

Hellraizer 3. Jan 2009 13:37

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:
 
for n:=0 to memo1.lines.count -1 do
if memo1.Lines.Strings[n] <> '' then
zahlungen:=zahlungen + strToFloat(memo1.lines.Strings[n]);
das heißt doch:
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

Klaus01 3. Jan 2009 13:40

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

DeddyH 3. Jan 2009 13:44

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.
Seite 1 von 2  1 2      

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