Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Datentyp Menge
greendesire - Fr 06.03.09 11:31
Titel: Datentyp Menge
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:
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
Gausi: Delphi-Tags hinzugefügt
Delete - Fr 06.03.09 11:51
"Funktioniert nicht" ist keine Problembeschreibung.
LexXis - 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
SUCHFUNKTION
greendesire - 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.
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
Gausi: Delphi-Tags hinzugefügt
Delete - Fr 06.03.09 12:53
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; for vi:=1 to cmax do begin menge := [1..9]; 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); end; end; End; |
Getippt und nicht getestet.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!