hmm es funktioniert schon so wie ich es hatte
ich hatte bloß ein sehr schweres Sudoku genommen für das er sehr lange gebraucht hätte. mit einem einfachen is die lösung auch innerhalb von ms da.
weil ich dieselbe prozedur auch für ein Mojidoku möchte, hab ich die ausgabe zeile verändert:
StringGrid1.Cells[x,y]:=chr(ord(S[SIndex(x,y)].a)+26);
allerdings müsste ich dann ja immernoch zahlen eingeben. ich möchte aber auch buchstaben eingeben können.
Müsste das dann so lauten? :
StringGrid1.Cells[x,y]:=chr(ord(S[SIndex(x,y)].a)-26);
meine frage ist jetzt wo ich diese zeile platzieren müsste.
die prozedur ist:
Delphi-Quellcode:
procedure TForm1.BitBtn6Click(Sender: TObject);
var x,y,bes:integer;
n:string;
function SIndex(x,y:integer):integer; begin result:= (x+(y*9))+1; end;
begin
Start();
for y:=0 to 8 do
for x:=0 to 8 do
begin
bes:=Bestaetigen(StringGrid1.Cells[x,y]);
if bes>0 then
begin
if WertSetzen(SIndex(x,y), bes) then
begin
S[SIndex(x,y)].a:=bes;
S[SIndex(x,y)].b:=false;
end else
begin
MessageBox(self.Handle, 'Falsche Eingabe!','Bitte erneut eingeben', mb_iconerror);
exit;
end;
end else
if bes<0 then
begin
n:='Ungültige Eingabe:' + StringGrid1.Cells[x,y];
MessageBox(self.Handle, pchar(n), 'Fehler', mb_iconerror);
exit;
end;
end;
Loesen();
for y:=0 to 8 do
for x:=0 to 8 do
StringGrid1.Cells[x,y]:=chr(ord(S[SIndex(x,y)].a)+26);
end;