Zufallsgenerator- Auswertung der Zahlen ?



  • Hallo,
    ich bin dabei einen zufallsgenerator zu machen, welcher mir nach dem durchlauf
    der schleife eine auswertung anzeigt. also wenn ich zb einen würfel erzeuge mit zahlen von 1-6 und den durchlauf 20 mal mache, danach soll mir angezeigt werden wie oft die 1,2,3 usw "gewürfelt" wurde. Würde mich über eine antwort sehr freuen.
    mit freundlichen grüßen
    Norrec

    #include <iostream> 
    #include <time.h> 
    using namespace std; 
    
    int main() 
    { 
    
    // Int
    int i; 
    int zahl; 
    int eingabe;
    int anzahl;
    
    // Anzeige
    cout << "Zahlengenerator (A-Kurs)\n\n" << endl;
    cout << "Wieviele Zahlen wollt ihr generieren?" << endl;
    cin  >> eingabe;
    cout << "Zahlengenerator von 0- ?" << endl;
    cin  >> anzahl;
    
    // Der Generator
    srand( time(NULL) ); 
    
    for(i=0; i<eingabe; i++) 
    { 
    zahl = (rand()%anzahl)+1; 
    
    cout << zahl << endl; 
    } 
    
    // Auswertung
    
    return 0; 
    }
    


  • Norrec schrieb:

    ich bin dabei einen zufallsgenerator zu machen, welcher mir nach dem durchlauf
    der schleife eine auswertung anzeigt. also wenn ich zb einen würfel erzeuge mit zahlen von 1-6 und den durchlauf 20 mal mache, danach soll mir angezeigt werden wie oft die 1,2,3 usw "gewürfelt" wurde. Würde mich über eine antwort sehr freuen.

    Das ist schön. Hast Du auch ne konkrete Frage dazu oder wolltest Du uns das nur mal mitteilen? 🙂



  • Erm klar *gG* sorry wenns nicht ersichtlich ist, hab aber kein plan wie ich die
    auswertung amchen kann, das war meine frage 😃
    gruß
    norrec



  • Wie wär's mit einem Array, für jede Zahl die Du würfeln kannst einen Eintrag. Den setzt Du am Anfang auf 0 und erhöhst ihn immer, wenn Du die entsprechende Zahl würfelst. Zum Abschluß läufst Du einmal durch das Array und gibst die Statistik aus.



  • Ich würde sagen

    int anzahl[1000]
      [...]
      for(i=0; i<eingabe; i++) 
      { 
        zahl = (rand()%anzahl)+1; 
        anzahl[zahl]++;
        cout << zahl << endl; 
      }
      [...]
    


  • Ahh gut, danke;) bin irgendwie nicht drauf gekommen wie ich da überhaupt rangehen soll /blush.
    gruß norrec



  • Dein Array hat den gleichen Namen wie eine andere Variable.
    Du solltest die Einträge im Array wenigstens noch mit 0 initalisieren.
    Warum gerade Größe 1000? Was passiert, wenn ich jetzt anzahl auf 1000 setze... dann lieber dynamisch anlegen. Das ist zu kompliziert? Dann ist genau jetzt der richtige Zeitpunkt um std::vector kennen zu lernen:

    #include <vector>
    
    using namespace std;
    
    vector<int> statistik(anzahl,0); // anzahl Elemente anlegen, alle mit 0 initialiseren
    

    Zugriff geht wie gewohnt mit statistik[...] etc.
    Und um's Aufräumen braucht man sich auch nicht zu kümmern.

    MfG Jester



  • Jester hast ja recht, war zu schnell 🙂

    Ich würde einfach mit "new []" ein Array anlegen, oder halt vector nehmen. Wollte es halt nur einfach gestallten, als denkanstoß.



  • Erstmal nochmal vielen dank, bekomm das aber immernoch nicht wirklich hin trotz probieren bis jetzt.. wär sehr nett wenn ihr das mit dem vector nochmal kurz erklären könntet 🙂
    gruß
    norrec



  • Kennst du bereits die Arrays? Nein? Dann ist der Thread "Arrays und Pointer" in der C++-FAQ genau das richtige für dich!

    Du kennst dich mit Arrays bereits aus? Dann lies dir Jesters Post nochmal durch. Es ist nämlich so, dass sich die Klasse Vektor im Prinzip genauso wie ein Array verhält, zusätzlich kann sie aber noch vieles mehr und ist unkomplizierter.

    Caipi



  • So nochmal

    int *irgend_ein_array=new int [anzahl]; // array mit größe anzahl anlegen
      for(i=0; i<anzahl; i++) // array leeren
        irgend_ein_array[i]=0
      [...]
      for(i=0; i<eingabe; i++) 
      { 
        zahl = (rand()%anzahl)+1; 
        irgend_ein_array[zahl]++; // vorkommen von zahl abspeichern
        cout << zahl << endl; 
      }
      [...]
      for(i=0; i<anzahl; i++) // array ausgeben
        cout<<irgend_ein_array[i]<<" x "<<i
    

    jetzt dürfte es keinen fehler mehr enthalten 🙂



  • doch, das enthält einen dicken Hund: delete [] irgend_ein_array; fehlt.
    Und weil es so schwierig ist dadran zu denken empfehle ich vector. 🙂



  • Juhu habs nun *gG* nochmal nen ganz dickes Danke 🙂
    Habs mit den Arrays nun verstanden, aber werd mir die Vectoren nun mal anschauen...
    So gehts nun:

    #include <iostream> 
    #include <time.h> 
    using namespace std; 
    
    int main() 
    { 
    
    // Int 
    int i; 
    int zahl; 
    int eingabe; 
    int anzahl; 
    
    // Anzeige 
    
    cout << "Zahlengenerator mit Auswertung - A Kurs\n\n" << endl; 
    
    cout << "Wieviele Zahlen wollt ihr generieren?" << endl; 
    cin  >> eingabe; 
    
    cout << "Zahlengenerator von 0 - x " << endl;
    cin  >> anzahl;
    cout << "--" << endl;
    
    int *irgend_ein_array=new int [anzahl+1]; // array mit größe anzahl anlegen
    
    for(i=0; i<anzahl+1; i++) // array leeren 
        irgend_ein_array[i]=0;
    
    // Der Generator 
    
    srand( time(NULL) ); 
    
    for(i=0; i<eingabe; i++) 
    { 
    	zahl = (rand()%anzahl)+1;
    	irgend_ein_array[zahl]++; // vorkommen von zahl abspeichern 
    
    cout << zahl << endl; 
    } 
    
    // Auswertung 
    
    cout << "\n\nAuswertung:\n" << endl;
    
    for(i=1; i<anzahl+1; i++) // array ausgeben 
        cout << i << " = " << irgend_ein_array[i]<< endl;
    
    return 0; 
    }
    

Anmelden zum Antworten