![]() |
stringgrid
ich hab ein stringgrid mit 10x10 kästchen erzeugt und habe nun vor dort zufällig die zahlen 1 bis 100 einzuschreiben...
ich bin soweit das ich in jedem feld eine zahl habe, die zahlen zufällig verteilt sind nur soll jede zahl nur einmal vorkommen... und da scheiterts bei mir! mein quellcode is noch sehr übersichtlich:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin randomize; zahl1:=random(99)+1; zahl2:=random(10); zahl3:=random(10); stringgrid1.cells[zahl2,zahl3]:=inttostr(zahl1); stringgrid1.Selection:=Tgridrect(rect(-1,-1,-1,-1)); end; end. |
Re: stringgrid
Erzeuge eine Liste mit den 100 Zahlen, vermische diese und übertrage sie in das Grid
|
Re: stringgrid
Spontane Idee: definiere Dir eine Menge der möglichen Zahlen. Nun ermittelst Du solange eine Zufallszahl, bis diese in der Menge vorkommt. Anschließend entfernst Du diese aus der Menge und ermittelst die nächste Zufallszahl.
|
Re: stringgrid
und wie mach ich das?
|
Re: stringgrid
Delphi-Quellcode:
for i := 1 to 100 do zahlen[i] := i;
for i := 1 to 50 do begin z1 := Random(99) + 1; z2 := Random(99) + 1; h := zahlen[z1]; zahlen[z1] := z2; zahlen[z1] := h; end; |
Re: stringgrid
Man könnte auch eine Liste mit den Zahlen 1 bis 100 erzeugen (sortiert) und diese dann mit einem Algorithmus (müsste hier im Forum zu finden sein) mischen. Wenn ich nachher etwas Zeit finde mache ich das mal eben schnell.
|
Re: stringgrid
Zitat:
|
Re: stringgrid
Müsste das übrigens nicht
Delphi-Quellcode:
heißen?
Random(100) + 1
|
Re: stringgrid
Hai matze222,
gebe deinem Thread doch bitte auch noch einen Titel aus dem man auf das Problem schliessen kann. ;-) Danke. |
Re: stringgrid
Moin, Moin,
mir kommt da noch etwas anderes seltsam vor:
Delphi-Quellcode:
Sollte es vielleicht so gedacht sein?
h := zahlen[z1];
zahlen[z1] := z2; zahlen[z1] := h;
Delphi-Quellcode:
h := zahlen[z1];
zahlen[z1] := zahlen[z2]; zahlen[z2] := h; |
Re: stringgrid
Zitat:
|
Re: stringgrid
Don't worry!
Im Eifer des Gefechts kann das schon mal passieren. Hatte mir heute morgen mal das Ergebnis angeschaut: Der Algorithmus scheint mir nicht besonders effektiv. Ein Blick in meinen Fundus brachte dann eine fast identische Procedur zum Vorschein, in der ich nur einen Index über Random() bestimme, der zweite Index wird einfach nur über den Schleifenzähler bereitgestellt. Der Geschwindigkeitsvorteil wird aber vermutlich nicht ins Gewicht fallen. Das Ergebnis ist mit der hier vorgestellten Prozedur vergleichbar. Ich denke, wenn eine "gute" Mischung wichtig ist, dann müsste man noch einen anderen Weg gehen... |
Re: stringgrid
Also effektiv ist er, wenn man mal die Tippfehler vernachlässigt.
Ist er auch effizient? Ich glaube, das spielt bei der Anwendung keine Rolle. Wildes Vertauschen klappt immer <g>. |
Re: stringgrid
Hmmm, meine Stichproben haben ergeben, dass manchmal mehrere Zahlenwerte (wieder?) in der ursprünglichen Reihenfolge standen. Nun war ja nicht die Rede davon, dass dies ausgeschlossen werden muss. Aber von einer guten Verwürfelung möchte ich eigentlich erwarten, dass die ursprüngliche Reihenfolge nicht gleich in mehreren Fällen beibehalten wird - oder ist meine Erwartung falsch?
|
Re: stringgrid
gerade abgetippt:
Delphi-Quellcode:
Achtung: Las Vegas Algo - Laufzeit nicht gesichert.
procedure TForm1.Button1Click(Sender: TObject);
var Zahlen:set of Byte; rand,i,j:integer; begin randomize; //Zufallsgenerator initialisieren Zahlen := []; //leere Menge anlegen for i := 0 to 9 do //Zeilen und Spalten durchgehen for j := 0 to 9 do begin rand := random(100) + 1; //zufallszahl suchen while rand in Zahlen do //schauen ob schon vorhanden, wenn ja neue rand := random(100) + 1; include(zahlen,rand); //hinzufügen zu bereits benutzen Zahlen stringgrid1.Cells[i,j] := IntToStr(rand); //reinschreiben end; end; |
Re: stringgrid
Das kommt mir irgendwie
![]() |
Re: stringgrid
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:29 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-2025 by Thomas Breitkreuz