Autor Beitrag
greendesire
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 06.03.09 11:31 
wir programmieren im moment sudoku und wollen jetzt gerade die zahlen in unser sudoku einfügen.
wir haben versucht, das mit dem datentyp menge zu versuchen.
leider haben wir dafür nur von unserem lehrer eine seeeeeeeeeeeehr kurze erklärung bekommen und wissen nicht richtig wie es geht
wir haben es jetzt erstmal so versucht, aber das funktioniert nicht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
var menge: set of 1..9;

.
.
.
with Stringgrid1 do
 Begin
   randomize;
  for vi:=1 to cmax do
   for vj:=1 to cmax do
   begin
    repeat
    Begin
     zufallszahl:= 1+random(9);
     cells[vi-1,vj-1]:=InttoStr(zufallszahl);
     End;
    until not (zufallszahl in menge);
 end;
 End;


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 06.03.09 11:51 
"Funktioniert nicht" ist keine Problembeschreibung.
LexXis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 170
Erhaltene Danke: 3



BeitragVerfasst: Fr 06.03.09 12:02 
Dein Repeat-Block läuft endlos, da du die verwendeten Werte, die per Random ermittelt werden, nicht aus der "Menge" entfernst. Siehe Exclude (und später Include).
Außerdem bin ich mir nicht ganz sicher, ob die Art und Weise das Sudoku zu füllen so überhaupt funktioniert. Bemüh doch im Zweifelsfall mal die Suche in der Entwickler-Ecke SUCHFUNKTION
greendesire Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 16



BeitragVerfasst: Fr 06.03.09 12:43 
ich habe schon danach gesucht und nicht wirklich etwas gefunden.
Wir haben jetzt nochmal versucht jede Spalte einzeln zu füllen.
Jetzt bekommen wir keine Fehlermeldung mehr aber die zahlen sind immernoch doppelt.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
var menge: set of 1..9;
with Stringgrid1 do
 Begin

   for j:=0 to cmax do
   begin
   Repeat
   Begin
    cells[0,j]:=IntToStr(random(9)+1);
    zahl:=StrToInt(cells[0,j]);
   end;
    Until not(zahl in menge);
   end;


Moderiert von user profile iconGausi: Delphi-Tags hinzugefügt
DeddyH
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Fr 06.03.09 12:53 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
var menge: set of byte;

.
.
.
with Stringgrid1 do
 Begin
  randomize; //sollte nur einmalig aufgerufen werden, z.B. Oncreate
  for vi:=1 to cmax do
    begin
      menge := [1..9]; //Menge definieren
      for vj:=1 to cmax do
        begin
          repeat
            zufallszahl:= 1+random(9);
            cells[vi-1,vj-1]:=InttoStr(zufallszahl);
          until not (zufallszahl in menge);
          Exclude(menge,zufallszahl); //Zahl aus Menge entfernen
        end;
    end;
 End;

Getippt und nicht getestet.