Entwickler-Ecke
Sonstiges (Delphi) - Falsche Ausgabe
SRZ_DRESDEN - Sa 16.10.10 12:24
Titel: Falsche Ausgabe
Hallo, ich habe einen kleinen script gemacht:
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:
| procedure TForm1.Button1Click(Sender: TObject); begin i:= 1; AB := strtoint(edit1.text); AC := strtoint(edit2.text); BA := strtoint(edit3.text); BC := strtoint(edit4.text); CA := strtoint(edit5.text); CB := strtoint(edit6.text);
Avn :=0; Bvn :=0; Cvn :=0;
Azn :=0; Bzn :=0; Czn :=0;
for i := 1 to 6 do begin
A := AB + AC; B := BA + BC; C := CA + CB; Azn := A - Avn; Bzn := B - Bvn; Czn := C - Cvn; Avn := BA + CA ; Bvn := AB + CB; Cvn := AC + BC;
label13.Caption := inttostr(Azn); label14.Caption := inttostr(Bzn); label15.Caption := inttostr(Czn);
end;
end; |
, der mir ein par Zahlen ausrechnet.
wenn man jetzt folgende Werte einsetzt:
AB 1
AC 2
BA 3
BC 4
CA 5
CB 6
dann solte ja theoretich zum schluss (ine label 13 - 14) folgendes ausgegeben werden:
3 7 11
Doch leiter kommt -5 0 5 raus.
Wenn ich das Programm zwischendurdch anhalte, und schaue welchen wert im label gerade steht, dann steht auch da
3 7 11
. Was ist der Fehler?
jaenicke - Sa 16.10.10 13:04
Nach dem ersten Durchlauf der Schleife ist z.B. Avn nicht mehr Null, da passt deine Rechnung also schon nicht mehr.
Du hast da mehrere Probleme in dem Quelltext:
Erstens sind die Variablen und Komponenten schlecht bezeichnet, da weiß (außer dir im Moment noch) niemand was da eigentlich wo drin steht.
Zweitens benutzt du globale Variablen.
Und drittens: Wozu die Schleife und die vielen Zwischenvariablen? So wie es im Moment ist kann man die Rechnung auch deutlich vereinfachen (wenn man denn erst einmal herausgefunden hat was du damit erreichen willst...).
Hidden - Sa 16.10.10 13:18
Moin!
Zunächst einmal solltest du deinen Quelltext richtig einrücken, da kann selbst ein Profi nicht richtig drin lesen so.
Ich habe das mal gemacht, und Fragen in Kommentare geschrieben:
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:
| procedure TForm1.Button1Click(Sender: TObject); begin i:= 1; AB := strtoint(edit1.text); AC := strtoint(edit2.text); BA := strtoint(edit3.text); BC := strtoint(edit4.text); CA := strtoint(edit5.text); CB := strtoint(edit6.text);
Avn :=0; Bvn :=0; Cvn :=0;
Azn :=0; Bzn :=0; Czn :=0;
for i := 1 to 6 do begin A := AB + AC; B := BA + BC; C := CA + CB; Azn := A - Avn; Bzn := B - Bvn; Czn := C - Cvn; Avn := BA + CA ; Bvn := AB + CB; Cvn := AC + BC;
label13.Caption := inttostr(Azn); label14.Caption := inttostr(Bzn); label15.Caption := inttostr(Czn); end; end; |
Edit: Du setzt laut @jaenicke wohl voraus, dass einige deiner Variablen ihren Anfangswert behalten. Das ist nicht so, die musst du dann zum Zwischenspeichern in eine neue Variable kopieren.
lg,
SRZ_DRESDEN - Sa 16.10.10 14:00
Danke hab jetzt meinen Fehler gefunden, lag an der schleife :roll:
SRZ_DRESDEN - Sa 16.10.10 14:04
kleine frage noch.
hab zum beispiel:
Delphi-Quelltext
1:
| label14.Caption := inttostr(Bzn); |
ich möchte gerne pro schleife das die label zahl eins höher wird. bsp:
Delphi-Quelltext
1: 2: 3:
| for i := 1 to 6 do begin u:= u + 1; label1(u).Caption := inttostr(Bzn); |
wie macht man das?
jaenicke - Sa 16.10.10 14:19
Neue Frage, neuer Thread, siehe Richtlinien. ;-)
Schau dir einmal FindComponent an. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!