Veröffentlicht 5. März 200916 j #include <vcl.h> #include <iostream.h> using namespace std; int main() { /* Berreich 1 */ int array[10]; int i; for (i=0;i<10 ;i=i+1) { array[i]=random(20) ; } /* Berreich 2 for (i=0;i<10 ;i=i+1) { cout<<array[i]<<"\n"; } cin.get(); } Das funktioniert soweit, der nächste schritt wäre das ich keine Doppelten Zahlen mehr bekomme wie fang ich an?
6. März 200916 j Auch mit einem std::set kommst Du nicht drum herum zu prüfen, dass wenn random(x) eine Zahl liefert, die bereits im set enthalten ist, nochmal auszurühren. Wenn man LOTTO nachspielen wöllte, müsste man konsequenter weise ein SET mit allen "Zahlkugeln" abbilden und dann ein random(Anzahl-Runde) machen, so dass nach jeder Runde eine Kugel weniger per Zufall entschieden wird.
6. März 200916 j #include <stdio.h> #include <stdlib.h> int main(void) { int lotto[10] = { 0 }; int i, j; for (i=0; i<10; i++) { lotto[i] = random(11) + 1; for (j=0; j<i; j++) { if (lotto[i] == lotto[j]) { printf("double found lotto[%d] %d == lott[%d] %d\n", i, lotto[i], j, lotto[j]); lotto[i] = random(11) + 1; // Nochmal alle pruefen // j wird durch j++ in for(..) wieder zu 0 j=-1; } } } for (i=0; i<sizeof(lotto) / sizeof(int); i++) printf("lotto[%d]: %d\n", i, lotto[i]); return 0; [/PHP] Gruß, Daniel
6. März 200916 j was hast du da nun genau gemacht? Hinzugefügt: #include <stdlib.h> = einfügen Libary int i, j; 2 variablien dazu ------------------------------------------- kann das mal jmd genaue erklären was da genau abgeht?
6. März 200916 j #include <iostream> #include <algorithm> using namespace std; int main() { int array[20] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}; random_shuffle( array, array + 20 ); for(int i=0; i<10; ++i) { cout << array[i] << "\n"; } }[/code]
6. März 200916 j Auch mit einem std::set kommst Du nicht drum herum zu prüfen, dass wenn random(x) eine Zahl liefert, die bereits im set enthalten ist, nochmal auszurühren. Natürlich muss man das prüfen, aber das set macht das wesentlich einfacher for (i=0;i<10 ;++i) { if (!set.insert(random(20))) --i; } [/PHP] Wobei Klotzkopps Lösung die Schönere ist....
6. März 200916 j Wobei Klotzkopps Lösung die Schönere ist....Danke für die Blumen Jedenfalls ist sie flexibler, z.B. wenn man kein Laplace-Experiment hat, also die Elementarereignisse nicht alle gleich wahrscheinlich sind. Außerdem ist das Laufzeitverhalten besser berechenbar. Das wiederholte Ziehen mit Zurücklegen mit anschließender Prüfung, ob man die Zahl schon mal hatte, terminiert zwar sicher irgendwann, kann aber beliebig lange dauern.
6. März 200916 j was hast du da nun genau gemacht? Hinzugefügt: #include <stdlib.h> = einfügen Libary int i, j; 2 variablien dazu ------------------------------------------- kann das mal jmd genaue erklären was da genau abgeht? Also: #include <stdio.h> #include <stdlib.h> // stdlib.h wird von 'random()' gebraucht int main(void) { int lotto[10] = { 0 }; // Alle Elemente in Lotto werden auf 0 gesetzt int i, j; // Die beiden "Schleifensteuerenden" Variablen /* Erste for Schleife, in der jedem Element in * 'lotto' ein zufälliger Wert zugewisen wird */ for (i=0; i<10; i++) { lotto[i] = random(11) + 1; /* Zweite for Schleife * Hier überprüïfen wir ob unsere gezogenen Zahl * schon in 'lotto' vorhanden ist: * Wir gehen also von lotto[0] bis ein Element vor 'lotto[i]' * durch */ for (j=0; j<i; j++) { if (lotto[i] == lotto[j]) { /* Wenn wir eine doppelte Zahl gefunden * haben, ziehen wir für 'lotto[i]' nochmal eine * Zahl. Dann setzten wir 'j' auf -1, damit diese * Zweite for Schleife nochmal durch gelaufen wird. */ lotto[i] = random(11) + 1; // j wird durch j++ in for(..) wieder zu 0 j=-1; } } } // Hier wird einfach der Array ausgegeben for (i=0; i<sizeof(lotto) / sizeof(int); i++) printf("lotto[%d]: %d\n", i, lotto[i]); return 0; [/PHP] Nehmen wir an [i]i[/i] ist 3 und [i]lotto[/i] sieht wie folgt aus: lotto[0] = 1 lotto[1] = 4 lotto[2] = 3 lotto[3] = 3 Wir kommen jetzt in die 2. for Schleife und überprüfen [i]lotto[3][/i] mit l[i]otto[0][/i] bis [i]lotto[2][/i]. Da der Inhalt von [i]lotto[3][/i] gleich dem Inhalt [i]lotto[2][/i] ist, ziehen wir für [i]lotto[3] [/i]nochmal eine neue Zufallszahl und gehen die 2. for Schleife wieder von neuem durch, es kann ja sein das [i]lotto[3][/i] durch die "neuziehung" 4 ist, dann haben wir eine doppelte Zahl bei [i]lotto[1][/i] Hoffe das war verständlich? Gruß
6. März 200916 j das werde ich merken ob ich es am Montag auswendig auf die reihe bekomme..:confused: ansonsten ruf ich laut DANIIIEEELLL
6. März 200916 j :confused::confused::confused:das programm öffnet und schließt sich direkt ... wie hau ich da ne pause rein ????
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.