Zitat von
Olga:
bisher hatte es halt gereicht, das ICH weiß was da steht^^
Anscheinend weißt du es ja eben nicht, sonst wüsstest du, wo das Problem liegt.
Ich habe eben mal versucht, den Code im Kopf durchzugehen, bin aber zu keinem Ergebnis gekommen, weil ich durch den Spaghetticode nicht durchblicke. Was mir aber aufgefallen ist, sind aber immer wieder ähnliche Muster, z.B.:
Delphi-Quellcode:
Reihe(b,c);
if e = 1 then
Spalte(b,c);
if e = 1 then
Kasten(b,c);
if e = 1 then
begin
Positionsarray[Nr-1,0] := INr;
Nr := Nr+1;
INr := 0;
Richtung := 1;
BackTracking(Nr,INr);
end;
if e <> 1 then
begin
Warum fragst du den Wert von e hier vier mal direkt hintereinander ab? Fasse sowas zusammen, denn solcher Code ist (insbesondere durch die irreführende Einrückung) unleserlich und verwirrend.
Delphi-Quellcode:
Reihe(b,c);
if e = 1 then
begin
Spalte(b,c);
Kasten(b,c);
Positionsarray[Nr-1,0] := INr;
Nr := Nr+1;
INr := 0;
Richtung := 1;
BackTracking(Nr,INr);
end
else
begin
...
Ebenfalls irreführend ist sowas:
Delphi-Quellcode:
if Moeglichkeitenarray[Nr-1,0] <> 0 then
sudokuarray[b,c] := 0;
Nr := Nr-1;
INr := (Positionsarray[Nr-1,0])+1;
Richtung := 0;
Backtracking(Nr,INr);
Auf den ersten Blick könnte man vermuten, dass alle diese Zeile von der Bedigung abhängig sind. Tatsächlich ist es aber nur die erste, die anderen werden immer ausgeführt.
Usw...
Rücke deinen Code ordentlich ein, fasse so weit wie möglich zusammen, und lagere redundante Codeteile in Subroutinen aus - glaub mir, es lohnt sich. Und ich wette, dass dir der Fehler sofort in die Augen springt, wenn du den Code mal ordentlich strukurierst.