Autor Beitrag
jackie05
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  //for j:=0 to 8 do begin
    for y:=0 to 2 do begin
      for x:=0 to 2 do begin
        if (Spielfeld[x][y].Wert > 0then
        begin
          for yy:=y to 2 do begin
            for xx:=(x+1to 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;
  //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



BeitragVerfasst: Mo 07.02.11 05:38 
WAS funktioniert nicht und welche Schleife danach? Ich sehe da nur verschachtelte Schleifen.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
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)
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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:
ausblenden 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 j:=0 to 8 do begin
    for y:=0 to 2 do begin
      for x:=0 to 2 do begin
        if (Spielfeld[x][y].Wert > 0then
        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;
  //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:
ausblenden Delphi-Quelltext
1:
2:
for j:=0 to 2 do begin
for i:=0 to 2 do begin


und das hier funktioniert irgendwie nicht:
ausblenden Delphi-Quelltext
1:
2:
for j:=y to 2 do begin
for i:=(x+1to 2 do begin


Woran könnte das denn liegen?

MfG
jackie05 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: Mo 07.02.11 12:41 
Ich habe das jetzt hinbekommen.

ausblenden 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 > 0then
          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
ausblenden Delphi-Quelltext
1:
for i:=(x+1to 2 do begin					

niemals die 0 erreicht hat, deshalb habe ich eine neue Viariable erstellt namens z und habe dort die zuweisung
ausblenden Delphi-Quelltext
1:
z := (x+1);					

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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 357



BeitragVerfasst: Mo 07.02.11 14:19 
Vielen Dank.
Ich werde mal bei gelegenheit gucken.

Im Moment komme ich gut voran. ;-)

MfG
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 07.02.11 14:41 
Ich empfehle dir, deine ends zu kommentieren
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
                end// if (Spielfeld[i][j]
              end// for i
              z := 0;
            end// for z
          end// if (Spielfeld[x][y]
        end// for x
      end// for y

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Marc.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 07.02.11 14:55 
user profile iconTilman hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 39
Erhaltene Danke: 2



BeitragVerfasst: Mo 07.02.11 15:02 
Moderiert von user profile iconNarses: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1876
Erhaltene Danke: 129

Win 8.1, Xubuntu 15.10

BeitragVerfasst: Mo 07.02.11 15:03 
user profile iconTintenblut hat folgendes geschrieben Zum zitierten Posting springen:
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 39
Erhaltene Danke: 2



BeitragVerfasst: Mo 07.02.11 15:10 
Moderiert von user profile iconNarses: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 141

W7
D2010, XE2
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Mo 07.02.11 17:48 
user profile iconsky21 hat folgendes geschrieben Zum zitierten Posting springen:
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.

_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
Hobby-Programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 238
Erhaltene Danke: 4

Win XP Pro, Vista Ultimate Trial :o)
D6 Pro, D7 Pro, Turbo, XE SE
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.