![]() |
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:
Hinweis: Beim fettgedruckten zeigt er mir an: Simikolon oder Operator fehlt.
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. |
AW: Zinsberechnung mit For Do Schleife
Zitat:
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 ]) |
AW: Zinsberechnung mit For Do Schleife
|
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? |
AW: Zinsberechnung mit For Do Schleife
Sorry das ich so ne einfachen fragen stelle, aber ich weiß leider nicht was ein thread ist??
|
AW: Zinsberechnung mit For Do Schleife
Zitat:
Dass die For-Schleife eigentlich anders aussieht als in deinem Codebeispiel, sollte dir dann doch sofort auffallen. |
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.
|
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:
|
AW: Zinsberechnung mit For Do Schleife
ok..gut habe ein paar fehler gefunden..noch nicht alle bitte um hilfe..
Quelltext:
Delphi-Quellcode:
es müssen irgendwelche kleinigkeiten sein..
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; |
AW: Zinsberechnung mit For Do Schleife
Bitte fasse deinen Code in Delphi-Tags:
Code:
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.
[delphi]Dein Code;[/delphi]
|
AW: Zinsberechnung mit For Do Schleife
meine fehler codes:
|
AW: Zinsberechnung mit For Do Schleife
was verändern eigentlich die delphi tags???
|
AW: Zinsberechnung mit For Do Schleife
Kann es sein, dass auch die Formel nicht stimmt?
Weil das ist ja Unsinn:
Delphi-Quellcode:
end;
var
i: Integer; EndKapital: Double; begin EndKapital := 0.0; for i := 1 to Jahre do EndKapital := StartKapital*(Zins/1000)+StartKapital; Result := EndKapital; 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? |
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??? |
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)
|
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:
Wobei ich mir bei der Formel nicht sicher bin, denn mit der Formel aus der Wikipedia bekomme ich den auskommentierten Wert raus.
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; 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. |
AW: Zinsberechnung mit For Do Schleife
Ersetze den letzten
Delphi-Quellcode:
durch :
;
Delphi-Quellcode:
Ob die Rechnung so stimmt ?? Nachrechnen.
.
|
AW: Zinsberechnung mit For Do Schleife
Zitat:
Delphi-Quellcode:
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.
i:=0;
for i:= 1 to jahre do |
AW: Zinsberechnung mit For Do Schleife
OK, aber trotzdem ändert sich der Endwert in der Schleife nicht.
|
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. |
AW: Zinsberechnung mit For Do Schleife
Zitat:
|
AW: Zinsberechnung mit For Do Schleife
Zitat:
|
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
|
AW: Zinsberechnung mit For Do Schleife
Wer lesen kann, ist klar im Vorteil:
Zitat:
|
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:
ändern in
EndKapital := 0.0;
Delphi-Quellcode:
EndKapital := Startkapital;
Anschließend ist in jedem Jahr das (neue) Startkapital das Endkapital des Vorjahres, somit:
Delphi-Quellcode:
ändern zu:
for i := 1 to Jahre do
EndKapital := EndKapital*(Zins/100)+StartKapital;
Delphi-Quellcode:
dann sollte es doch stimmen??? Zinsrechnung ist schon so lange her...
for i := 1 to Jahre do
begin Startkapital:=Endkapital; EndKapital := EndKapital*(Zins/100)+StartKapital; end; |
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; |
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).
|
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; |
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 :?: |
AW: Zinsberechnung mit For Do Schleife
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Zinsberechnung mit For Do Schleife
Zitat:
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); |
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 05:31 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 by Thomas Breitkreuz