Zufallszahlen



  • Hallo!

    Wie kann ich in C++ zufällig Zahlen "auswürfeln"?

    Ich vermisse in diesem Forum irgendwie eine Scuhfunktion oder bin ich einfach nur doof und überseh die? Naja, ich hoffe ihr könnt mir helfen.



  • Die Suchfunktion wurde abgeschlatet, wegen zu hohem load!

    ansonsten
    Random
    random mal wieder



  • hi,so gehts auch:

    #include <stdlib.h>
    #include <stdio.h>
    
     int main(void)
     {
        randomize();
        printf("Random number in the 0-99 range: %d\n", random (100));
        return 0;
    }
    

    grus math55



  • Nein, so geht's nicht. Erstens sind Deine Header veraltet und zweitens gibt's randomize und random nicht mit jedem Compiler (MSVC streikt zumindest - ist Borland, oder?)

    Gruß,
    MTE.



  • @MTE: Seine Header sind nicht veraltet - unter C sind sie völlig richtig.

    Trotzdem dürfte es keine Funktion randomize() in einem Std-Header geben...hat der Borland da was dazugebastelt?

    MfG SideWinder



  • @SideWinder: Da Devil667 printf benutzt, hast Du mit C natürlich recht, da die ursprüngliche Frage aber nach Zufallszahlen in C++ war,... aber lassen wir die Haarspalterei 😉
    Nun, mit Borland bin ich mir nicht sicher. Das erschreckende ist nur, dass in einem meiner ersten C++-Bücher auch randomize() und random() vorkamen und ich Ewigkeiten brauchte um rauszukriegen, warum ich das Beispielprogramm nicht kompilieren konnte.
    Ich habe gerade noch mal geschaut, es ist "C++ Start up!" von Data Becker. Und da ist auf CD ein "aktueller GNU-Compiler" dabei, den ich allerdings nie benutzt habe. Vielleicht hat der aber auch die eintsprechend gefälschten Header.
    Das Buch ist auf jeden Fall im Großen und Ganzen schrecklich 😡

    Gruß,
    MTE.



  • random() ist 4.3 BSD. Kein ISO C oder ISO C++. Aber auch keine GNU Erweiterung 🙂

    [ Dieser Beitrag wurde am 17.06.2002 um 21:03 Uhr von kingruedi editiert. ]



  • ich hatte mal 'n kleines programm geschrieben das folgendermaßen aussah:

    int UNum;  /* die Zahl welche eingeben wird */
    int Num;   /* Zahl welche erraten werden sollte */
    int ctr;   /* Laufvariable */
    
    srand( ( int ) time( ( time_t * )0 ) );
    Num = rand() % 11; 
    
    printf( "\nSie haben jetzt 3 Versuche ..." );
    
    for( ctr = 1; ctr <= 3; ctr++ )
    {
       printf( "\nVersuch %d > ", ctr );
        scanf( "%d", &UNum );
    
       if( UNum == Num )
       {
          printf( "\nRichtig! Die Zahl war \"%d\"\n\n", UNum );
          exit( 0 );
       }
    
       else
       {
          printf( "\nNein falsch!\n" );
       }
    }
    
    printf( "\n\nLeider waren es schon 3 Versuche!" );
    printf( "\nEs waere \"%d\" gewesen\n\n\n", Num );
    

    lief eigentlich auch so wie es wollte. naja vielleicht hilft es dir ja weiter 😉

    mfg



  • OK danke für die ganzen Antworten.

    Eine frage hab ich aber noch. Worin besteht der Unterschied zwischen prontf und cout ??? Ich hoffe diese Frage ist nicht allzu dämlich. 🙄



  • In der Kurzfassung: printf ist C, cout ist C++. 😃

    Gruß,
    MTE.



  • BTW: Ist es eigentlich erlaubt, Funktionen im globalen Bereich aufzurufen? Weiß ich gar nicht 🙄.

    printf/cout, vielleicht sollte noch was ziemlich allgemeins hinzugefügt werden:

    printf() ist eine Funktion.
    cout ist eine Instanz der Klasse "basic_ostream". Falls dir Klassen noch nichts sagen: cout ist eine Variable.

    MfG SideWinder



  • Kann man printf denn auch in C++ benutzen?
    Bestände darin ein Vor- oder Nachteil?



  • Ja kann man. Es ist aber nicht sehr zu empfehlen. Vor allem wenn du trotzdem mit cin einliest.

    Irgendeine Funktion, etc. liest dann trotzdem noch mit cout in den eigenen Puffer ein. Und es ist nie gut mit zwei verschiedenen Objekten auf ein und den selben Puffer (ConsoleInput in diesem Fall) zuzugreifen.

    Ich würde immer empfehlen, dass man unter C printf() benützt und unter C++ cout.

    MfG SideWinder



  • cout ist eine Instanz der Klasse "basic_ostream".

    und direkter Erbe von ostream, was wiederum ein Erbe basic_ostream<char> ist (laut standard), du siehst also komplexe Beziehungen in der standard Library

    BTW: Ist es eigentlich erlaubt, Funktionen im globalen Bereich aufzurufen? Weiß ich gar nicht

    nein, dürfte nicht so sein! Aber ich glaube guard meinte, dass sein Source in einer Funktion ist.



  • cout ist eine Instanz der Klasse "basic_ostream".

    und direkter Erbe von ostream, was wiederum ein Erbe basic_ostream<char> ist (laut standard), du siehst also komplexe Beziehungen in der standard Library

    Wie bitte was? basic_ostream ist direkter Erbe von ostream? Nö.

    Die Beziehung gilt eher wie folgt:

    typedef ostream basic_ostream < char , std::char_traits < char > >
    

    Die komplexe Beziehung entsteht durch das Erben von basic_ios und durch die Streampuffer-Klassen.

    MfG SideWinder



  • Erben? Ist da jemand gestorben? 😮 😉
    Was ist denn das schon wieder?



  • @Der Virendoktor:
    Ein gutes Einsteigertutorial zu Klassen (+Vererbung) findest du hier: http://www-public.tu-bs.de:8080/~y0005571/spiele/cpptut/inhalt.htm



  • Lasst den guten Doktor doch erstmal klein anfangen und schickt ihn nicht als Anfgänger in Krisenregionen ;).

    Also: Mach mit deinem Buch/Tutorial ganz normal weiter und ignoriere unsere besserwisserischen Kommentare ;):p:).

    MfG SideWinder


Anmelden zum Antworten