![]() |
optimieren einer Prozedur die ein Sudoku lösen kann
Hallo Leute,
ich bin gerade dabei einen Sudokulöser mit Delphi7 zu schreiben. Er lässt sich bereits starten, aber funktioniert noch nicht obwohl Delphi keinen Fehler anzeigt. Kann mir jemand helfen den Fehler im Quelltext zu suchen? Danke bereits im Vorraus Melvyn |
Re: Hilfe gesucht!
Dazu kann ich nur sagen: viel Glück.
|
Re: Hilfe gesucht!
was meinst du?
|
Re: Hilfe gesucht!
Und
![]() Btw, Willkommen :dp: //Edit: Smiley repariert. :roll: |
Re: Hilfe gesucht!
Ja, ich kenne den Sinn eines Forums. Aber den ganzen Quelltext zu diskutieren hat wenig Sinn...
Aber eine Frage: Kannst du mir helfen? |
Re: Hilfe gesucht!
Zitat:
Niemand möchte ein nichtfunktionierendes Sudokuprogramm nach Fehlern durchsuchen und die Kommunikation über EMail führen. (und auch noch seine EMail-Adresse preisgeben) Du stellst möglichst konkrete Fragen und bietest dafür so viel Information wie nötig. Im optimalen Fall lieferst du ein halbfertiges Programm mit Sourcecode und bekommst dafür Tipps und Hilfe. Hier im Forum entsteht dann ein mehr oder weniger funktionierendes Programm von dem Jeder profitieren und lernen kann. >> Aber den ganzen Quelltext zu diskutieren hat wenig Sinn Man kann jedes Problem in Teilprobleme zerlegen und du darfst auch gerne den gesamten Sourcecode (bitte ohne DCU und ~*-Dateien) als Zip-Archiv anhängen. |
Re: Hilfe gesucht!
Zitat:
Privataudienzen gibts natürlich auch, allerdings nur gegen Gebühr. ;) Sorry, aber auf die Art und Weise nach Hilfe fragen ist kein guter Start in einem Forum. Erstelle einen neuen Thread unter "Open-Source" mit deinem Programm. |
Re: Hilfe gesucht!
Bei der Gelegenheit könntest Du gleich den ersten Beitrag editieren und einen anderen Titel wählen, der das Problem zumindest im Ansatz beschreibt (Hilfe suchen hier so ziemlich alle ;))
|
Re: optimieren einer Prozedur die ein Sudoku lösen kann
Gut dann werd ich mal konkretisieren. Die Lösen-Funktion des Sudokus funktioniert noch nicht. Beim drücken des Buttons zur laufzeit hängt sich das programm dann auf. Im moment sieht diese Prozedur jetzt so aus:
Delphi-Quellcode:
die ausgabe hab ich dann noch für mojidoku umegebastelt, aber auch das funktioniert noch nicht
procedure TForm1.BitBtn3Click(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]:=IntToStr(S[SIndex(x,y)].a); end;
Delphi-Quellcode:
Loesen() ist eine eigenständige Prozedur
StringGrid1.Cells[x,y]:=chr(ord(S[SIndex(x,y)].a)+26);
Delphi-Quellcode:
so ich hoffe ihr könnt mir helfen. ich habe anfangs eine offene schleife vermutet aber keinen anhaltspunkt dafür gefunden.
procedure Loesen();
var c:integer; begin c:=1; while c<=81 do begin if S[c].b then begin if S[c].a<9 then begin inc(S[c].a); if WertSetzen(c,S[c].a) then begin inc(c); end else if S[c].a=9 then repeat if S[c].b then S[c].a:=0; dec(c); if S[c].b then WertFreigeben(c,S[c].a); until S[c].b end else begin WertFreigeben(c,S[c].a); repeat if S[c].b then S[c].a:=0; dec(c); if S[c].b then WertFreigeben(c,S[c].a); until S[c].b end; end else inc(c); end; end; [edit=mkinzler]Code-Tags durch Delphi-Tags ersetzt Mfg, mkinzler[/edit] |
Re: optimieren einer Prozedur die ein Sudoku lösen kann
Das sieht für mich aus wie ein Brute-Force Algorithmus.
Dabei sind mal so ganz grob ~ 600 Mio. Lösungsschritte notwendig. Im englischen Wikipedia wird berichtet, dass diese Lösungsstrategie ca. 30 bis 45 Min benötigt. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz