[C/C++] Zufallszahl in einem Array?

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Kirill, 17. Februar 2009 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  1. #1 17. Februar 2009
    Zufallszahl in einem Array?

    Hallo Leute,
    kann mir einer den folgenden Quellcode übersetzen:

    Code:
    int main () {
    
    
    int zufallszahl[6]; [COLOR="DarkGreen"]-> Array von 0-5[/COLOR]
    
    cout << "Dieses Programm bestimmt ihre 6 Lottozahlen" << endl;
    int i =0;
    
    int zahlen[49]; [COLOR="DarkGreen"]-> Array von 0 bis 48
    [/COLOR]
    int r;
    while (i < 6) [COLOR="Green"] -> Solange bis i größer 6[/COLOR]
    {
    cout << "bestimme zahl" << i+1 << endl;
    do {
    srand(time(NULL) * time(NULL));
    r = rand() % 49; [COLOR="Green"]-> r = zuffalszahl
    [/COLOR]
    
    cout << "Hier" << r << endl;
    
    
    
    }
    while (zahlen[r] == 1); [COLOR="Green"] -> Wieso das hier? Und nicht r == 1?[/COLOR]
    zahlen[r] = 1; [COLOR="Green"] ??[/COLOR]
    zufallszahl[i] = r+1; [COLOR="Green"]??[/COLOR]
    
    
    i++;
    
    
    }
    
    
    

    Danke im Voraus!
     

  2. Anzeige
  3. #2 17. Februar 2009
    AW: Random?

    Naja kann nich viel helfen aber

    Code:
    while (i < 6) -> Solange bis i größer 6
    heisst widerhole bis i kleiner 6

    // bin mir nicht ganz sicher aber

    Code:
    while (zahlen[r] == 1); -> Wieso das hier? Und nicht r == 1?
    so sprichst du ja die verschiedenen elemente von zahl an, weil r ja eine variable ist. wenn du r == 1 schreiben würdes, würdest die schleife ja laufen bis r sich ändert aber ich denk mal es soll an zahlen liegen wann es aufhört.
     
  4. #3 17. Februar 2009
    AW: Random?

    Code:
    while (zahlen[r] == 1); //zahlen[x] ist auf 1, wenn die Zahl schon mal gezogen wurde. Eine Zahl ja nicht zweimal gezogen werden.
    zahlen[r] = 1; //die aktuelle Zahl wird als gezogen markiert, damit sie nicht nochmal gezogen werden kann
    zufallszahl[i] = r+1; //die aktuelle Zahl wird dem ERgebnis-Array hinzugefügt
    
    Das ist aber noch eine Entwicklungsversion oder? Das ergebnis wird z.B. noch gar nicht ausgegeben.
     
  5. #4 17. Februar 2009
    AW: Random?

    Moment, es wird doch ein Array definiert int zahlen[49];, sprich Felder von 0 bis 48.
    Danach r = rand() % 49; (als Beispiel r=20) und danach while (zahlen[r] == 1); bzw. while (zahlen[20] == 1);?

    Wann erfolgt die Abbruchbedingung? Wenn zahlen[r]==1? Also zahlen[1]==1?
     
  6. #5 18. Februar 2009
    AW: Zufallszahl in einem Array?

    Code:
    do {
     ...
    } while (Bedingung);
    
    wird so lange ausgeführt, bis die Bedingung erfüllt ist.

    Sprich die innere Schleife wird so lange ausgeführt, bis (zahlen[r] != 1) gilt. Dabei ist r die gezogenen Zahl. Danach wird zahlen[r] = 1 gesetzt. Das hat dann die Konsequenz, dass die innere Schleife, sollte diese Zahl noch einmal gezogen werden, dann einfach weiter läuft. Also eine nach einer anderen Zahl gesucht wird.

    Wenn das C++ sein soll, ist da Programm eh sehr optimistisch geschrieben. Der Algorithmus geht hier implizit davon aus, dass der Array nur Zahlen != 1 enthält oder gar mit 0 initialisiert ist. Dies ist bei C++ jedoch nicht der Fall. Deswegen muss am Anfang noch so etwas stehen:

    Code:
    while (i < 49)
     zahlen[i] = 0;
    i = 0;
    
    Und den Zufallszahlengenerator bei jeder Iteration neu zu seeden ist auch schwachsinnig. So etwas macht man einmal am Anfang und lässt ihn dann in Ruhe. Besonders bei so Entropie armen Quellen wie time(NULL).

    Also diesen Code würde ich mir nicht als Beispiel nehme. Ist größten Teils schlechter Stil und voller Fehler.
     
  7. #6 18. Februar 2009
    AW: Zufallszahl in einem Array?

    OK, ich habe es verstanden. Beim ersten Durchlauf ist die Bedingung gleich zahlen[r] != 1. Bei den zweiten Durchlauf prüft er ob die gewählte Zahl 1 ist, sprich: zahlen[1] == 1, dann sucht er nochmal eine neue Zahl. Danach setzt er die neu gewählte Zahl auf eins und es geht so weiter.

    Wie würdest du den Code genau schreiben?

    BWs sind raus.
     
  8. #7 18. Februar 2009
    AW: Zufallszahl in einem Array?

    In c++ würde man für solche Prüfungen sowieso eig. booleans vewenden, dann ist erstens klarer wozu das array dient und zweitens wird weniger Speicher gebraucht.
     
  9. #8 18. Februar 2009
    AW: Zufallszahl in einem Array?

    Es besteht nun ein neues Problem ^^

    Es geht darum, dass ich doppelte Zahlen im Array ausschließen möchte und damit den Benutzer zwinge eine andere Zahl einzugeben, bis diese eine noch nicht vorhandene Zahl ist.

    Funktioniert schon teilweise, nur leider kann ich die 1 nie nehmen, da die anscheinend gleich als bereits vorhanden angesehen wird bzw. auch manche anderen Zahlen. Woran liegt das?


    Hier der Code:

    Code:
    # include <iostream>
    # include <string>
    # include <windows.h>
    using namespace std;
    
    
    int main()
    {
    int lotto [6];
    int hilfsarray [49][6];
    
    int counter = 0;
    int eingabe;
     
     
     
     
     for (int l = 0; l < 6; l++)
     {
     
     do{ 
     cout << "Zahl " << l+1 << ": ";
     cin >> eingabe;
     
     for (int g = 0; g < 6; g++)
     {
     if (hilfsarray [eingabe][g] == 0)
     {
     counter=1;
     cout << endl << "Bitte geben Sie eine andere Nummer ein!" << endl;
     }
     else
     {
     counter=0; 
     }
     }
     
    
     
     hilfsarray [eingabe][l] = 0;
     
     }while(counter==1);
     
     lotto [l] = eingabe;
     }
     
     
    
    
    
    
    
    
    
    
    
    
     for (int a = 0; a < 6; a++)
     {
     cout << lotto [a];
     }
    
    
    
    system("Pause");
    return 0;
    }
    
    

    OK, habe das auch hinbekommen! Anstatt ein 2 dimensionales Feld einfach nur 1 nehmen.
    Bsp.:
    int hilfsarray [49];

    Danke.
     

  10. Videos zum Thema
Die Seite wird geladen...