random am beispiel Lotto
-
Hi,
habe eine frage, wenn ich n zufallszahlen ziehen will, aber keine darf doppelt sein, wie geh ich das am besten an?
bestimmt mit einer for bzw do schleife oder?MfG
-
ich mach so was immer ganz kompliziert und alle leute wie jansen oder junix, etc pp werden mich vermutlich gleich aus lachen. ich würd's dennoch so machen:
jede mit random "gezogene" Zahl abspeichern (z.B. als String inner Stringlist)
dann eine for-Schleife aufrufen, die jede zeile meiner stringlist mit der aktuell gezogenen zahl vergleicht. wenn's ne übereinstimmung gibbet: for-schleife beenden und die funktion nomma starten
fettich
-
Hallo!
Ganz einfach: Du speicherst dir die bisher ausgegebenen Zahlen einfach zwischen (für "Lotto" also ein int-array) - und vor der Ausgabe prüfst du, ob die Zahl vielleicht schon im Array ist.
für die Überprüfung würde ich mir ne Hilfsfunktion bauen:
bool isInArray(int number, int *array, int arraycount) { for (int i = 0; i < arraycount; i++) { if (array[i] == number) return true; } return false; }und in der main:
int sixOf49[6]; randomize(); for (int i = 0; i < 6; i++) { int uniqueNumber; do uniqueNumber = rand() % 49 + 1; while (isInArray(uniqueNumber, &sixOf49[0], 6)); sixOf49[i] = uniqueNumber; //hier hast du in uniqueNumber deine Lottozahl! }Die ganze Sache hat mit dem C++Builder jedoch herlich wenig zu tun! Ich würde dir empfehlen, erstmal ein Buch über C++ zu lesen - sowas sollte eigentlich jeder im Handumdrehen lösen können!
...bin gerade am zweifeln, ob es vielleicht falsch ist, dir ne fertige Lösung anzubieten??!?tschüss
Robert
-
Hallo fettich!
...und warum würdest du ausgerechnet BEI ZAHLEN nen String oder ne Stringlist nehmen?? Weils mehr Speicher braucht?
tschüss
Robert
-
Ok das mit dem array geht, bis auf das nie eine 4 kommt, warum das nicht? z.B. ich mach aus dem b = rand() % 49 + 1 ein b = rand() % 7 + 1, kommt nie die 4 als Zahl.
MfG und Thx
-
hmm jetzt kommt doch die 4, hat sich erledigt.
Aber andere frage, die schreib ich dann in edit felder
Edit1->Text = n[0]; Edit2->Text = n[1]; Edit3->Text = n[2]; Edit4->Text = n[3]; Edit5->Text = n[4]; Edit6->Text = n[5];wie sortier ich die vorher am besten? ich hab zwar ein ansatz(kombi aus if und for schleife) aber der geht net
thx
-
und wie macht man das ganze, wenn man die zahlen von 1 - 100 in zuhälliger reihenfolge in nem Array speichern will? weil wenn man es mit der methode von rowisoft macht, kann es sehr lange dauern.
stellt euch mal vor, wenn nurnoch die zahl 58 fehlt und random gibt fast alles außer 58 zurück (per zufall halt)
-
Hallo!
Zum Sortieren gibt es mehrere Verfahren. Eines davon ist "bubble sort" - zwar nicht das effektivste, dafür aber leicht realisierbar und ein sehr bekanntes Sortierverfahren.
Infos zu bubble sort in Zusammenhang mit C++ findest du z.B. auf Volkards-C++Kurs: http://www.volkard.de/vcppkold/bubble_sort.htmlund wie macht man das ganze, wenn man die zahlen von 1 - 100 in zuhälliger reihenfolge in nem Array speichern will?
Daraus gibt sich allerdings eine komplett andere Aufgabenstellung. Wenn du ALLE Zahlen von 1-100 ausgeben möchtest, brauchst du einen anderen Lösungsansatz! Hier würde ich ein Array zunächst füllen, dann per Zufall ausgeben, diese leere Zahl nach hinten setzen (damit die hinteren nach vorne rutschen) und dann nur noch zufallszahlen bis zur neuen Größe des Arrays ausgeben.
Das war aber - soweit ich das beurteilen kann - nicht Aufgabenstellung.tschüss
Robert
-
Hallo,
Statt der Überprüfung ob die Zahl schon im Array ist, kann man zu Speichern auch ein set verwenden. Da hier gleichartige Inhalte verboten sind, musst du nur so lange einfügen, bis die Länge des set deine gewünschte Anzahl erreicht.
Ciao