hws schrieb am 28.December.2008, 22:36:34 in der Kategorie pc.coding
Sudoku in VBA /3x3 Feld prüfen
Anderer Ansatz: zu jedem Zeipunkt muss es (mindestens) ein leeres Feld geben, in das nur EINE Zahl passt (wenn das Sudoku eindeutig lösbar sein soll)
Dieses Feld finden (in dem alle duchprobiert werden, ob es dort nur eine Lösung gibt)
Zahl reinschreiben und von vorn anfangen, bis alle Felder gelöst.
> Ich hätte gerne eine
> Funktion in der ich nur die Koordinaten übergebe und die Funktion die
> überprüft, weiß selber welches der neun 3x3 Quadrate überprüft werden soll.
Beschränken wir uns auf eine Zeile:
Dort gibt es das erste 3x3 Quadrat, das zweite und das dritte.
X-Werte 1,2,3 wählen das erste Quadrat, 4,5,6 das zweite und 7,8,9 das dritte.
Kann man ne Tabelle machen oder ne Funktion int(x/3) [oder so ähnlich. mal durchprobieren und evtl x+0,5 o.ä. einsetzen, bis es passt].
Das selbe mit den 3 Spalten und den y-Werten.
[x + 3*(y-1)] ist dann das entsprechende 3x3 Quadrat (wenn man von oben links nach unten rechts durchzählt).
Dann ist das 3er Quadrat festgelegt.
Nächster Schritt: welche Kästchen sind jeweils zu dem entsprechenden der neun 3x3 Quadrate zu prüfen.
Auch wieder Tabelle oder ne trickreiche Rechenfunktion.
> Die einzige Idee, die ich habe ist das ganze mit select case zu versuchen
> und dann wirklich neun Unterfunktionen zu schreiben.
Und warum nicht? Irgendwie brauchst du eh 9 Funktionen oder entsprechende case-Anweisungen um das zu bewerkstelligen. Ob du\'s nun direkt hinschreibst, in eine Unterfunktion, oder eine Unterfunktion einer Unterfunktion - egal. Letzteres dürfte übersichtlicher sein.
> ..ich habe leider aber große Probleme den fremden Code zu verstehen ..
nun ja, dann wirst du auch Probleme haben, selbst einen effizienten und eleganten Code zu schreiben. Zu beidem braucht man Erfahrung und Routine im Programmieren.
> sehe aber, dass die vorhandenen Lösungen nicht so umständlich sind.
Dann lass sie doch mal im Single-Sgtep ablaufen und verfolge die Ergebnisse.
> Könnt ihr mir vielleicht erklären wie
> der Algorithmus aussehen muss?
>
> Private function quadrat (x as integer, y as integer) as Boolean
> ‘ hier fehlt mir die Idee
> End Function
Du willst nicht nur den Algorithmus erklärt haben, sondern auch das dazu passende Programmteil / komplette Programm bis ins kleinste vorgekaut haben.
Und was bitte soll das Ergebnis wahr/falsch bedeuten?
Ich denke, du willst aus der x und y Position die Nummer des 3x3 Quadrates errechnen?
Das ergäbe nen Integer (1..9) und kein Boolean.
Vielleicht solltest du doch erstmal einige Übungen in VBA machen, bevor du so ein Projekt in Angriff nimmst.
Das Durchsteppen fremder Programme im SingleStep und nachvollziehen, was da passiert, ist auch ne gute Übung.
hws