Autor Beitrag
GoodLouG
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 23.12.09 15:41 
Hallo zusammen

Ich mus für die Schule einen Taschenrechner programmieren, ich habe nun mein bestes gegeben aber es gibt immernoch einen oder zwei fehler die ich echt nicht rausbekomm...
der taschenrechner enthält die zahlen 0-9, +, -, *, / sowie die taste C zum leeren der anzeige und ein = symbol. ich kann die tasten 0-9 in die anzeige eintippen, allerdings wenn ich rechnen will kommt immer ein fehler:
wenn ich zB 2 (zahl1) eintippe, und dann auf + drücke, wird die 2 nicht weggelöscht sondern bleibt stehen, wenn ich nun eine zweite zahl eingebe zB 5, nimmt er nicht die 5 als zahl2 sondern die 25, da die 2 immernoch da steht... letztendlich rechnet er 2+25. das ist mein hauptproblem! hier noch er quelltext:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
unit Taschenrechner;

interface

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

type
Operation = (plus,minus,mal,geteilt);
TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    Button11: TButton;
    Button12: TButton;
    Button13: TButton;
    Button14: TButton;
    Button15: TButton;
    Button16: TButton;
    Button17: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button11Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure Button13Click(Sender: TObject);
    procedure Button14Click(Sender: TObject);
    procedure Button15Click(Sender: TObject);
    procedure Button16Click(Sender: TObject);
    procedure Button17Click(Sender: TObject);
  private
   merk: operation;
   zahl: double;
{ Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  zahl2 : double;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if sender=button1 then edit1.text:=Edit1.text+'0';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if sender=button2 then edit1.text:=Edit1.text+'1';
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if sender=button3 then edit1.text:=Edit1.text+'2';
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
if sender=button4 then edit1.text:=Edit1.text+'3';
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
if sender=button5 then edit1.text:=Edit1.text+'4';
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
if sender=button6 then edit1.text:=Edit1.text+'5';
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
if sender=button7 then edit1.text:=Edit1.text+'6';
end;

procedure TForm1.Button8Click(Sender: TObject);
begin
if sender=button8 then edit1.text:=Edit1.text+'7';
end;

procedure TForm1.Button9Click(Sender: TObject);
begin
if sender=button9 then edit1.text:=Edit1.text+'8';
end;

procedure TForm1.Button10Click(Sender: TObject);
begin
if sender=button10 then edit1.text:=Edit1.text+'9';
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
if sender=button11 then edit1.text:=Edit1.text+',';
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
edit1.text:='';
end;

procedure TForm1.Button13Click(Sender: TObject);
begin
zahl:=strtofloat(edit1.text);
if sender=button13 then merk:=plus;
if sender=button14 then merk:=minus;
if sender=button15 then merk:=mal;
if sender=button16 then merk:=geteilt;
end;


procedure TForm1.Button17Click(Sender: TObject);
begin
  zahl2:=strtofloat(edit1.text);
case merk of
plus: zahl:=zahl+zahl2;
minus: zahl:=zahl-zahl2;
mal: zahl:=zahl*zahl2;
geteilt: zahl:=zahl/zahl2;
end;
edit1.text:=floattostr(zahl);
end;

end.


Vielen Dank für eure Lösungen!
(PS bitte schreibt nicht so kompliziert ich habe extrem wenig erfahrung in Delphi)

Frohe Weihnachten zusammen

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 23.12.09 16:10 
Hi, und :welcome: im Delphi-Forum :)

Weißt du, was dein Quelltext macht? :gruebel: Du gibst explizit ide Anweisung, den Text jeweils hinten an den Alten dranzuhängen. Wenn du den nicht übernehmen willst, muss es ed1.Text := S; anstelle von ed1.Text := edd1.Text + S; heißen.

Warum überprüfst du beim Aufrufen der Buttonklick-Prozeduren eigentlich jedes Mal, ob es sich auch um den Sender handelt? Du wirst die Prozedur doch nur dort eingetragen haben, oder kopierst du die Komponenten mit Strg-C? Die würde ich jedes Mal rechts aus der Objektleiste aufs Formular ziehen :)

mfG,

PS: Du solltest dir angewöhnen, deine Komponenten zu benennen(im ObjectInspector). Nimm dir dazu ruhig etwas Zeit und suche einen Namen, der sofort verstehen lässt, was der Button macht.

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
JoelH
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 806
Erhaltene Danke: 17

Win10
Delphi Alexandria 11.2 Patch 1
BeitragVerfasst: Mi 23.12.09 16:50 
erweitere Button13Click um die Zeile

ausblenden Delphi-Quelltext
1:
edit1.text:='';					


das sollte reichen.

_________________
mfg. Joel
GoodLouG Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 23.12.09 17:54 
Hey vielen Dank für die schnellen Antworten.

Habe jetz edit1.text:=''; bei Button13Click zugefügt, bei den anderen funktionen auch.
allerdings wenn ich jetz +,-,* oder / will kommt die Fehlermeldung

'' ist kein gültiger Gleitkommawert

wie kann ich das beheben?

mfg
GoodLouG Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 23.12.09 18:02 
habe es nun hinbekommen, hatte es in der falschen zeile!
vielen dank an euch, und schöne weihnachten
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 23.12.09 18:15 
user profile iconGoodLouG hat folgendes geschrieben Zum zitierten Posting springen:
vielen dank an euch, und schöne weihnachten
Dir auch :)

Wieso überprüfst du denn jetzt jeweils nochmal, ob es sich um den Korrekten Sender handelt? Dein Quelltext könnte doppelt so übersichtlich sein ;)

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)