Ich weiß, der Titel hört sich schon mal Interesannt an
Erstma mein Code:
Delphi-Quellcode:
Procedure Suchen(x, y: integer);
Begin
Save();
//Suche Feld mit 2 Kandidaten
If (aSudoku[x, y] > 10) And (aSudoku[x, y] < 100) Then Begin
z := IntToStr(aSudoku[x, y]);
aSudoku[x, y] := StrToInt(z[1]);
Try
BtEiKdnEtClick(BtEiKdnEt);
BtSolveClick(BtSolve); //FEHLER WENN ZAHL DOPPELT!!!!!!
Except
aSudoku[x, y] := StrToInt(z[2]);
BtEiKdnEtClick(BtEiKdnEt);
BtSolveClick(BtSolve);
End;
End;
End;
Dort wo mein KOmmentar "Fehler wenn zahl doppelt!!!" gibt es in dem BtSolveClick eine weitere funktion die mein Sudoku auf doppelte Zahlen prüft:
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, result = true
Function ZahlDoppelt: boolean;
Var
i: Integer;
Begin
For i := 1 To 9 Do Begin
If HilfsArray[i] > 1 Then Begin
Result := True;
Exit; // Ergebnis steht fest
End;
End;
Result := False;
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]);
If ZahlDoppelt Then
ShowMessage(' Zahl in einer Zeile doppelt');
break;
End;
//Spalte prüfen
For x := 0 To 8 Do Begin
HilfsArrayLeeren;
For y := 0 To 8 Do
AddHilfsArray(aSudoku[y, x]);
If ZahlDoppelt Then
ShowMessage('Zahl in einer Spalte doppelt');
break;
End;
//Felder 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;
If ZahlDoppelt Then
ShowMessage('Zahl in einem Feld doppelt');
exit;
End;
End;
Nun möchte ich, dass wenn ShowMessage(Zahl doppelt) gezeigt wird, es wie ein Fehler behandelt wird. Hab schon versucht selber einen einzubauen ( durch 0 teilen ect.) klappt aber alles nicht.
Ihr werdet bestimmt schimpfen man darf keine Fehler selber erzeugen...aber mir fällt nichts besseres ein
Doch wie schaff ich es, dass das Try abgebrochen wird wenn eine Zahl doppelt vorkommt?