Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

#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?

Geschrieben

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.

Geschrieben


#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

Geschrieben

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?

Geschrieben
#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]

Geschrieben
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....

Geschrieben
Wobei Klotzkopps Lösung die Schönere ist....
Danke für die Blumen :D

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.

Geschrieben
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ß

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...