AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Sudoku Kandidaten löschen

Ein Thema von Marcel2906 · begonnen am 10. Nov 2011 · letzter Beitrag vom 10. Nov 2011
Antwort Antwort
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#1

Sudoku Kandidaten löschen

  Alt 10. Nov 2011, 10:00
Delphi-Version: 2010
Hey,

glaube ich hab eine sehr schwierige Frage.
An sich ist das bestimmt nicht so kompliziert, aber ich hab mir mal wieder was komisches ausgedacht
Nun, erstmal beschreibe ich mein Programm:

Insgesamt soll ist ein Sudoku Solver werden. Das Sudoku wird in ein Array 0..8 of Array (integer) 0..8 eingetragen. Alle leeren Felder werden dann mit einer 0 gefüllt. Dann werden alle leeren Felder (Felder mit 0) mit Kandidaten gefüllt, sprich bekommen den Wert 123456789. So weit so gut.
Dann werden aus den Kandidaten alle festen Werte gelöscht. Dies gelingt mir auch mit den Werten einer Spalte und einer Reihe, jedoch nicht mit denen in einem Feld. Leider ist der Code für die Spalte und Reihe schon sehr kompliziert. Dann habe ich mich an den Code für die Felder herangewagt, aber scheite immer wieder, mein letzter Versuch sieht folgendermaßen aus:

Es muss ein Denkfehler von mir sein...

Delphi-Quellcode:
Procedure TForm2.BtKndDeleteClick(Sender: TObject);
Var
   x, y, a, b, m, n, xx, yy: integer;
   s, ss: String;
Begin
   m := 0;
   n := 0;
   a := 0;
   b := 0;
   // Feld mit mehrern Kandidaten suchen
   Repeat
      Repeat
         If aSudoku[m, n] > 9 Then Begin
            a := m;
            b := n;
            x := m;
            // Zeile nach Werten durchsuchen und aus Kandidatenliste löschen
            For y := 0 To 8 Do
               If aSudoku[x, y] < 10 Then Begin
                  s := IntToStr(aSudoku[a, b]);
                  ss := IntToStr(aSudoku[x, y]);
                  s := Stringreplace(s, ss, '', [rfReplaceAll]);
                  aSudoku[a, b] := StrToInt(s);
               End;
            y := n;
            // Spalte nach Werten durchsuchen und aus Kandidatenliste löschen
            For x := 0 To 8 Do
               If aSudoku[x, y] < 10 Then Begin
                  s := IntToStr(aSudoku[a, b]);
                  ss := IntToStr(aSudoku[x, y]);
                  s := Stringreplace(s, ss, '', [rfReplaceAll]);
                  aSudoku[a, b] := StrToInt(s);
               End;

            //Feld nach Werten durchsuchen und aus Kandidatenliste löschen
            For xx := 0 To 2 Do
               For yy := 0 To 2 Do Begin
                  For x := xx * 3 To xx * 3 + 2 Do
                     For y := yy * 3 To yy * 3 + 2 Do
                        If aSudoku[x, y] < 10 Then Begin
                           s := IntToStr(aSudoku[a, b]);
                           ss := IntToStr(aSudoku[x, y]);
                           s := Stringreplace(s, ss, '', [rfReplaceAll]);
                           aSudoku[a, b] := StrToInt(s);
                        End;
               End;
         End;
         n := n + 1;
      Until n > 8;
      n := 0;
      m := m + 1;
   Until m > 8;
End;
Angehängte Dateien
Dateityp: zip Sudoku Solver.zip (481,1 KB, 4x aufgerufen)

Geändert von Marcel2906 (10. Nov 2011 um 13:01 Uhr)
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: Sudoku Kandidaten löschen

  Alt 10. Nov 2011, 10:05
Hey,

glaube ich hab eine sehr schwierige Frage.
Und wie lautet die Frage?
  Mit Zitat antworten Zitat
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Sudoku Kandidaten löschen

  Alt 10. Nov 2011, 10:11
was ich bei

Delphi-Quellcode:
  //Feld nach Werten durchsuchen und aus Kandidatenliste löschen
            For xx := 0 To 2 Do
               For yy := 0 To 2 Do Begin
                  For x := xx * 3 To xx * 3 + 2 Do
                     For y := yy * 3 To yy * 3 + 2 Do
                        If aSudoku[x, y] < 10 Then Begin
                           s := IntToStr(aSudoku[a, b]);
                           ss := IntToStr(aSudoku[x, y]);
                           s := Stringreplace(s, ss, '', [rfReplaceAll]);
                           aSudoku[a, b] := StrToInt(s);
                        End;
               End;
Falsch mache.
Weil dies leider nicht funktioniert
Angehängte Dateien
Dateityp: zip Sudoku Solver.zip (481,1 KB, 1x aufgerufen)

Geändert von Marcel2906 (10. Nov 2011 um 11:58 Uhr) Grund: Projekt hinzugefügt
  Mit Zitat antworten Zitat
Marcel2906

Registriert seit: 17. Aug 2011
Ort: Warendorf
112 Beiträge
 
Delphi 2010 Professional
 
#4

AW: Sudoku Kandidaten löschen

  Alt 10. Nov 2011, 13:39
hab mein Fehler endeckt:
Hier die Lösung:

Delphi-Quellcode:
            // Feld 1 nach Werten durchsuchen und aus Kandidatenliste löschen
            If (a < 3) And (b < 3) Then Begin
               For x := 0 To 2 Do
                  For y := 0 To 2 Do
                     If aSudoku[x, y] < 10 Then Begin
                        s := IntToStr(aSudoku[a, b]);
                        ss := IntToStr(aSudoku[x, y]);
                        s := Stringreplace(s, ss, '', [rfReplaceAll]);
                        aSudoku[a, b] := StrToInt(s);
                     End;
            End;
            // Feld 2 nach Werten durchsuchen und aus Kandidatenliste löschen
            If (a < 3) And (b > 3) And (b < 6) Then Begin
               For x := 0 To 2 Do
                  For y := 3 To 5 Do
                     If aSudoku[x, y] < 10 Then Begin
                        s := IntToStr(aSudoku[a, b]);
                        ss := IntToStr(aSudoku[x, y]);
                        s := Stringreplace(s, ss, '', [rfReplaceAll]);
                        aSudoku[a, b] := StrToInt(s);
                     End;
            End;
            // Feld 3 nach Werten durchsuchen und aus Kandidatenliste löschen
            If (a < 3) And (b > 5) Then Begin
               For x := 0 To 2 Do
                  For y := 6 To 8 Do
                     If aSudoku[x, y] < 10 Then Begin
                        s := IntToStr(aSudoku[a, b]);
                        ss := IntToStr(aSudoku[x, y]);
                        s := Stringreplace(s, ss, '', [rfReplaceAll]);
                        aSudoku[a, b] := StrToInt(s);
                     End;
            End;

            // Feld 4 nach Werten durchsuchen und aus Kandidatenliste löschen
            If (a > 2) And (a < 6) And (b < 3) Then Begin
               For x := 3 To 5 Do
                  For y := 0 To 2 Do
                     If aSudoku[x, y] < 10 Then Begin
                        s := IntToStr(aSudoku[a, b]);
                        ss := IntToStr(aSudoku[x, y]);
                        s := Stringreplace(s, ss, '', [rfReplaceAll]);
                        aSudoku[a, b] := StrToInt(s);
                     End;
            End;
            // Feld 5 nach Werten durchsuchen und aus Kandidatenliste löschen
            If (a > 2) And (a < 6) And (b > 3) And (b < 6) Then Begin
               For x := 3 To 5 Do
                  For y := 3 To 5 Do
                     If aSudoku[x, y] < 10 Then Begin
                        s := IntToStr(aSudoku[a, b]);
                        ss := IntToStr(aSudoku[x, y]);
                        s := Stringreplace(s, ss, '', [rfReplaceAll]);
                        aSudoku[a, b] := StrToInt(s);
                     End;
            End;
            // Feld 6 nach Werten durchsuchen und aus Kandidatenliste löschen
            If (a > 2) And (a < 6) And (b > 5) Then Begin
               For x := 3 To 5 Do
                  For y := 6 To 8 Do
                     If aSudoku[x, y] < 10 Then Begin
                        s := IntToStr(aSudoku[a, b]);
                        ss := IntToStr(aSudoku[x, y]);
                        s := Stringreplace(s, ss, '', [rfReplaceAll]);
                        aSudoku[a, b] := StrToInt(s);
                     End;
            End;

            // Feld 7 nach Werten durchsuchen und aus Kandidatenliste löschen
            If (a > 5) And (b < 3) Then Begin
               For x := 6 To 8 Do
                  For y := 0 To 2 Do
                     If aSudoku[x, y] < 10 Then Begin
                        s := IntToStr(aSudoku[a, b]);
                        ss := IntToStr(aSudoku[x, y]);
                        s := Stringreplace(s, ss, '', [rfReplaceAll]);
                        aSudoku[a, b] := StrToInt(s);
                     End;
            End;
            // Feld 8 nach Werten durchsuchen und aus Kandidatenliste löschen
            If (a > 5) And (b > 2) And (b < 6) Then Begin
               For x := 6 To 8 Do
                  For y := 3 To 5 Do
                     If aSudoku[x, y] < 10 Then Begin
                        s := IntToStr(aSudoku[a, b]);
                        ss := IntToStr(aSudoku[x, y]);
                        s := Stringreplace(s, ss, '', [rfReplaceAll]);
                        aSudoku[a, b] := StrToInt(s);
                     End;
            End;
            // Feld 9 nach Werten durchsuchen und aus Kandidatenliste löschen
            If (a > 5) And (b > 5) Then Begin
               For x := 6 To 8 Do
                  For y := 6 To 8 Do
                     If aSudoku[x, y] < 10 Then Begin
                        s := IntToStr(aSudoku[a, b]);
                        ss := IntToStr(aSudoku[x, y]);
                        s := Stringreplace(s, ss, '', [rfReplaceAll]);
                        aSudoku[a, b] := StrToInt(s);
                     End;
            End;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.542 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Sudoku Kandidaten löschen

  Alt 10. Nov 2011, 13:43
Wenn Du uns einmal genau erklärst, was Du mit "Kandidaten" meinst, bekommt man vielleicht noch eine unkompliziertere Lösung hin.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Sudoku Kandidaten löschen

  Alt 10. Nov 2011, 13:45
So bald man Strg+C drückt, aber spätestens wenn man Strg+V drückt beim Programmieren, sollte einem klar werden, dass man da noch optimieren kann. Mach eine Methode der Klassse daraus und übergib die veränderlichen Werte als Parameter.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz