Autor |
Beitrag |
jackie05
      
Beiträge: 357
|
Verfasst: Mo 07.02.11 05:23
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
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 07.02.11 05:38
WAS funktioniert nicht und welche Schleife danach? Ich sehe da nur verschachtelte Schleifen.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: 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.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: 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 
      
Beiträge: 357
|
Verfasst: 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
Delphi-Quelltext
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 357
|
Verfasst: 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
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 07.02.11 13:29
Hier habe ich übrigens einmal ein ähnliches Programm geschrieben, vielleicht interessiert es dich ja:
www.delphi-forum.de/viewtopic.php?t=48160
|
|
jackie05 
      
Beiträge: 357
|
Verfasst: Mo 07.02.11 14:19
Vielen Dank.
Ich werde mal bei gelegenheit gucken.
Im Moment komme ich gut voran.
MfG
|
|
Tilman
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: 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; |
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Marc.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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 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. 
Einloggen, um Attachments anzusehen!
|
|
Tintenblut
      
Beiträge: 39
Erhaltene Danke: 2
|
Verfasst: 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.
      
Beiträge: 1876
Erhaltene Danke: 129
Win 8.1, Xubuntu 15.10
|
Verfasst: 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
      
Beiträge: 39
Erhaltene Danke: 2
|
Verfasst: 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
      
Beiträge: 141
W7
D2010, XE2
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
      
Beiträge: 1405
Erhaltene Danke: 51
Win 7, Android
Turbo Delphi, Eclipse
|
Verfasst: 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  da geht es ja darum, dass der Schüler es versteht, und nicht dass es schön aussieht, oder international verständlicher Code entsteht.
_________________ Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
|
|
Hobby-Programmierer
      
Beiträge: 238
Erhaltene Danke: 4
Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
|
Verfasst: 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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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.
|
|