Zählschleife
Kann mir bitte jemand sagen wo der Fehler ist
Delphi-Quellcode:
Das Programm soll die Zinsen und das Neue Guthaben für ein Jahr berechnen wenn jeden Monat ein gleicher Betrag auf das Konto gezahlt wird
unit Unit4;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm4 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Button1: TButton; procedure Edit1Change(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Label2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; Startguthaben, Endguthaben, Zinsen, monatlicherBetrag, Zinssatz, laufvariable: real; a: Integer; implementation {$R *.dfm} procedure TForm4.Edit1Change(Sender: TObject); begin startguthaben := StrToFloat(Edit1.Text); end; procedure TForm4.Edit2Change(Sender: TObject); begin zinssatz := StrToFloat(Edit2.Text); end; procedure TForm4.Edit3Change(Sender: TObject); begin monatlicherBetrag := StrToFloat(Edit3.Text); end; procedure TForm4.Button1Click(Sender: TObject); begin a := 0; Zinsen := 0; For a :=1 to 12 do begin; repeat Startguthaben := Startguthaben + monatlicherBetrag; Zinsen := 1/12*Startguthaben/100*Zinssatz; until a=12; Endguthaben := Zinsen + startguthaben; Label2.Caption := FloatToStr(Endguthaben); Label1.Caption := FloatToStr(Zinsen); end; end; Danke im Vorraus |
Re: Zählschleife
Was hast du denn für einen Fehler?
// edit : da sind 'ne Menge Unklarheiten :stupid: |
Re: Zählschleife
Lass das repeat...until weg den es erzeugt ne Endlosschleife. Zudem macht das For das ja schon
|
Re: Zählschleife
Dann komt der Fehler Decleration expected but end of file found
|
Re: Zählschleife
Hallo,
Zählvariablen sollten immer lokal sein, du hast alle Variablen global, das ist nicht gut und wird zumindest bei Zählvariablen sogar vom Compiler als Fehler gemeldet. Deine Variable a: Integer müsste also in der Prozedur procedure TForm4.Button1Click(Sender: TObject); als lokale Variable stehen. |
Re: Zählschleife
Danke für deine Hilfe aber ich bin kein Fachmann kannst du bitte genauer erklären
|
Re: Zählschleife
Na, wenn dein Ausriss wirklich der GESAMTE Code ist, dann fehlt m.E. zum Schluß ein "end." Na, und dann ist a:=0 überflüssig, wenn du a gleich darauf als Schleifenzähler verwendest (a sollte auch lokal deklariert werden)
|
Re: Zählschleife
Delphi-Quellcode:
sieht jetzt so aus funktioniert aber immer noch nich
unit Unit4;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm4 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Button1: TButton; procedure Edit1Change(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Label2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; Startguthaben, Endguthaben, Zinsen, monatlicherBetrag, Zinssatz, laufvariable: real; a: Integer; implementation {$R *.dfm} procedure TForm4.Edit1Change(Sender: TObject); begin startguthaben := StrToFloat(Edit1.Text); end; procedure TForm4.Edit2Change(Sender: TObject); begin zinssatz := StrToFloat(Edit2.Text); end; procedure TForm4.Edit3Change(Sender: TObject); begin monatlicherBetrag := StrToFloat(Edit3.Text); end; procedure TForm4.Button1Click(Sender: TObject); begin Zinsen := 0; For a :=1 to 12 do begin; Startguthaben := Startguthaben + monatlicherBetrag; Zinsen := 1/12*Startguthaben/100*Zinssatz; Endguthaben := Zinsen + startguthaben; end; Label2.Caption := FloatToStr(Endguthaben); Label1.Caption := FloatToStr(Zinsen); end; end. |
Re: Zählschleife
Hallo, ich denke die letzte Prozedur sollte so aussehen:
Delphi-Quellcode:
Ist es das was du meinst?
procedure TForm4.Button1Click(Sender: TObject);
var a: Integer; // <--- hier wird die Variable lokal definiert begin Zinsen := 0; For a :=1 to 12 do begin // <-- nach dem begin Semikolon entfernt Startguthaben := Startguthaben + monatlicherBetrag; Zinsen := 1/12*Startguthaben/100*Zinssatz; end; Endguthaben := Zinsen + startguthaben; Label2.Caption := FloatToStr(Endguthaben); Label1.Caption := FloatToStr(Zinsen); end; Ach ja, und die Variable a kannst du dann oben, wo die ganzen globalen Variablen stehen weglassen ;) Hoffe ich konnte helfen... //Edit: Kommentar in den Code hinzugefügt //Edit 2: ja, das Semikolon nach dem begin sollte natürlich weg, ist mir gar nicht aufgefallen |
Re: Zählschleife
begin;
|
Re: Zählschleife
Die global Variable "Laufvariable" ist überflüssig. Tja, und dann erscheint mir das mit den Zinsen auch merkwürdig (bin ja kein Bankkaufmann, aber immerhin) >> die werden bei jedem Schleifendurchgang neu berechnet! Müssen die nicht zum jeweils vorherigen Ergebnis addiert werden (sonst wäre auch die Initialisierung Zinsen:=0 vor der Schleife überflüssig)?
|
Re: Zählschleife
[Pascal Error] Unit4.pas(23): E2065 Unsatisfied forward or external declaration: 'TForm4.Label2Click'
jetzt kommt der Fehler ich versteh das nicht ich meine das stimmt doch jetzt alles und wegen der formel ich berechne für jeden Monat (1/12) die Zinsen da jeden Monat ein bestimmter betrag eingezahlt wird und das wird dann addiert |
Re: Zählschleife
Zitat:
Delphi-Quellcode:
unit Unit4;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm4 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Button1: TButton; procedure Edit1Change(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Label2Click(Sender: TObject); // <-- diese Zeile entfernen! procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; |
Re: Zählschleife
Joo, dann musst du die Label2Click deklaration im Kopf löschen, wenn es das Label2 nicht mehr gibt.
Aber die Formel ist trotzdem merkwürdig, die Zinsen werden nur außerhalb der Schleife addiert. Du addierst dort nur den Zinsbetrag, der im 12ten Schleifendurchlauf berechnet wurde! Bist du Bankdirektor? Solange die Kunden das nicht merken, machst du gute Gewinne (hihihi) |
Re: Zählschleife
Danke erstmal aber ich weiß auch nicht hier kommt ein Problem nach dem anderen
[Pascal Warning] Unit4.pas(56): W1019 For loop control variable must be simple local variable und taaktaak wenn du den Trockentest machst weißt du das die stimmt (und ich bin Schüler der 10. Klasse) Zinseszins berechnet sich erst am Ende des Jahres Schuldigung ich nehm alles zurück da ist ein Fehler +Zinsen fehlt aber das Programm müsste trotzdem laufen |
Re: Zählschleife
Beachte das mit der lokalen Variable, was ich in Beitrag #9 geschrieben habe.
|
Re: Zählschleife
Zitat:
//Edit: Huch, wo kommt denn auf einmal die zweite Seite her :roll: |
Re: Zählschleife
Jooo, mein lieber Förster,
dass wir uns nicht falsch verstehen: Das sollte wirklich nur ein kleiner Scherz sein! Und lass dich nicht aus der Ruhe bringen - manchmal ist der Wurm drin, in so einem kleinen Programm! Das bekommst du schon hin! So, Schluss jetzt! Und Gute Nacht! Gruß Ralph |
Re: Zählschleife
The Label2Click methode referenced by Label2.OnClick does not exist. Remove the referance
das ist der Fehler der jetzt kommt und danke für die Hilfe
Delphi-Quellcode:
und so siehts jetzt aus
unit Unit4;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm4 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Button1: TButton; procedure Edit1Change(Sender: TObject); procedure Edit2Change(Sender: TObject); procedure Edit3Change(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form4: TForm4; Startguthaben, Endguthaben, Zinsen, monatlicherBetrag, Zinssatz, laufvariable: real; implementation {$R *.dfm} procedure TForm4.Edit1Change(Sender: TObject); begin startguthaben := StrToFloat(Edit1.Text); end; procedure TForm4.Edit2Change(Sender: TObject); begin zinssatz := StrToFloat(Edit2.Text); end; procedure TForm4.Edit3Change(Sender: TObject); begin monatlicherBetrag := StrToFloat(Edit3.Text); end; procedure TForm4.Button1Click(Sender: TObject); var a: integer; begin Zinsen := 0; For a :=1 to 12 do begin; Startguthaben := Startguthaben + monatlicherBetrag; Zinsen := 1/12*Startguthaben/100*Zinssatz+Zinsen; Endguthaben := Zinsen + startguthaben; end; Label2.Caption := FloatToStr(Endguthaben); Label1.Caption := FloatToStr(Zinsen); end; end. |
Re: Zählschleife
Ist das nicht eine Meldung bei der du auf Yes / No klicken kannst?
Wenn ja, klicke einfach auf 'Yes', wenn nicht musst du im Object Inspector bei Label2 das, was unter dem Event 'OnClick' steht, entfernen. |
Re: Zählschleife
dann stürzt Delphi ab
ich clicke immer zuerst auf yes/ja |
Re: Zählschleife
Beim 2. mal Hat es nun Funktioniert
Hier mit bedanke ich michh bei allen die mir geholfen haben und wünsche ihnen noch einen schönen(4Minütigen) Tag |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 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