Thema: Delphi Sudoku Logik

Einzelnen Beitrag anzeigen

hans ditter

Registriert seit: 25. Jun 2010
Ort: Niedersachsen
263 Beiträge
 
Turbo Delphi für Win32
 
#33

AW: Sudoku Logik

  Alt 9. Jan 2011, 17:00
Also, ich hab jetzt gerade mal den Pseudocode umgesetzt in meinem Programm. Ob er funktioniert, kann ich noch nicht sagen, da er mir (unverständlicherweise) an einer Stelle sagt, dass " '' ist kein gültiger Integerwert".

Hier mal der Code, mit dem alle Zellen gefüllter werden (sollen):
Delphi-Quellcode:
function SetCell(i: integer) : boolean;
var ValidDecision: TStringList;
  j,X,Y: Integer;
  dig: string;
begin
  if i > (Size * Size) - 1 then
  begin
    Result:=true;
    Exit;
  end;
{.....................................................................}
  ValidDecision:=TStringList.Create;
  for j := 1 to Size do
    ValidDecision.Add(IntToStr(j));
{.....................................................................}
  while ValidDecision.Count > 0 do
  begin
    dig:=ValidDecision[random(ValidDecision.Count)];
    if DigitIsOk(i,StrToInt(dig)) then //hier kommt der Fehler!
    begin
      X:=i mod Size;
      Y:=i div Size;
      Form1.Map.Cells[X,Y]:=dig;
      if SetCell(i + 1) then
      begin
        Result:=True;
        Exit;
      end
      else
      begin
        ValidDecision.Delete(ValidDecision.IndexOf(dig));
        dig:=ValidDecision[random(ValidDecision.Count)];
      end;
    end
    else
      ValidDecision.Delete(ValidDecision.IndexOf(dig));
  end;

  ValidDecision.Free;

  Result:=False;
end;
Und dann noch die Überprüfung der Zahl:
Delphi-Quellcode:
function DigitIsOK(i,Digit: integer):boolean;
var
  j: Integer;
  X,Y: integer;
begin
  X:=i mod Size;
  Y:=i div Size;

  Result:=True;

  if not(Digit = 0) then
  begin
    for j := 0 to Size do
    begin
      if (Digit = StrToInt(Form1.Map.Cells[X,i])) OR
         (Digit = StrToInt(Form1.Map.Cells[i,Y])) then
        begin
          Result:=False;
          Break;
        end;
    end;
  end
  else
    Result:=false;
end;
Der Fehler kommt so zwischen der 4. und 5. Zelle. Ich kann mir das nicht so richitg erklären, weil hier die Sprache davon ist, dass i='' ist. Aber wieso? Hoffentlich könnt ihr mir nochmal aus der Patsche helfen.

LG, hans ditter
RudiRüsselSeineSocketKomponente - SirRufo (--> Chat mit PM)

Delphi Programming is the best one!
  Mit Zitat antworten Zitat