Zufallszahlen mit Abstand
-
Wie kann ich in VCL C++ Builder 7 Stellige Zufallszahlen erzeugen,
die z.B. so aussehen könnten : 2 4 5 1 8 9 3Die Zahlen dürfen nicht zwei mal vorkommen und jede zahl soll
mit großem Abstand getrennt werden, damit es gut lesbar ist, z.B. so: 2 4 statt so : 24Wie kann ich es programmieren ?
(Ich kenne mich zwar ein bisschen mit Random aus, weiß aber nicht wie ich Zufallszahlen hintereinander erzeugen soll, die auch noch nur 1 mal vorkommen dürfen und in großen abständen erscheinen sollen)
-
Im Prinzip ist das nicht sonderlich schwer.
Wenn Du Dich ein bisschen mit Random auskennst, dann zeig doch mal den Quellcode den Du schon hast, oder lese Dich erstmal grob in die Hilfe ein (da ist auch ein Beispiel).
Nachdem Du die Zahl hast, vergleichst Du mit einer Datei?, anderen Variable?, was auch immer, ob diese schon existiert, falls ja -> neue Zahl erzeugen; falls nein -> Zahl in AnsiString umwandeln und dann die Leerzeichen einfügen.
-
Hallo
Als Denkansatz mal ein paar Stichworte, die dir helfen können selber den Algorithmus zu entwickeln :
Du brauchst eine Schleife, in der jeweils eine Ziffer gezogen und in einem Array zwischengepsichert wird. Bei jeder neuen Zahl wird überprüft, ob diese schon im Array vorhanden ist. Wenn alle Zahlen gezogen sind, wird aus den Zahlen im Array das Ausgabestring zusammengesetzt, die einzelnen Ziffern werden nacheinander in die String-Repräsentationen umgewandelt.bis bald
akari
-
Hallo zusammen,
das Prinzip "erzeuge Zufallszahl und schau nach, ob die bereits gezogen wurde" finde ich nicht ganz optimal. Streng genommen ist nicht mehr garantiert, dass der Algorithmus terminiert, bzw wie lange er läuft.
Besser wäre es doch die Ziffern 0 bis 9 in einem Array abzulegen und dann 7 mal an einer zufälligen Position eine zu ziehen. Die gezogene Zahl entfernen, indem die letzte im Array an deren Stelle verschoben wird. So kann man einfach immer Random(ArraySize) wählen uns erwischt garantiert keine doppelt.
In der Praxis wird das wohl auch anders funktionieren, aber das halte ich für die sauberere Lösung.
Gruß
Martin