Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Hilfe Taschenrechner


Hazel - Do 12.04.12 09:32
Titel: Hilfe Taschenrechner
Hallo :)

bin ganz neu hier und hab mal eine Frage:

Ich hab einen Taschenrechner programmiert dieser funktioniert auch. Wollte ihn jetzt erweitern um die Funktion x^y. Hab gelesen das dies mit Power Math möglich wäre? Kann mir da jemand vill helfen?
Schon mal Danke im vorraus :)

Moderiert von user profile iconNarses: Überflüssige Zeilenumbrüche/Leerzeilen entfernt.


Nersgatt - Do 12.04.12 09:46

:welcome:
Genau, in der Unit "Math" gibt es die Funktion "Power". Wo ist denn konkret Dein Problem?


Hazel - Do 12.04.12 09:58

Hey
danke erstmal :)
also ich verstehe nicht ganz wie ich das machen muss^^


Gausi - Do 12.04.12 10:02

Du musst die Unit math benutzen, d.h. oben in die "uses-Liste" musst du math hinzufügen. Dann kannst du die Funktionen dieser Unit benutzen, z.B. power


Hazel - Do 12.04.12 10:23

Danke :*
hab jetzt noch einen Fehler drinnen -.-
weis nicht ganz wieso es nicht funktioniert:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.HochyClick(Sender: TObject);
begin
if x <> 0 then
begin
  x:= StrToFloat(Edit1.Text);
  x:= power(x, Zwischenegebnis);
  Edit1.Text:= FloatToStr(x);
  Zahl:= Edit1.Text;
end;
end;

vill kann mir einer von euch sagen wo der Fehler liegt?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Nersgatt - Do 12.04.12 10:26

Dazu müsstest Du uns bitte die Fehlermeldung sagen, die Du bekommst.


Hazel - Do 12.04.12 10:27

Gibt keine Fehlermeldung aus es funktioniert nur nicht^^


bummi - Do 12.04.12 10:47

was stellt denn dieses dar?


Delphi-Quelltext
1:
2:
3:
if x <> 0 then 
begin 
x:= StrToFloat(Edit1.Text);


Hazel - Do 12.04.12 10:51

soll ja ein Taschenrechner werden. Und mit Null soll der nicht rechnen deswegen if x <> 0


bummi - Do 12.04.12 10:53

ja und was steht vor der Zuweisung x:= StrToFloat(Edit1.Text); in x ???


Hazel - Do 12.04.12 10:57

ich versteh deine Frage nicht ganz^^
sorry bin noch anfänger


Nersgatt - Do 12.04.12 11:27

Ich glaub, Du musst mal etwas mehr Quellcode "drumrum" posten. Und bitte genauer schreiben, was Du unter "Funktioniert nicht" verstehst. Wir ein falsches Ergebnis ausgegeben, wird gar nichts ausgegeben, etc...


Hazel - Do 12.04.12 11:40


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:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
246:
247:
248:
249:
250:
251:
252:
253:
254:
255:
256:
257:
258:
259:
260:
261:
262:
263:
264:
265:
266:
267:
268:
269:
270:
271:
272:
273:
274:
275:
276:
277:
278:
279:
280:
281:
282:
283:
284:
285:
286:
287:
288:
289:
290:
291:
292:
293:
294:
295:
296:
297:
298:
299:
300:
301:
302:
303:
304:
305:
306:
307:
308:
309:
310:
311:
312:
313:
314:
315:
316:
317:
318:
319:
320:
321:
322:
323:
324:
325:
326:
327:
328:
329:
330:
331:
332:
333:
334:
335:
336:
337:
338:
339:
340:
341:
342:
unit Taschenrechner;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Zahl1: TSpeedButton;
    Zahl2: TSpeedButton;
    Zahl3: TSpeedButton;
    Zahl4: TSpeedButton;
    Zahl5: TSpeedButton;
    Zahl6: TSpeedButton;
    Zahl7: TSpeedButton;
    Zahl8: TSpeedButton;
    Zahl9: TSpeedButton;
    Zahl0: TSpeedButton;
    Komma: TSpeedButton;
    IstGleich: TSpeedButton;
    Geteilt: TSpeedButton;
    Mal: TSpeedButton;
    Minus: TSpeedButton;
    Plus: TSpeedButton;
    Löschen: TSpeedButton;
    Neu: TSpeedButton;
    Ende: TSpeedButton;
    Vorzeichen: TSpeedButton;
    Bruch: TSpeedButton;
    Prozent: TSpeedButton;
    Wurzel: TSpeedButton;
    Quadrat: TSpeedButton;
    Hochy: TSpeedButton;
    procedure Zahl1Click(Sender: TObject);
    procedure Zahl2Click(Sender: TObject);
    procedure Zahl3Click(Sender: TObject);
    procedure Zahl4Click(Sender: TObject);
    procedure Zahl5Click(Sender: TObject);
    procedure Zahl6Click(Sender: TObject);
    procedure Zahl7Click(Sender: TObject);
    procedure Zahl8Click(Sender: TObject);
    procedure Zahl9Click(Sender: TObject);
    procedure Zahl0Click(Sender: TObject);
    procedure KommaClick(Sender: TObject);
    procedure IstGleichClick(Sender: TObject);
    procedure PlusClick(Sender: TObject);
    procedure NeuClick(Sender: TObject);
    procedure MinusClick(Sender: TObject);
    procedure MalClick(Sender: TObject);
    procedure GeteiltClick(Sender: TObject);
    procedure VorzeichenClick(Sender: TObject);
    procedure LöschenClick(Sender: TObject);
    procedure EndeClick(Sender: TObject);
    procedure BruchClick(Sender: TObject);
    procedure ProzentClick(Sender: TObject);
    procedure WurzelClick(Sender: TObject);
    procedure key(Sender: TObject; var Key: Char);
    procedure QuadratClick(Sender: TObject);
    procedure HochyClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation
var Zahl: String;
x,Zwischenergebnis: real;
Operation: Integer;

{$R *.dfm}

procedure TForm1.BruchClick(Sender: TObject);
begin
if x <> 0 then
begin
  x:= StrToFloat(Edit1.Text);
  x:= 1/x;
  Edit1.Text:= FloatToStr(x);
  Zahl:= Edit1.Text;
end
else
ShowMessage('Von Null gibt es keinen Kerwert!');
end;

procedure TForm1.EndeClick(Sender: TObject);
begin
form1.Close;
end;

procedure TForm1.GeteiltClick(Sender: TObject);
begin
if Operation = 0 then Zwischenergebnis:= x;
if Operation = 4 then
 begin
   if x <> 0 then
   Zwischenergebnis:= Zwischenergebnis / x
   else ShowMessage('Division durch Null ist nicht möglich!');
 end;
  Edit1.Text:= '';
 x:=0;
 Operation:= 4;
end;

procedure TForm1.HochyClick(Sender: TObject);
begin
if x <> 0 then
begin
  x:= StrToFloat(Edit1.Text);
  x:= Power(x, Zwischenergebnis);
  Edit1.Text:= FloatToStr(x);
  Zahl:= Edit1.Text;
end;
end;

procedure TForm1.IstGleichClick(Sender: TObject);
begin
if Operation = 0 then Zwischenergebnis:= x;
if Operation = 1 then Zwischenergebnis:= Zwischenergebnis + x;
if Operation = 2 then Zwischenergebnis:= Zwischenergebnis - x;
if Operation = 3 then Zwischenergebnis:= Zwischenergebnis * x;
if Operation = 4 then
 begin
   if x <> 0 then
   Zwischenergebnis:= Zwischenergebnis / x
   else ShowMessage('Division durch Null ist nicht möglich!');
 end;
 Operation:= 0;
 x:= Zwischenergebnis;
 Edit1.Text:= FloatToStr(Zwischenergebnis);

end;

procedure TForm1.key(Sender: TObject; var Key: Char);
begin
begin
  if ord(key) = VK_RETURN then
  IstGleich.Click;
  if ord(key) = VK_BACK then
  Löschen.Click;
  if ord(key) = VK_ESCAPE then Ende.Click;
  if ord(key) = VK_SPACE then Neu.Click;
  
end;
case key of
  '1': Zahl1.click;
  '2': Zahl2.click;
  '3': Zahl3.click;
  '4': Zahl4.click;
  '5': Zahl5.click;
  '6': Zahl6.click;
  '7': Zahl7.click;
  '8': Zahl8.click;
  '9': Zahl9.click;
  '0': Zahl0.click;
  '+': Plus.click;
  '-': Minus.click;
  '/': Geteilt.click;
  '*': Mal.click;
  ',': Komma.click;
  '.': Komma.click;
end;
end;


procedure TForm1.KommaClick(Sender: TObject);
begin
if Pos(',',Edit1.Text)= 0 then
begin
Edit1.Text:= Edit1.Text + Komma.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;
end;

procedure TForm1.LöschenClick(Sender: TObject);
var i,j: Integer;
begin
j:= 0;
if Copy(Edit1.Text,1,1) = '-' then j:= 1;
i:= length(Edit1.Text);
if i > 1 + j then
begin
  Edit1.text:= Copy(Edit1.text,1,i-1);
  Zahl:= Edit1.Text;
  x:= StrToFloat(Zahl);
end;
end;

procedure TForm1.MalClick(Sender: TObject);
begin
if Operation = 0 then Zwischenergebnis:= x;
if Operation = 3 then Zwischenergebnis:= Zwischenergebnis * x;
 Edit1.Text:= '';
 x:=0;
 Operation:= 3;
end;

procedure TForm1.MinusClick(Sender: TObject);
begin
if Operation = 0 then Zwischenergebnis:= x;
if Operation = 2 then Zwischenergebnis:= Zwischenergebnis - x;
 Edit1.Text:= '';
 x:=0;

 Operation:= 2;
end;

procedure TForm1.NeuClick(Sender: TObject);
begin
Zwischenergebnis:= 0;
Edit1.Text:= '';
Operation:= 0;
end;

procedure TForm1.PlusClick(Sender: TObject);
begin
if Operation = 0 then Zwischenergebnis:= x;
if Operation = 1 then Zwischenergebnis:= Zwischenergebnis + x;
 Edit1.Text:= '';
 x:=0;
 Operation:= 1;
end;

procedure TForm1.ProzentClick(Sender: TObject);
begin
if x <> 0 then
begin
  x:= StrToFloat(Edit1.Text);
  x:= (Zwischenergebnis/100) * x;
  Edit1.Text:= FloatToStr(x);
  Zahl:= Edit1.Text;
end;
end;

procedure TForm1.QuadratClick(Sender: TObject);
begin
if x <> 0 then
begin
  x:= StrToFloat(Edit1.Text);
  x:= sqr(x);
  Edit1.Text:= FloatToStr(x);
  Zahl:= Edit1.Text;
end;
end;

procedure TForm1.VorzeichenClick(Sender: TObject);
begin
x:= StrToFloat(Edit1.Text);
x:= -x;
Edit1.Text:= FloatToStr(x);
Zahl:= Edit1.Text;
end;

procedure TForm1.WurzelClick(Sender: TObject);
begin
if x <> 0 then
begin
  x:= StrToFloat(Edit1.Text);
  x:= sqrt(x);
  Edit1.Text:= FloatToStr(x);
  Zahl:= Edit1.Text;
end;
end;

procedure TForm1.Zahl0Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl0.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

procedure TForm1.Zahl1Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl1.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

procedure TForm1.Zahl2Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl2.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

procedure TForm1.Zahl3Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl3.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

procedure TForm1.Zahl4Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl4.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

procedure TForm1.Zahl5Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl5.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

procedure TForm1.Zahl6Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl6.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

procedure TForm1.Zahl7Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl7.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

procedure TForm1.Zahl8Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl8.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

procedure TForm1.Zahl9Click(Sender: TObject);
begin
Edit1.Text:= Edit1.Text + Zahl9.Caption;
Zahl:= Edit1.Text;
x:= StrToFloat(Zahl);
end;

end.


Moderiert von user profile iconNarses: Beiträge zusammengefasst

und zwar ist es so:

wenn ich z.B. 3^3 rechnen will
gebe ich über meinen Taschenrechner 3 dann klick ich auf die Taste und dann wieder 3 ein so sollte er
funktionieren.
Bei mir ist aber wenn ich 3 klicke und dann die Taste kommt einfach eine 1...


Obl - Do 12.04.12 12:02

Das wird daran liegen das in der Variable "Zwischenergebnis" noch ein 0 steht.
Und 3 hoch 0 ist nun mal 1.


bummi - Do 12.04.12 12:03

Setze doch mal einen BreakPoint bei Zeile 113 (F5) und lass laufen, ich wette Zwischenergebnis ist 0


Hazel - Do 12.04.12 12:07

hab das mal gemacht und du hast recht kommt ech 0 raus^^
Ihr merkt schon ich bin ziemlicher Anfänger^^


bummi - Do 12.04.12 12:21

na und jeder hat mal angefangen ...
Vielleicht solltest Du Hoch wie die anderen Operatoren behandeln + - etc.


Hazel - Do 12.04.12 14:02

Danke bummi ;)
werd ich mal probieren :)

Moderiert von user profile iconNarses: Beiträge zusammengefasst

So vielen vielen dank an alle :)
werde das morgen mal weiter versuchen hab da jetzt keinen Nerv mehr für :D

Ich hätte noch eine frage:

Jetzt möchte ich das wenn ich den Taschenrechner starte und ihn maximiere sich der komplette Taschenrechner maximiert also die Buttons usw.
hab schon im Internet gesucht aber nichts passendes gefunden :(

Schon mal vielen Danke


Nersgatt - Do 12.04.12 15:03

user profile iconHazel hat folgendes geschrieben Zum zitierten Posting springen:

Ich hätte noch eine frage:

Neue Frage = neues Thema eröffnen, bitte.