Forum: Object-Pascal / Delphi-Language
Delphi
by Volker Z.,
28. Jan 2013
Hallo,
ich las gerade eben nochmals meinen letzten Beitrag, und ich muss zugeben dieser war nun wirklich nicht verständlich formuliert. Es tut mir sehr leid, dadurch vielleicht mehr Verwirrung gestiftet, als zu einer Lösung beigetragen zu haben.
Mit:
und dem nachfolgenden bezog ich mich auf das, meiner Meinung nach falsche Prüfen der Bedingung IsValid(SG) in der Schleifenbedingung. Und das...
Forum: Object-Pascal / Delphi-Language
Delphi
by Volker Z.,
27. Jan 2013
Hallo,
ich habe mich bis zum heutigen Tag noch nie mit dem Thema Sudoku näher auseinandergesetzt. Ich weiß nur: Es ist eine Anordnung von neun Ziffern verteilt auf neun Blöcke, so dass pro Block, pro Spalte und pro Zeile jede Ziffer nur einmal vorkommt.
Wenn ich das recht verstehen, dann hast Du also als Ausgangspunkt ein "gültiges Sudoku Spielfeld"!. In Deiner while-Schleife prüfst Du,...
Forum: Object-Pascal / Delphi-Language
Delphi
by Volker Z.,
26. Jan 2013
Hallo,
Vermutlich liegt es daran, dass beim Schleifendurchlauf die zufällig gewählte Zelle bereits bei einem vorherigen Lauf zurückgesetzt wurde. Versuch mal:
while ((IsValid(SG)=true) and (Counter>=20)) do
begin
Col:=random(9);
Row:=random(9);
Forum: Object-Pascal / Delphi-Language
Delphi
by Volker Z.,
25. Jan 2013
Hallo,
Nicht nur theoretisch wird eine Zelle (Zeile fix ein Spalte) zurückgegangen, nur praktisch bringt Dir das nichts.
In meinem Beispiel
ist - wie erwähnt - für die letzte Spalte in der 2. Reihe nur noch die 1 möglich. Gehst Du im Programm eine Spalte zurück und versuchst diese erneut mit einem neuen Zufallswert (es sind nur die 1 und 9 möglich) zu belegen, dann rennt Dein Programm...
Forum: Object-Pascal / Delphi-Language
Delphi
by Volker Z.,
24. Jan 2013
Hallo,
Lesestoff gibt zum Thema Sudokus generieren / lösen es jede Menge (ein kleiner Auszug):
Sudoku
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=1756&lngWId=7
http://www.entwickler-ecke.de/topic_Sudoku+Cocktail+15+loest+und+generiert+Sudoku+Raetsel_48160,0.html
und natürlich auch bei...
Forum: Object-Pascal / Delphi-Language
Delphi
by Volker Z.,
24. Jan 2013
Hallo,
in Deiner FillUp-Routine füllst Du das Stringgrid von oben nach unten und von links nach rechts. Dabei ermittelst Du zufällige Werte und prüfst, ob das in die Zeile, Spalte bzw. Block passt. Dieses Vorgehen wird wohl nicht zielführend sein. Beispiel:
1. Reihe: 6 3 2 4 9 5 7 1 8
2. Reihe: 7 4 5 3 6 8 2 9
Da geht jetzt wohl nur noch SG.Cells = 1, aber das fällt bei der Prüfung...
Forum: Object-Pascal / Delphi-Language
Delphi
by Volker Z.,
24. Jan 2013
Hallo,
vielleicht hast Du es ja schon gefunden. Wenn nicht schau Dir mal die procedure TestValues an. Wenn TryNumber erfüllt ist, wie kann dann die entsprechende Zelle leer sein? Demnach ist die Variable Test ab der zweiten Zeile n-te Spalte False und Dein Programm ruf so lange FillUp(SG,Col,Row) bis es scheppert.
Mach mal ein or draus.
Gruß