Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
Delphi 6 Enterprise
|
AW: Sudoku Logik
19. Jan 2011, 14:51
Sieht schon ganz gut aus. Fehlerhaft ist mMn nur in der DigitIsOK der part der auf die Quadrate prüft. Hab mal Kommentare reingeschrieben, wie es mMn geändert werden müsste.
Jumpy
Delphi-Quellcode:
function DigitIsOK(i,Digit: integer):boolean;
var
j,k: Integer;
X,Y,SmallSize: integer;
begin
X:=i mod Size;
Y:=i div Size;
Smallsize:=Trunc(sqrt(Size));
//Hier reicht Smallsize:=sqrt(Size);
//Da alles quadratisch ist. Wenn da irgendwas komisches rauskäme,
//würde es eh nicht klappen, da nützt dann auch Trunc nichts.
Result:=True;
if not(Digit = 0) then
begin
for j := 0 to Size - 1 do //Reihen, Spalten
begin
if (Digit = StrToInt(Form1.Map.Cells[X,j])) OR
(Digit = StrToInt(Form1.Map.Cells[j,Y])) then
begin
Result:=False;
Break;
end;
end;
//Der Part ist mMn OK.
X:=i div SmallSize;
Y:=i div SmallSize;
for j := (SmallSize * X) to (SmallSize * X) do
//Wenn du dir die Exe anguckst, siehst du, das die Quadrate nicht passen.
//Das kommt daher, das die Schleife so nicht zählt, da Start und Ende gleich sind.
//for j:= (SmallSize*X) to (SmallSize*X + SmallSize-1) //So müsste es richtig lauten
begin
for k := (SmallSize * Y) to (SmallSize * Y) do
//Analog:
//for k:= (SmallSize*Y) to (SmallSize*Y + SmallSize-1)
begin
if (Form1.Map.Cells[j,k] = IntToStr(digit)) AND ((j<>X) AND (k<>Y)) then
begin
Result:=false;
Break;
end;
end;
end;
end
else
Result:=false;
end;
Ralph
|
|
Zitat
|