Ich programmiere gerade ein Sudoku und will nun zufällig Zahlen in die Felder einfügen.
Mit folgender Prozudur habe ich es hinbekommen, dass sich in den senkrechten Spalten keine Zahlen doppeln.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| with Stringgrid1 do Begin for i:=0 to 8 do Begin menges[i]:=[]; for j:=0 to 8 do Begin Repeat cells[i,j]:=IntToStr(random(9)+1); zahl:=StrToInt(cells[i,j]); Until not (zahl in menges[i]); menges[i]:=menges[i]+[zahl]; end; end; |
;
Nun habe ich aber das Problem, dass bei den waagerechten Zeilen, dann immer doppelte Zahlen kommen. Ich habe schon versucht, mir einen Algorhytmus dazu auszudenken, aber leider habe ich damit eine Endlosschleife gebaut. Habe schon ganz viel versucht, das umzustellen, aber ich bekomme es leider nicht hin!
Bitte helft mir, wie kann ich überprüfen, dass in den waagerechten Zeilen keine doppelten Zahlen sind?
hier mein Versuch:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| with Stringgrid1 do Begin for k:=1 to 9 do Begin mengeW[k]:=[]; for j:=0 to 8 do Begin for i:=0 to 8 do Begin mengeW[k]:=[StrToInt(cells[i,j])]; Repeat cells[i,j]:=IntToStr(random(9)+1); kontrolle:=StrToInt(cells[i,j]); Until not (zahl in mengew[k]); mengeW[k]:=mengeW[k]+[kontrolle]; |
ich hatte mir gedacht, dass ich in einer weiteren Menge, die schon vorhandenen Zahlen speichere und dann die Zeile durchlaufe und neue Zahlen einfüge, aber jetzt fügt er ja auch Zahlen dort ein, wo eigentlich welche stehen, die schon in der Menge sind. Wie mache ich, dass er diese Felder übergeht?
Es wäre nett, wenn ihr mir helfen könntet, denn ich komme nicht mit meinen Grundkenntnissen weiter.
LG
Moderiert von
Gausi: Code- durch Delphi-Tags ersetzt
Moderiert von
Narses: Titel geändert.