AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi optimieren einer Prozedur die ein Sudoku lösen kann
Thema durchsuchen
Ansicht
Themen-Optionen

optimieren einer Prozedur die ein Sudoku lösen kann

Ein Thema von Melvyn · begonnen am 11. Mai 2009 · letzter Beitrag vom 12. Mai 2009
 
Melvyn

Registriert seit: 10. Mai 2009
13 Beiträge
 
#9

Re: optimieren einer Prozedur die ein Sudoku lösen kann

  Alt 11. Mai 2009, 19:18
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:
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;
die ausgabe hab ich dann noch für mojidoku umegebastelt, aber auch das funktioniert noch nicht
StringGrid1.Cells[x,y]:=chr(ord(S[SIndex(x,y)].a)+26); Loesen() ist eine eigenständige Prozedur
Delphi-Quellcode:
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;
so ich hoffe ihr könnt mir helfen. ich habe anfangs eine offene schleife vermutet aber keinen anhaltspunkt dafür gefunden.

[edit=mkinzler]Code-Tags durch Delphi-Tags ersetzt Mfg, mkinzler[/edit]
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:24 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