Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Zinsberechnung mit For Do Schleife (https://www.delphipraxis.net/157335-zinsberechnung-mit-do-schleife.html)

JuPi2904 8. Jan 2011 13:00


Zinsberechnung mit For Do Schleife
 
Hallo liebe Mitglieder,
wir haben in Info gerade das Thema Schleifen bei Delphi.
Wir müssen ein Programm zur Berechnung eines Endbetrags aus Kapital, Zinsen und Laufzeit mit einer For Do Schleife schreiben. Bei meinen Programm zeigt Delphi aber Fehler an , und ich weiß nicht , wie ich diese lösen.
Vielen Dank schon mal im Vorraus für alle nützlichen Hinweise!!!:)

Hier der Quelltext:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var zins, kapital, endbetrag: Real;
    i, jahre: Integer;
begin
  zins:=StrToFloat(Edit2.Text);
  jahre:=StrToInt(Edit3.Text);
  kapital:=StrToFloat(Edit1.Text);

 i:=0
 [B]for 1 to jahre do[/B]
 begin endbetrag=kapital*(zins/1000)+kapital;
 Edit4.Text:=FloatToStr(Endbetrag);

end;

end.
Hinweis: Beim fettgedruckten zeigt er mir an: Simikolon oder Operator fehlt.

leddl 8. Jan 2011 13:12

AW: Zinsberechnung mit For Do Schleife
 
Zitat:

Zitat von JuPi2904 (Beitrag 1073226)
Hinweis: Beim fettgedruckten zeigt er mir an: Simikolon oder Operator fehlt.

Erstmal herzlich willkommen hier :hi:
Zu deinem Problem: Schau dir mal die Zeile direkt drüber und dann nochmal die Fehlermeldung an :zwinker:

Der Quellcode ist übrigens lesbarer, wenn du ihn in Delphi-Tags einschließt ( [delphi ]...[/delphi ])

Luckie 8. Jan 2011 13:17

AW: Zinsberechnung mit For Do Schleife
 
Warum machst du noch einen Thread auf?
http://www.delphipraxis.net/157265-z...e-problem.html

JuPi2904 8. Jan 2011 13:20

AW: Zinsberechnung mit For Do Schleife
 
ok danke!!!:-D
so nächste problem ist das for schleifenvariable eine einfache lokale variable sein muss, was ist das und was muss ich da machen?

JuPi2904 8. Jan 2011 13:21

AW: Zinsberechnung mit For Do Schleife
 
Sorry das ich so ne einfachen fragen stelle, aber ich weiß leider nicht was ein thread ist??

leddl 8. Jan 2011 13:22

AW: Zinsberechnung mit For Do Schleife
 
Zitat:

Zitat von JuPi2904 (Beitrag 1073232)
so nächste problem ist das for schleifenvariable eine einfache lokale variable sein muss, was ist das und was muss ich da machen?

Na wenn euer Thema zur Zeit Schleifen sind, werdet ihr die doch bestimmt auch besprochen haben, oder? :gruebel:
Dass die For-Schleife eigentlich anders aussieht als in deinem Codebeispiel, sollte dir dann doch sofort auffallen.

Luckie 8. Jan 2011 13:25

AW: Zinsberechnung mit For Do Schleife
 
Diese Grundlagen sollte euch euer Lehrer aber schon erklärt haben. Wenn nicht findest du genug Tutorials im Internet.

JuPi2904 8. Jan 2011 13:26

AW: Zinsberechnung mit For Do Schleife
 
Na wir mussten uns alles selber erarbeiten. Unsre Lehrerin hat uns nichts erklärt. Ich habe nur ganz kurze Quelltexte dazu...nur das grundgerüst, deswegen blick ich da noch nicht ganz so durch.:cry:

JuPi2904 8. Jan 2011 13:31

AW: Zinsberechnung mit For Do Schleife
 
ok..gut habe ein paar fehler gefunden..noch nicht alle bitte um hilfe..

Quelltext:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var zins, kapital, endbetrag: Real;
    i, jahre: Integer;
begin
  zins:=StrToFloat(Edit2.Text);
  jahre:=StrToInt(Edit3.Text);
  kapital:=StrToFloat(Edit1.Text);

 i:=0;
 for i:= 1 to jahre do
 begin endbetrag:= kapital*(zins/1000)+kapital;
 Edit4.Text:=FloatToStr(Endbetrag);

end;

end;
es müssen irgendwelche kleinigkeiten sein..

Luckie 8. Jan 2011 13:36

AW: Zinsberechnung mit For Do Schleife
 
Bitte fasse deinen Code in Delphi-Tags:
Code:
[delphi]Dein Code;[/delphi]
Und welche Kleinigkeiten? Zeigt der Compiler Fehler an oder macht das Programm nicht das, was es soll? Sorry, aber meine Glaskugel ist noch in der Werkstatt.

JuPi2904 8. Jan 2011 13:39

AW: Zinsberechnung mit For Do Schleife
 
meine fehler codes:
  • [Hinweis] Unit1.pas(46): Auf 'i' zugewiesener Wert wird niemals benutzt
  • [Fehler] Unit1.pas(55): Deklaration erwartet, aber Dateiende gefunden
  • [Fataler Fehler] Project1.dpr(5): Verwendete Unit 'Unit1.pas' kann nicht compiliert werden

JuPi2904 8. Jan 2011 13:40

AW: Zinsberechnung mit For Do Schleife
 
was verändern eigentlich die delphi tags???

Luckie 8. Jan 2011 13:45

AW: Zinsberechnung mit For Do Schleife
 
Kann es sein, dass auch die Formel nicht stimmt?

Weil das ist ja Unsinn:
Delphi-Quellcode:
var
  i: Integer;
  EndKapital: Double;
begin
  EndKapital := 0.0;
  for i := 1 to Jahre do
    EndKapital := StartKapital*(Zins/1000)+StartKapital;
  Result := EndKapital;
end;

Dann hätte ich in fünf Jahren bei 2,3 Prozent Zinsen und einen Startkapital von 100 Euro nur 23 Cent Zinsen bekommen. Und wo Fließen bei dir da die Jahre ein?

JuPi2904 8. Jan 2011 13:48

AW: Zinsberechnung mit For Do Schleife
 
möglich, das problem ist ja aber mehr das er das programm gar nicht startet, auch wenn die formel nicht stimmt müsste das programm gestartet werden...das werde ich dann später noch mal überprüfen.

Ich wüsste zur zeithalt nurgern wie ich die fehler behebn kann???

JuPi2904 8. Jan 2011 13:49

AW: Zinsberechnung mit For Do Schleife
 
die jahre sind dazu da wie oft die schleife durchlaufen soll..das 1000 müsste natürlich durch 100 ersetzt werden(schreibfehler)

Luckie 9. Jan 2011 04:55

AW: Zinsberechnung mit For Do Schleife
 
Ja schon, nur rechnest du immer mit dem gleichen Startkapital. Das erhöhte Kapital pro Jahr fließt ja gar nicht mit ein. Deswegen auch die Meldung vom Compiler, dass i nie benutzt wird.

Es müsste so aussehen:
Delphi-Quellcode:
function EndKapital(StartKapital, Zins: Double; Jahre: Integer): Double;
var
  i: Integer;
  EndKapital: Double;
begin
  if Zins <= 0 then
    Raise ERangeError.Create('Zins ist kleiner/ gleich Null');
  if StartKapital <= 0 then
    Raise ERangeError.Create('Startkapital ist kleiner/gleich Null');
  if Jahre < 0 then
    Raise ERangeError.Create('Jahre ist kleiner Null');
  EndKapital := 0.0;
  for i := 1 to Jahre do
    EndKapital := EndKapital*(Zins/100)+StartKapital;
  Result := EndKapital;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    ShowMessage(FloatToStr(EndKapital(100, 2.3, -5)));
    // 101,120413075641343
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;
Wobei ich mir bei der Formel nicht sicher bin, denn mit der Formel aus der Wikipedia bekomme ich den auskommentierten Wert raus.

Und was deine Fehler angeht, das sind einfache Syntaxfehler. Guck deinen Quelltext einfach noch mal genau an.

Und die Delphi-Tags bewirken, dass der Quelltext formatiert und somit leserlicher dargestellt wird.

Hansa 9. Jan 2011 05:47

AW: Zinsberechnung mit For Do Schleife
 
Ersetze den letzten
Delphi-Quellcode:
;
durch :
Delphi-Quellcode:
.
Ob die Rechnung so stimmt ?? Nachrechnen.

Matze 9. Jan 2011 10:46

AW: Zinsberechnung mit For Do Schleife
 
Zitat:

Zitat von Luckie (Beitrag 1073360)
Ja schon, nur rechnest du immer mit dem gleichen Startkapital. Das erhöhte Kapital pro Jahr fließt ja gar nicht mit ein. Deswegen auch die Meldung vom Compiler, dass i nie benutzt wird.

Nö, die kommt sicher daher, dass i mit 0 initialisiert wird:
Delphi-Quellcode:
i:=0;
 for i:= 1 to jahre do
Das ist überflüssig und wieso grad 0 ist mir auch schleierhaft. Dieser Wert Null wird jedenfalls nie benutzt. Ob i in der Schleife verwendet wird oder nicht, wird meines Wissens nicht angezeigt. Es ist ja lediglich eine Laufvariable, die man nicht zwingend innerhalb der Schleife nutzen muss.

Luckie 9. Jan 2011 10:48

AW: Zinsberechnung mit For Do Schleife
 
OK, aber trotzdem ändert sich der Endwert in der Schleife nicht.

Matze 9. Jan 2011 10:52

AW: Zinsberechnung mit For Do Schleife
 
Jo, das stimmt.
Es ist übrigens auch überflüssig, den Edit-Text innerhalb der Schleife zuzuweisen. Es steht am Ende sowieso nur der Wert des letzten Schleifendurchlaufs drin. Das würde ich daher außerhalb der Schleife zuweisen.

JuPi2904 9. Jan 2011 14:17

AW: Zinsberechnung mit For Do Schleife
 
Zitat:

Zitat von Luckie (Beitrag 1073360)
// 101,120413075641343

ok leute danke erstmal für eure hilfe:thumb:, nur was heißt diese zahl???

Matze 9. Jan 2011 14:19

AW: Zinsberechnung mit For Do Schleife
 
Zitat:

Zitat von JuPi2904 (Beitrag 1073452)
nur was heißt diese zahl???

Das ist vermutlich das Endkapital, das Luckies "ShowMessage" in seinem Beispiel ausgibt.

JuPi2904 9. Jan 2011 14:24

AW: Zinsberechnung mit For Do Schleife
 
entschuldigt die antwort aber der quelltext ist mir n bisschen zu schwer, dafür fehlt mir einfach das wissen, könnt ihr vlt. mein so bearbeiten das er stimmt?? danke

Luckie 9. Jan 2011 19:52

AW: Zinsberechnung mit For Do Schleife
 
Wer lesen kann, ist klar im Vorteil:
Zitat:

Wobei ich mir bei der Formel nicht sicher bin, denn mit der Formel aus der Wikipedia bekomme ich den auskommentierten Wert raus.
Was sind denn noch für Fehler übrige, nach dem du die Hinweise hier in den Beiträgen befolgt hast?

Jumpy 10. Jan 2011 13:20

AW: Zinsberechnung mit For Do Schleife
 
In Luckies Code ist mMn ein Denkfehler (mathem. gesehen):
Das Endkapital im nullten Jahr ist das Startkapital. Somit die Zeile

Delphi-Quellcode:
  EndKapital := 0.0;
ändern in

Delphi-Quellcode:
  EndKapital := Startkapital;


Anschließend ist in jedem Jahr das (neue) Startkapital das Endkapital des Vorjahres, somit:

Delphi-Quellcode:
for i := 1 to Jahre do
    EndKapital := EndKapital*(Zins/100)+StartKapital;
ändern zu:
Delphi-Quellcode:
for i := 1 to Jahre do
  begin  
  Startkapital:=Endkapital;
  EndKapital := EndKapital*(Zins/100)+StartKapital;
  end;
dann sollte es doch stimmen??? Zinsrechnung ist schon so lange her...

Luckie 10. Jan 2011 15:34

AW: Zinsberechnung mit For Do Schleife
 
Der Denkfehler stammt aber nicht von mir. Ich habe einfach nur den Code übernommen.

Damit kommt jetzt auch was sinnvolles raus:
Delphi-Quellcode:
function EndKapital(StartKapital, Zins: Double; Jahre: Integer): Double;
var
  i: Integer;
  EndKapital: Double;
begin
  if Zins <= 0 then
    Raise ERangeError.Create('Zins ist kleiner/ gleich Null');
  if StartKapital <= 0 then
    Raise ERangeError.Create('Startkapital ist kleiner/gleich Null');
  if Jahre < 0 then
    Raise ERangeError.Create('Jahre ist kleiner Null');
  EndKapital := StartKapital;
  for i := 1 to Jahre do
  begin
    Startkapital:=Endkapital;
    EndKapital := EndKapital*(Zins/100)+StartKapital;
  end;
  Result := EndKapital;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  try
    ShowMessage(FloatToStr(EndKapital(100, 2.3, 5)));
  except
    on E: Exception do
      ShowMessage(E.Message);
  end;
end;

DeddyH 10. Jan 2011 15:47

AW: Zinsberechnung mit For Do Schleife
 
Wenn man für "Jahre" einen vorzeichenlosen Typ nimmt, spart man eine Prüfung ein. Und die Variable EndKapital ist überflüssig, da sie genauso wie die Funktion heißt und somit als Result fungiert (wie in seligen TP-Zeiten).

Luckie 10. Jan 2011 15:49

AW: Zinsberechnung mit For Do Schleife
 
Oh, ist mir gar nicht aufgefallen mit dem Funktionsnamen. Und mit dem vorzeichenlosen Integer ist das so eine Sache. Denn was passiert, wenn der Benutzer einen negativen Wert eingibt? ;)

Delphi-Quellcode:
function ZinsesZins(StartKapital, Zins: Double; Jahre: Integer): Double;
var
  i: Integer;
begin
  if Zins <= 0 then
    Raise ERangeError.Create('Zins ist kleiner/ gleich Null');
  if StartKapital <= 0 then
    Raise ERangeError.Create('Startkapital ist kleiner/gleich Null');
  if Jahre < 0 then
    Raise ERangeError.Create('Jahre ist kleiner Null');
  Result := StartKapital;
  for i := 1 to Jahre do
  begin
    Startkapital := Result;
    Result := Result*(Zins/100)+StartKapital;
  end;
end;

Jumpy 10. Jan 2011 21:15

AW: Zinsberechnung mit For Do Schleife
 
mMn kann man die Prüfungen ganz weglassen.
Negativen Zinssatz nennt man Inflation und negatives Startkapital entspricht dem Inhalt meines Bankkontos. :-D

Da das erst mein 4. oder 5. Post hier ist und ich die Sitten noch nicht so kenne, hoffe ich das gelegntlich etwas Humor mal erlaubt ist :?:

Matze 10. Jan 2011 21:23

AW: Zinsberechnung mit For Do Schleife
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Jumpy (Beitrag 1073778)
Da das erst mein 4. oder 5. Post hier ist und ich die Sitten noch nicht so kenne, hoffe ich das gelegntlich etwas Humor mal erlaubt ist :?:

OT: Natürlich ist gelegentlicher Humor gestattet, keine Angst. ;)

jfheins 10. Jan 2011 21:36

AW: Zinsberechnung mit For Do Schleife
 
Zitat:

Zitat von Jumpy (Beitrag 1073778)
mMn kann man die Prüfungen ganz weglassen.
Negativen Zinssatz nennt man Inflation und negatives Startkapital entspricht dem Inhalt meines Bankkontos. :-D

Da das erst mein 4. oder 5. Post hier ist und ich die Sitten noch nicht so kenne, hoffe ich das gelegntlich etwas Humor mal erlaubt ist :?:

Negativen Zinssatz gibt es nicht (Inflation ist die Vergrößerung der Geldmenge, es gibt auch Deflation aber das hat nicht direkt etwas mit den Zinsen zu tun) da niemand (gewerblich) Geld verleiht wenn er weis dass er weniger zurückbekommt.

Negatives Startkapital OK - das ist dann halt keine Geldanlage sondern ein Kredit.

Um noch etwas herumzuoptimieren:
Delphi-Quellcode:
  for i := 1 to Jahre do
  begin
    Startkapital := Result;
    Result := Result*(Zins/100)+StartKapital;
  end;
// ist gleich
  for i := 1 to Jahre do
  begin
    Result := Result*(Zins/100)+Result;
  end;
// ist gleich
  for i := 1 to Jahre do
  begin
    Result := Result * (Zins/100 + 1);
  end;
// ist gleich
Result := Result * Power(1 + Zins/100, Jahre);

Jumpy 10. Jan 2011 22:48

AW: Zinsberechnung mit For Do Schleife
 
@Matze:
4. oder 5. Post: gemeint waren Hilfsversuche meinerseits.
Die wo ich die Newbie-Fragen gestellt habe, hab ich nicht mitgezählt.

@jfheins:
Du hast natürlich recht, was die Optimierung angeht, aber es sollte ja mit For-Schleife gelöst werden, daher passt der letzte nicht so gut. Der dritte ist daher mMn der optimalste, obwohl man didaktisch im ersten oder zweiten noch mehr sieht was passiert (Ausklammern ist schon nicht mehr jedermanns Sache).

Oft ist es ja auch gewünscht die Kapitalentwicklung zwischendurch auszugeben, dann muss es ja denk ich 'ne Schleife sein, wobei man natürlich auch die letzte Variante zu Ausgabezwecken in ne Schleife packen kann...

Gute Nacht,
Jumpy


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:53 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz