Autor Beitrag
Samkirchner
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.05.08 12:21 
Hallo,

ich habe folgendes mir unklares Problem. Ich habe drei Textfelder, einen Button und eine Label gemacht. Nun will ich einen Dreisatz berechnen.

Der Code bzw. die Problemstelle lautet:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm4.cmdBerechnungDreClick(Sender: TObject);
begin
Merker := StrtoFloat ((txtdreiDrei*txtzweiDrei)/txteinsDrei);

end;

Merker habe ich auf real deklariert

Er gibt mir jedoch falscher Operandentyp (E2015) an. In der Hilfe steht jedoch nicht arg viel was mir helfen könnte, daher dieser Thread.

Für eventuelle Hilf bzw. wieso dies falsch ist, wäre ich sehr dankbar.

LG Sam

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Mo 05.05.08 12:27 
Du kannst nicht Texte miteinander multiplizieren/dividieren. Du musst zuerst die Texte in eine Zahl umwandeln (z.B. mit StrToFloat) und dann die Rechenoperationen durchführen.
Samkirchner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.05.08 12:34 
Ok, danke! Also muss ich wirklich jeden Text einzeln umwandeln, denn ich dachte bisher das es reicht, wenn ich am Anfang einmal StrtoFloat schreibe. Gibt es da nicht noch ne schönere Lösung??? Ich meine da ich erst vor ein paar Tagen mit Delphi begonnen habe, versuche ich mir gleich die schönere Arten einzuprägen.

Zumal er mir mit

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm4.cmdBerechnungDreClick(Sender: TObject);
begin
Merker := StrtoFloat (txtdreiDrei)* StrtoFloat (txtzweiDrei)/ StrtoFloat (txttxteinsdrei);

end;


überladene Version von StrtoFloat ausgibt :-(

Danke jedoch für deine schnelle Antwort

LG Sam

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mo 05.05.08 12:37 
was iKilledKenny meint, ist in etwa sowas:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm4.cmdBerechnungDreClick(Sender: TObject);
begin
Merker := StrtoFloat(txtdreiDrei) * StrtoFloat(txtzweiDrei) / StrtoFloat(txteinsDrei);
end;


Sauberer wäre es aber mit z.b 3 Var's (Zahl1, Zahl2, Zahl3), die immer bei der Eingabe belegt werden. Z.B. beim OnExit des Feldes mit der ersten Zahl prüfen, ob eine Zahl eingegeben wurde, wenn ja, diese in Zahl1 merken. Dasselbe mit den beiden anderen Feldern.
Dann könnte deine Berechnung so aussehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm4.cmdBerechnungDreClick(Sender: TObject);
begin
Merker := Zahl1 * Zahl2 / Zahl3;
end;


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
Samkirchner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.05.08 12:53 
Hm, ich glaube ich habe ein größeres Problem, denn es gehen beide Arten nicht wirklich.
Um alles zu sehen, stelle ich mal meinen kompletten Code rein, denn ich befürchte das da etwas anderes nicht stimmt, da er mir schon wieder folgendes bringt:

[Pascal Fehler] Unit4.pas(155): E2250 Es gibt keine überladene Version von 'StrToFloat', die man mit diesen Argumenten aufrufen kann

Das momentane Thema ist bei zeile 153
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:
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:
unit Unit4;

interface

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

type
  TForm4 = class(TForm)
    tab2: TPageControl;
    TabSheet1: TTabSheet;
    Label1: TLabel;
    txtEingabe: TEdit;
    cmd1: TButton;
    cmd2: TButton;
    cmdPlus: TButton;
    cmdErgebnis: TButton;
    cmd3: TButton;
    cmd4: TButton;
    cmd5: TButton;
    cmd6: TButton;
    cmd7: TButton;
    cmd8: TButton;
    cmd9: TButton;
    cmd0: TButton;
    cmdMinus: TButton;
    cmdMal: TButton;
    cmdGeteilt: TButton;
    cmdC: TButton;
    TabSheet2: TTabSheet;
    TabSheet3: TTabSheet;
    TabSheet4: TTabSheet;
    TabSheet5: TTabSheet;
    TabSheet6: TTabSheet;
    txteinsdrei: TEdit;
    lblgleinsdrei: TLabel;
    txtzweiDrei: TEdit;
    txtdreiDrei: TEdit;
    Label2: TLabel;
    lblergebnis: TLabel;
    cmdBerechnungDre: TButton;
    procedure cmd1Click(Sender: TObject);
    procedure cmd2Click(Sender: TObject);
    procedure cmdPlusClick(Sender: TObject);
    procedure cmdErgebnisClick(Sender: TObject);
    procedure cmd3Click(Sender: TObject);
    procedure cmd4Click(Sender: TObject);
    procedure cmd5Click(Sender: TObject);
    procedure cmd6Click(Sender: TObject);
    procedure cmd7Click(Sender: TObject);
    procedure cmd8Click(Sender: TObject);
    procedure cmd9Click(Sender: TObject);
    procedure cmd0Click(Sender: TObject);
    procedure cmdMinusClick(Sender: TObject);
    procedure cmdMalClick(Sender: TObject);
    procedure cmdGeteiltClick(Sender: TObject);
    procedure cmdCClick(Sender: TObject);
    procedure cmdBerechnungDreClick(Sender: TObject);



  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form4: TForm4;
  Zahl1, Zahl2, Zahl3,Merker,Rechner,Ergebnis: real;
  Rechenart : integer;
  test : boolean;

implementation

{$R *.dfm}
procedure TForm4.cmd1Click(Sender: TObject);
begin
If test then
txtEingabe.text := '';
test:=false;

txtEingabe.text := txtEingabe.Text + '1';
end;

procedure TForm4.cmd2Click(Sender: TObject);
begin
if test  then
txtEingabe.text := '';
test:= false;

txtEingabe.text := txtEingabe.Text + '2';
end;

procedure TForm4.cmd3Click(Sender: TObject);
begin
If test then
txtEingabe.Text := '';
test := false;

txtEingabe.text:= txtEingabe.Text + '3';
end;
 
procedure TForm4.cmd4Click(Sender: TObject);
begin
if test  then
txtEingabe.Text := '';
test:= false;
txtEingabe.Text := txtEingabe.Text + '4';
end;

procedure TForm4.cmd5Click(Sender: TObject);
begin
if test then
txtEingabe.text := '';
test:= false;
txtEingabe.Text := txtEingabe.Text + '5';
end;

procedure TForm4.cmd6Click(Sender: TObject);
begin
if test then
txtEingabe.Text :='';
test:= false;
txtEingabe.Text := txtEingabe.Text + '6';
end;

procedure TForm4.cmd7Click(Sender: TObject);
begin
if test then
txtEingabe.Text := '';
test := false;
 txtEingabe.Text := txtEingabe.Text + '7';
end;

procedure TForm4.cmd8Click(Sender: TObject);
begin
if test then
txtEingabe.text := '';
test := false;
txtEingabe.Text := txtEingabe.Text + '8';
end;

procedure TForm4.cmd9Click(Sender: TObject);
begin
if test then
txtEingabe.Text := '';
test:= false;
txtEingabe.Text := txtEingabe.Text + '9';
end;

procedure TForm4.cmdBerechnungDreClick(Sender: TObject);
begin
txteinsdrei := StrtoFloat (Zahl1);
txtzweiDrei := StrtoFloat (Zahl2);
txtdreiDrei := StrtoFloat (Zahl3);
Merker := Zahl1 * Zahl2 / Zahl3;

end;

procedure TForm4.cmdCClick(Sender: TObject);
begin
txtEingabe.text := '';
end;

procedure TForm4.cmd0Click(Sender: TObject);
begin
if test then
txtEingabe.Text :='';
test :=false;
txtEingabe.Text := txtEingabe.Text + '0';
end;

procedure TForm4.cmdPlusClick(Sender: TObject);
begin
Merker:= strtofloat(txtEingabe.text);
txteingabe.text := '';
Rechenart := 0;
end;



procedure TForm4.cmdMalClick(Sender: TObject);
begin
Merker := StrToFloat (txtEingabe.Text);
txtEingabe.Text := '';
Rechenart := 2;
end;

procedure TForm4.cmdMinusClick(Sender: TObject);
begin
 Merker := StrToFloat (txtEingabe.Text);
 txtEingabe.text := '';
 Rechenart := 1;
end;

procedure TForm4.cmdGeteiltClick(Sender: TObject);
begin
Merker := StrToFloat (txtEingabe.text);
txtEingabe.Text := '';
Rechenart := 3;
end;

procedure TForm4.cmdErgebnisClick(Sender: TObject);
begin
Test := true;
case Rechenart of
0:begin
  Rechner := strtofloat(txteingabe.Text);
  ergebnis := merker + rechner;
  txteingabe.Text := floattostr(ergebnis);
  end;
1:begin
  Rechner := strToFloat (txtEingabe.text);
  ergebnis := merker - rechner;
  txtEingabe.text := FloatToStr (ergebnis);
  end;
2:begin
  Rechner:= strToFloat (txtEingabe.Text);
  ergebnis := merker * rechner;
  txtEingabe.Text := FloattoStr (ergebnis);
  end;
3:begin
  rechner := strToFloat (txtEingabe.Text);
  if rechner = 0 then
  label1.Caption := 'Fehler'
  else
  ergebnis := merker / rechner;
  txtEingabe.Text := FloatToStr (ergebnis);
  end;
end;



end;





end.


Sorry, wenn ich mich ein wenig dumm anstelle, aber Delphi ist neu für mich, da wir in der Berufsschule Java haben und ich Delphi für meine neue Lehrstelle benötige mache ich das erst seit ein paar Tagen.

LG Sam

Moderiert von user profile iconAXMD: Code- durch Delphi-Tags ersetzt


Zuletzt bearbeitet von Samkirchner am Mo 05.05.08 12:56, insgesamt 1-mal bearbeitet
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 05.05.08 12:56 
Zahlx ist ja schon eine Fließkommazahl. Es sollte wohl eher:
ausblenden Delphi-Quelltext
1:
txteinsdrei := FloatToStr (Zahl1);					

heißen

_________________
Markus Kinzler.
Samkirchner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.05.08 13:04 
Ok, der Compiler erkennt es nun, danke!!! Leider kommt nun ein Gleitkomma Fehler der wie folgt lautet:

Erste Gelegenheit für Exception bei $7C812A5B. Exception-Klasse EInvalidOp mit Meldung 'Ungültige Gleitkommaoperation'. Prozess Project2.exe (2348)

Man o Meter ist das kompliziert.
iKilledKenny
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 394
Erhaltene Danke: 8

Win XP
D5 Prof, C# Express 2005
BeitragVerfasst: Mo 05.05.08 13:06 
Ich denke eher andersrum:

ausblenden Delphi-Quelltext
1:
ZahlXYZ := StrToFloat (textXYZ);					


8)
Samkirchner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.05.08 13:13 
user profile iconiKilledKenny hat folgendes geschrieben:
Ich denke eher andersrum:

ausblenden Delphi-Quelltext
1:
ZahlXYZ := StrToFloat (textXYZ);					


8)


Ja, so geht es!!! Wobei ich nicht verstehe, wieso er sich bei

ausblenden Quelltext
1:
txteinDrei.Text := FloattoString (Zahl1);					


aufhängt und bei

ausblenden Delphi-Quelltext
1:
ZahlXYZ := StrToFloat (textXYZ);					


nicht!!! Müsste doch eigentlich das selbe sein! *grübel*

Danke an alle die mir geholfen haben :-).

LG sam
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mo 05.05.08 13:13 
user profile iconSamkirchner hat folgendes geschrieben:

da wir in der Berufsschule Java haben und ich Delphi für meine neue Lehrstelle benötige

cool, welchen beruf lernst denn du?

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Samkirchner Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Mo 05.05.08 13:15 
user profile iconXion hat folgendes geschrieben:
user profile iconSamkirchner hat folgendes geschrieben:

da wir in der Berufsschule Java haben und ich Delphi für meine neue Lehrstelle benötige

cool, welchen beruf lernst denn du?


Anwendungsentwickler (bin aber erst im ersten Lehrjahr) :-)
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1889
Erhaltene Danke: 1

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Mo 05.05.08 13:24 
Das eine macht aus einem String eine Zahl, und das andere halt das umgekehrte.
Warum du nicht 2 mal das selbe machen kannst ist ja eigentlich klar: Du kannst ja z.B. einen eingepackten Brief nicht nochmal einpacken (in einen Umschlag gleicher Größe, das passt ja gar nicht) und dann erwarten, dass er ausgepackt ist.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.