Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Probleme mir For-Schleife?
jackie05 - Mo 07.02.11 05:23
Titel: Probleme mir For-Schleife?
Hallo,
ich versuche schon seit paar Stunden mein problem zu lösen, leider ohne erfolg.
Die For-Schleife zählt irgendwie nicht mehr korrekt und davor hat alles Wunderbar funktioniert.
Hier mal die Schleife:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| for y:=0 to 2 do begin for x:=0 to 2 do begin if (Spielfeld[x][y].Wert > 0) then begin for yy:=y to 2 do begin for xx:=(x+1) to 2 do begin if (Spielfeld[xx][yy].Wert = Spielfeld[x][y].Wert) then begin Form1.Caption := 'Test: Wird ausgeführt!'; end; end; end; end; end; end; |
Ich weiss nicht ob es an Delphi oder an mir liegt, weil ich erkenne bei meinem Code wirklich keinen Fehler.
Bis Zeile 4 funktioniert alles Wunderbar, nur die Schleife danach funktioniert einfach nicht mehr korrekt.
Ich bedanke mich schonmal im Voraus.
MfG
Delete - Mo 07.02.11 05:38
WAS funktioniert nicht und welche Schleife danach? Ich sehe da nur verschachtelte Schleifen.
jaenicke - Mo 07.02.11 06:32
Kann es sein, dass du einfach nur im Debugger schaust und dort falsche Werte für die Schleifenvarialen siehst?
Das liegt dann einfach nur an der Compileroptimierung, funktionieren tut es trotzdem richtig.
Bergmann89 - Mo 07.02.11 11:01
Hey,
hast du das Spielfeld-Array richtig initialisiert? Wenn die Indices der Schleifen größer sind als der reservierte Speicher des Array. Dann überschreibst du Speicher der mit dem Array nix zu tun hat un da führt dann zu komischen Fehlern...
MfG Bergmann.
jackie05 - Mo 07.02.11 11:48
Danke euch für die antworten.
Die Felder sind schon richtig initialisiert worden, wenn ich die verschachtelte Schleifen auf 0 setze, dann funktioniert das:
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:
| for y:=0 to 2 do begin for x:=0 to 2 do begin if (Spielfeld[x][y].Wert > 0) then begin for j:=0 to 2 do begin for i:=0 to 2 do begin if not (i = x) then begin if not (j = y) then begin if (Spielfeld[i][j].Wert = Spielfeld[x][y].Wert) then begin Form1.Caption := 'Test: Wird ausgeführt!'; Spielfeld[x][y].Doppelt := 1; Spielfeld[i][j].Doppelt := 1; end; end; end; end; end; end; end; end; |
Aber ich möchte das die Schleife ab dort Weiter läuft, wo Spielfeld[x][y].Wert > 0 ist, das will aber irgendwie nicht funktionieren.
so funktioniert es:
Delphi-Quelltext
1: 2:
| for j:=0 to 2 do begin for i:=0 to 2 do begin |
und das hier funktioniert irgendwie nicht:
Delphi-Quelltext
1: 2:
| for j:=y to 2 do begin for i:=(x+1) to 2 do begin |
Woran könnte das denn liegen?
MfG
jackie05 - Mo 07.02.11 12:41
Ich habe das jetzt hinbekommen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| for y:=0 to 2 do begin for x:=0 to 2 do begin if (Spielfeld[x][y].Wert > 0) then begin z := (x+1); for j:=y to 2 do begin for i:=z to 2 do begin if (Spielfeld[i][j].Wert = Spielfeld[x][y].Wert) then begin Form1.Caption := 'Test: Wird ausgeführt!'; Spielfeld[x][y].Doppelt := 1; Spielfeld[i][j].Doppelt := 1; end; end; z := 0; end; end; end; end; |
Der fehler lag daran, das die Schleife
Delphi-Quelltext
1:
| for i:=(x+1) to 2 do begin |
niemals die 0 erreicht hat, deshalb habe ich eine neue Viariable erstellt namens z und habe dort die zuweisung
gemacht und nach jede j durchlauf setze ich sie wieder auf 0.
Ich danke euch trotzdem für die Hilfe.
Edit: Ups, Sry wegen Doppelpost, mir ist das jetzt erst aufgefallen.
MfG
jaenicke - Mo 07.02.11 12:54
Heißt aber auch, dass nur bei j = y die innere Schleife i bei x + 1 losläuft und sonst bei 0. Wenn das so gewollt ist, ist das ja ok...
jackie05 - Mo 07.02.11 13:14
Ja, das möchte ich so. ;-)
Ich bin dabei ein Sudoku Spiel zu schreiben und ich prüfe die Felder auf doppelte Zahlen, weil ich auch die 3*3 Feld blöcke auf doppelte Zahlen prüfen möchte.
Also, wenn Spielfeld[x][y].Wert > 0 ist, dann läuft die verschachtelte Schleife weiter, und da nicht das gleiche Feld auf doppelte Zahl geprüft werden soll, addiere ich einfach z := (x+1) dazu und j kann den gleichen Wert wie y haben.
MfG
jackie05 - Mo 07.02.11 14:19
Vielen Dank.
Ich werde mal bei gelegenheit gucken.
Im Moment komme ich gut voran. ;-)
MfG
Tilman - Mo 07.02.11 14:41
Ich empfehle dir, deine ends zu kommentieren
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| end; end; z := 0; end; end; end; end; |
Marc. - Mo 07.02.11 14:55
Tilman hat folgendes geschrieben : |
Ich empfehle dir, deine ends zu kommentieren |
Alternativ oder sogar zusätzlich könntest Du auch das
CnPack [
http://www.cnpack.org/showdetail.php?id=456&lang=en] verwenden. Wie dem Screenshot im Anhang zu entnehmen ist, wird das ganze damit ziemlich farbenfroh. Die Zuordnung lässt sich beqeuem via Shortcut zu- und abschalten. :)
Tintenblut - Mo 07.02.11 15:02
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Empfehlenswert, wenn man Augenkrebs bekommen will ;)
Wenn sich dann jemand auf nem anderen Client den Source anschauen will, muss er das Pack auch installiert haben?
Marc. - Mo 07.02.11 15:03
Tintenblut hat folgendes geschrieben : |
Wenn sich dann jemand auf nem anderen Client den Source anschauen will, muss er das Pack auch installiert haben? |
Nein, das wirkt sich ja nur auf die Darstellung in der IDE aus. Mit dem Code oder dem Projekt an sich hat das also gar nichts zu tun.
Tintenblut - Mo 07.02.11 15:10
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Sorry. War eine rein rhetorische Frage :)
Da meines Erachtens das Kommentieren des Quelltextes nicht nur für den Programmierer selbst wichtig ist ^^
sky21 - Mo 07.02.11 17:27
OT: Mir fällt auf, dass in letzter Zeit hier vermehrt Code mit Deutschen Wörtern gepostet wird. Wird dies an deutschen Schulen tatsächlich so doziert oder passiert dies einfach aus Unwissenheit?
Der Sprachmix wie "If MeinWert then" sieht doch einfach Schei** aus. Punkt.
Die eigene Sprache in aller Ehre, aber ein irgendwo muss es doch auch Grenzen geben.
PS: Unser Dozent hat damals gesagt, wer ein in's Deutsche übersetze Programmierer-Buch liest, liest veraltetes Wissen ;-)
jaenicke - Mo 07.02.11 17:40
Die meisten können vermutlich einfach schlicht nicht so gut Englisch. ;-)
Ich meine, wenn mir eine Sprache nicht so gut sitzt, würde ich die auch nicht gerne für Bezeichner nutzen. einfach, weil ich es dann später schlecht selbst lesen kann.
Dass es als Softwareentwickler eigentlich eine Selbstverständlichkeit ist, Englisch zu können (und dort dann auch zu nutzen), ist eine andere Sache. Das gilt ja nicht für Schüler. ;-)
Tilman - Mo 07.02.11 17:48
sky21 hat folgendes geschrieben : |
OT: Mir fällt auf, dass in letzter Zeit hier vermehrt Code mit Deutschen Wörtern gepostet wird. Wird dies an deutschen Schulen tatsächlich so doziert oder passiert dies einfach aus Unwissenheit? |
Bei uns früher wurden in der Schule tatsächlich meist deutsche Bezeichner verwendet, ich wüsste auch nicht was daran verkehrt sein soll, oder gar mit Unwissenheit zu tun haben soll :gruebel: da geht es ja darum, dass der
Schüler es versteht, und nicht dass es schön aussieht, oder international verständlicher Code entsteht.
Hobby-Programmierer - Di 08.02.11 17:38
Ich würde sogar behaupten das es gerade für Anfänger nicht so leicht ist aus fremden Code zu lernen bzw. bei eigenem Code Fehler zu finden wenn alles einheitlich in Englisch geschrieben wurde.
Zumindest mein Sohn tat sich da unheimlich schwer, weswegen wir alles selbsterstellte anfangs 'eingedeutsch' haben.
jaenicke - Di 08.02.11 18:34
Das liegt aber wie gesagt an den Sprachkenntnissen. Wer nicht so gut Englisch kann, kommt eben nicht so gut damit klar. Wer gut Englisch kann, für den macht es wohl kaum einen Unterschied. Ich realisiere z.B. bei einem englischen Text oder Bezeichner gar nicht mehr, dass es Englisch ist.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!