Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - bei einer simplen rechnung wird eine variable einfach zu 0


UNEC_1 - Fr 16.01.04 18:49
Titel: bei einer simplen rechnung wird eine variable einfach zu 0
Also ich möchte den Inhalt eines Editfeldes von einem anderen Abziehen doch ers wenn das eine =< 0 ist!

Das sieht bei mir so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
var
a,b,c:=real;
begin

a:=strtofloat(edit1.text);
b:=strtofloat(edit2.text);
c:=strtofloat(edit3.text);

if a > 0 then
a:=a-b
else
c:=c-b;

a:=floattostr(edit1.text);
c:=floattostr(edit3.text);
end;


Das Problem welches esitiert ist das so wie das ausgeführt wird a automatich zu 0!
Und ich hab echt keinen schimmer warum!

Moderiert von user profile iconKlabautermann: Delphi-Tags hinzugefügt.


Ex0rzist - Fr 16.01.04 18:56

Sorry, aber ich sehe keinen Sinn in deiner Prozedur.
Der Compiler müsste dir Warnungen ausgeben á la "Variable a wird niemals verwendet".

Du weist nämlich erst a den Wert von Edit1 zu, dann ziehst du b ab und weist anschließend wieder a den Wert von Edit1 zu, greifst aber nie auf a zu.

Nur wenn (a = b) oder (Edit1.Text = '0') ist, wird a zu Null.


UNEC_1 - Fr 16.01.04 19:01

ten gefasst wenn schilde noch lebenspunkte haben ziehe schaden von schilden ab
else
ziehe schaden von hülle ab!

die fehler meldung kommt nur von b da diese nicht ausgeben wird aber ein wert hat! der vorher berechnet wurde!


Klabautermann - Fr 16.01.04 19:15

Hallo,

dein Titel enspricht nicht unseren Richtlinien. Diese sagen zu dem Thema:

Delphi-Forum Richtlinien hat folgendes geschrieben:

1.1 Beiträge
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist. Eine Pseudocodezeile oder die Nennung des Objektes, um welches es sich in dem Beitrag handelt, helfen da schon mehr weiter.


Ändere bitte das den Titel, indem du deinen ersten Beitrag dieses Threads noch einmal Editierst. Einfach bei dem Beitrag auf Edit clicken, den Titel ändern und wieder auf Absenden.

Gruß
Klabautermann


Delete - Fr 16.01.04 19:21

Ex0rzist hat folgendes geschrieben:
Sorry, aber ich sehe keinen Sinn in deiner Prozedur.

*hi hi* Da bist du nicht der Einzige.

Zitat:
Der Compiler müsste dir Warnungen ausgeben á la "Variable a wird niemals verwendet".

Nein, benutzt hat UNEC_1 ja alles, darum würde ich auf die Warnung nicht warten. Ich würde eher die Fehler beheben, die im Code drin sind.

UNEC_1 hat folgendes geschrieben:
die fehler meldung kommt nur von b da diese nicht ausgeben wird aber ein wert hat! der vorher berechnet wurde!

Entschuldige, mein Universalübersetzer ist gerade in der Werkstatt. Will sagen: Ich habe Probleme, diesen Satz zu verstehen, darum rate ich mal -

Im Edit1 steht der Wert für die Schilde, im Edit3 der für die Hülle. Und das Edit2 enthält den Schadenswert. Wenn ich die Fehler behebe und deinen Code dann laufen lasse, dann funktioniert es problemlos.


hassedelphi - Fr 16.01.04 19:22

so wie ich dass sehe is dein problem die ausgabe


Delphi-Quelltext
1:
 editx.text:=floattostr(a);                    


so müsste das doch aussehen oder?
und nicht so wie du zum schluss. da überschreibst du a ja wieder.


UNEC_1 - Fr 16.01.04 19:30

Ne also daran liegt es nicht das war nur ein schriebfehler von mir oben!
hier mal der Orginalcode(abber bitte nicht über die Variablen aufregen:));

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
aa:=strtofloat(sk.text);
bb:=strtofloat(hp.text);
cc:=strtofloat(vsk.text);
dd:=strtofloat(vhp.text);
ii:=strtofloat(edit2.text);
jj:=strtofloat(edit3.text);

if aa > 0 then
aa:=aa-jj
else
bb:=bb-jj;

if cc > 0 then
cc:=cc-ii
else
dd:=dd-ii;

sk.text:=FloatToStr(ee);
hp.text:=FloatToStr(ff);
vsk.text:=FloatToStr(gg);
vhp.text:=FloatToStr(hh);


Delete - Fr 16.01.04 19:47

Sehr schön. Du rechnest wie wild mit den Variablen aa, bb, cc, dd rum, aber ausgeben tust du die nicht initialisierten Variablen ee, ff, gg, hh. Was erwartest du also?


UNEC_1 - Fr 16.01.04 22:46

Danke!
manchmal sieht den Wald vor lauter Bäumen nicht mehr!


Delete - Sa 17.01.04 08:22

Hättest du mal etwas sinnvollere Variablennamen genommen, wäre dir das nicht passiert. Da bin ich mir ziemlich sicher. :roll: