Einzelnen Beitrag anzeigen

Marcel2906

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

AW: Sudoku Array of Array vergleichen

  Alt 15. Nov 2011, 09:42
Wenn ich es mit der while schleife versuche, habe ich wieder das Problem, dann wenn z.b. Sudoku[0,0] und [0,1] gleich sind er mir 4 mal eine meldung ausspuckt. 2mal das in einer reihe etwas doppelt ist und 2 mal dass im feld eine zahl doppelt ist...

Mit break und exit hab ich schon ein wenig rumprobiert, leider es nicht geschafft, da es ja eine procedure in einer procedure ist.

Mein code sieht so aus:

Delphi-Quellcode:
Procedure TForm2.BtPruefenClick(Sender: TObject);
Type
   THilfsArray = Array[1..9] Of Integer;
Var
   x, y, xx, yy: Integer;
   HilfsArray: THilfsArray;

   //HilfsArray erstellen
   Procedure HilfsArrayLeeren;
   Var
      i: Integer;
   Begin
      For I := 1 To 9 Do
         HilfsArray[i] := 0;
   End;

   //Wenn eine Zahl doppelt, Fehlermeldung
   Procedure ZahlDoppelt(WO: String);
   Var
      i: Integer;
      doppelt: boolean;
   Begin
      // Das alte mit der for Schleife

      {    For I := 1 To 9 Do
              If HilfsArray[i] > 1 Then Begin
                Showmessage('Zahl in' + WO + ' doppelt');
                BtNewClick(BtNew);
              End; }


      i := 1;
      doppelt := false;
      While (i < 9) And Not doppelt Do Begin
         If HilfsArray[i] > 1 Then Begin
            doppelt := true;
            ShowMessage('Zahl in' + WO + ' doppelt');
         End;
         inc(i);
      End;
   End;

   //Zahl zum Hilfsarray hinzufügen
   Procedure AddHilfsArray(z: Integer);
   Begin
      If (z > 0) And (z < 10) Then
         inc(HilfsArray[z]);
   End;

Begin
   //Zeile prüfen
   For y := 0 To 8 Do Begin
      HilfsArrayLeeren;
      For x := 0 To 8 Do
         AddHilfsArray(aSudoku[y, x]);
      ZahlDoppelt(' einer Zeile');
   End;
   //Spalte prüfen
   For x := 0 To 8 Do Begin
      HilfsArrayLeeren;
      For y := 0 To 8 Do
         AddHilfsArray(aSudoku[y, x]);
      ZahlDoppelt(' einer Spalte');
   End;
   //Feld prüfen
   For xx := 0 To 2 Do
      For yy := 0 To 2 Do Begin
         HilfsArrayLeeren;
         For y := yy * 3 To yy * 3 + 2 Do Begin
            For x := xx * 3 To xx * 3 + 2 Do
               AddHilfsArray(aSudoku[y, x]);
         End;
         ZahlDoppelt(' einem Feld');
      End;
End;
  Mit Zitat antworten Zitat