LWeber89 Geschrieben 5. März 2009 Geschrieben 5. März 2009 #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? Zitieren
Guybrush Threepwood Geschrieben 5. März 2009 Geschrieben 5. März 2009 leg das in einem std::set ab, da kann jedes Element nur einmal vorkommen Zitieren
VaNaTiC Geschrieben 6. März 2009 Geschrieben 6. März 2009 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. Zitieren
dahoffmann Geschrieben 6. März 2009 Geschrieben 6. März 2009 #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 Zitieren
LWeber89 Geschrieben 6. März 2009 Autor Geschrieben 6. März 2009 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? Zitieren
Klotzkopp Geschrieben 6. März 2009 Geschrieben 6. März 2009 #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] Zitieren
Guybrush Threepwood Geschrieben 6. März 2009 Geschrieben 6. März 2009 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.... Zitieren
Klotzkopp Geschrieben 6. März 2009 Geschrieben 6. März 2009 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. Zitieren
dahoffmann Geschrieben 6. März 2009 Geschrieben 6. März 2009 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ß Zitieren
LWeber89 Geschrieben 6. März 2009 Autor Geschrieben 6. März 2009 das werde ich merken ob ich es am Montag auswendig auf die reihe bekomme..:confused: ansonsten ruf ich laut DANIIIEEELLL Zitieren
LWeber89 Geschrieben 6. März 2009 Autor Geschrieben 6. März 2009 :confused::confused::confused:das programm öffnet und schließt sich direkt ... wie hau ich da ne pause rein ???? Zitieren
LWeber89 Geschrieben 6. März 2009 Autor Geschrieben 6. März 2009 getchar() ... bei mir funzt es nun danköö Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.