Zufalls Generator



  • hi ehrm ich hab mal ne gaaaanz kurze frage ^^ wie lasse ich das programm ne zahl zufällig bestimmen. ( zumbeispiel x soll true oder false sein ( zufällig halt )); ^^



  • Hallo

    Benutzt die Forumssuche, zu *zufall* ist ein Haufen passender Threads zu finden.

    bis bald
    akari



  • habs probiert aber anscheinend bin ich zu doof für die boardsuche



  • Hallo

    du must das wort zufall mit je einem Sternchen davor und dahinter in der Suchfunktion eingeben, und hier im C++ Subforum suchen lassen. Da kommen gunug Treffer.

    bis bald
    akari



  • *sob* ich such hier eignetlich nur eine ganz normale zufallsfunktion o_o da stehen x andere mit arrays blabla^^ ürgentwelchen rouletten tonnen von zahlen und was weiß ich ^^



  • Hallo

    Dann schau dir die Beispiele an, überleg dir was die Zufallszahlen erzeugen könnte (Tip : Zufall heißt im englischen Random) und setzt dann diese wie du willst ein.

    bis bald
    akari



  • o_O schrieb:

    *sob* ich such hier eignetlich nur eine ganz normale zufallsfunktion o_o da stehen x andere mit arrays blabla^^ ürgentwelchen rouletten tonnen von zahlen und was weiß ich ^^

    Kannst du mal normal schreiben? So hat bestimmt niemand Lust dir zu helfen.



  • jaaa ^^ das is für mich mittlerweise normal und okay es gibt srand ( das es ürgentwas mit rand sein muss wusste ich ja aber egal ), aber nur ich weiß immernoch net welche datei ich dazu einbinden muss die ham alle immer so 3-5 header drinne



  • nach dem du den Zufalls generator initialisiert hast,

    erstelltst du eine Zufalls Zahl, von der du das Modulum von 2 nimmst,
    das sollte dir als erklärung reichen.



  • hab was von CStoll

    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    using namespace std;
    
    int main()
    {
      srand(time(NULL));//einmal bei Programmstart
      for(int i=0;i<100;++i)
        cout<<i<<'\t'<<rand()<<endl;
      return 0;
    }
    

    sollte reichen, ich verabschiede mich dann mal^^



  • na dann viel spaß! 😉



  • hab n problem, muss 6 zufallszahlen herzaubern, es dürfen aber keine gleiche forhanden sein, hab da was geschrieben, irgendwie kommt da aber nix, bitte um ratschläge 🙂

    [/code]#include <cstdlib>
    #include <ctime>
    #include <iostream>
    using namespace std;

    int main()
    {
    int a,b;
    int z[5];

    srand(time(NULL));//einmal bei Programmstart

    for(int i=0;i<5;++i)
    {
    z[i]=rand()%49+1;

    for(int j=1; j<5; j++)
    {
    if(z[i]==z[j])
    {
    i--;
    break;
    }

    }

    }
    // z[i]=rand()%49+1;

    cout<<'\t'<<z[i];//rand()%49+1;
    return 0;
    }
    [code]



  • Du solltest in der inneren Schleife nur die bereits gespeicherten Zahlen kontrollieren (dazu änderst du die innere Schleife in "for(int j=0;j<i;++j)...").

    (PS: Wenn du code-Tags benutzt, dann bitte richtig herum - das [/code] kommt ans Ende ;))



  • das mit den doppelten zufallszahlen verhindern geht auch effektiver.. siehe z.b. hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-139206-and-highlight-is-*zufall*.html



  • hab jetzt den code n bissi verändert, hab noch das problem, bei 2 gleichen zahlen bekomm ich beide hintereinander aufn bildschirm nur jetzt anstatt von 5
    zufalsszahlen 6.
    wollte es mit der if bediengung zurechtrücken geht aba net!!!

    #include <cstdlib>
    #include <ctime>
    #include <iostream>
    using namespace std;
    
    int main()
    {
    
    	int z[5];
    
    	srand(time(NULL));//einmal bei Programmstart
    
    	for(int i=0;i<5;++i)
    
    	{
    			z[i]=rand()%49+1;
    
    			for(int j=0; j<i; j++)
    
    				{
    					if(z[i]==z[j])
    						{
    							i--;
    							break;
    
    						}
    
    				}
    
    	if(z[i]!=z[j])
    		{
    
    			cout<<'\t'<<z[i];
    		}
    	}
    return 0;
    }
    

    ps.life dein vorschlag is n bissi zu kompliziert, hab mich mit den klassen noch net beschäftigt, aba kommt noch 😃



  • Ich hätte da noch eine andere Idee, wie du deine Lotto-Ziehung machen kannst:

    set<int> zahlen;
    while(zahlen.size()<6)
      zahlen.insert(rand()%49+1);
    

    (das set<> stellt sicher, daß jedes Element nur einmal eingefügt werden kann, d.h. am Ende der Schleife stehen in "zahlen" 6 garantiert unterschiedliche Zufallszahlen drin)



  • CStoll schrieb:

    Ich hätte da noch eine andere Idee, wie du deine Lotto-Ziehung machen kannst:

    set<int> zahlen;
    while(zahlen.size()<6)
      zahlen.insert(rand()%49+1);
    

    (das set<> stellt sicher, daß jedes Element nur einmal eingefügt werden kann, d.h. am Ende der Schleife stehen in "zahlen" 6 garantiert unterschiedliche Zufallszahlen drin)

    ist doch (fast) genauso ineffektiv.. wie teuer ist denn insert? log n?



  • Ja, insert() ist O(log n) - der Test in deinem ursprünglichen Programm ist O(n)



  • CStoll schrieb:

    Ja, insert() ist O(log n) - der Test in deinem ursprünglichen Programm ist O(n)

    in meinem Programm ist er O(1), weil garkein Test stattfindet.. Das finden der n paarweise verschiedenen Zufallzahlen kosten somit nur O(n). Bei dir kostet das Ganze dann O(n logn) und bei der Version vom Threadersteller O(n²) und beides nur sofern keine Zahl doppelt gewürfelt wurde..



  • Um 6 aus 49 zu ermitteln, mache ich mir noch keine großen Gedanken über die Performance 😉 (und bei größeren Mengen würde ich wohl random_shuffle() verwenden). Und bedenkst du auch, daß deine Variante deutlich mehr Speicherplatz (und Zeit) benötigt, um die Suche überhaupt vorzubereiten? (gerade wenn nur eine kleine Teilmenge der möglichen Werte gesucht wird, dürfte selbst O(n²) günstiger sein als O(n+m))


Anmelden zum Antworten