Einzelnen Beitrag anzeigen

Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#9

Re: Zugriffsverletzung

  Alt 30. Jun 2006, 11:01
Ich will Dich nicht enttäuschen, aber so kommst Du leider nicht weit.
Als Speicher für die Felder würde ich Dir ein Array [0..8,0..8] of Byte vorschlagen.
Das Füllen dieses Arrays würde ich mit Backtracking algorithmus tun.
Die Bedingung dafür dass eine best. Zahl in ein Feld passt, ist ja, dass sie Zahl weder in der selben Reihe, noch in der selben Spalte, noch im selben Feld schonmal steht. Dafür würd ich mir ne funktion schreiben ala ZahlGültig(Zeile, Spalte, Zahl): Boolean.
Jetzt kannst Du folgendermassen vorgehen:
Du gehst dein Array durch, und versuchst das nächste Feld zu füllen (und zwar testest Du zufällig die Zahlen 1-9 und die erste, die geht schreibst Du rein (und merk dir für jedes Feld, welche Zahl schon getestet wurde). KannstDu nun ein Feld mit keiner Zahl füllen (alle neun negativ getestet), musst Du ein Feld zurück, und dort ndie nächste Zahl testen. geht das wieder nicht, dann wieder ein Feld zurück.
Das ganze kannst Du iterativ oder rekursiv lösen, wobei Rekursiv einfacher wäre, wegen dem Merken der getesteten Zahlen, sprich:
Delphi-Quellcode:
SetzeZahl(Zeile, Spalte): Boolean;
wiederhole
 würfle Zahl aus Vorrat und streiche diese aus Vorrat.
 prüfe zahl
solange bis vorrat leer oder prüfung erfolgreich
wenn prüfung erfolgreich,
dann begin
  schreibe Zahl in Array
  wenn Zeile und Spalte <8
  dann begin
   wenn spalte<8
   dann Ergebnis=SetzeZahl(Zeile, Spalte+1)
   sonst Ergebnis=setzeZahl(Zeile+1, 0)
  sonst Ergebnis=Ja
sonst ergebnis=nein
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat