Zufallszahl...



  • Ich habe mir nen C++ Buch gekauft in dem der folgende Code steht, um eine Zufallszahl zu erzeugen, nur das die KOmmentare in dem Beispiel aus dem Buch richtige Befehle sind, keine KOmmentare. Das ganze funftioniert aber auch wenn man diese Befehle weglässt!??? -Wozu brauch ich die überhaupt? -Oder brauch ich die überhaupt?

    #include "stdafx.h"
    #include  <cstdlib>
    #include <ctime>
    #include <iostream>
    using namespace std;
    int main()
    { 
    int i,s,min,max,range,r;
    //unsigned seed=time(NULL);
    //cout<< "Seed= "<<seed<<endl;
    //srand(seed);
    cout << rand() << endl;
    cout<<"Enter minimum number: ";
    cin >> min;
    cout<<"Enter the maximum number: ";
    cin >> max;
    range=max-min+1;
    for(i=0;i<8;i++) {
        r=rand()/100%range + min;
    
     cout<< r <<endl;
    
     }
    


  • Starte das Programm 2 mal, und schau dir die Zahlen an.
    Dann füge die Code Zeilen wieder hinzu, und starte das Programm noch 2 mal.
    Vergleiche wieder die Zahlen...

    Devil



  • Ah, okay danke!!! Ich vertehe zwar nicht wirklich wie das funktioniert!??????? aber die Farge is auf jeden Fall beantwortet!



  • das liegt daran, dass die zufallszahlen auch nur nach einer sehr komplizierten
    formel berechnet werden. dabei wird ein startwert automatisch an die funktion übergeben, der als ausgangswert für die berechnung dient.
    wenn du jetzt das programm öfters aufrufst, wird immer der gleiche startwert genommen und dementsprechend ist die folge der sogenannten "zufallszahlen" immer die gleiche.
    daher benutzt man einen "billigen" trick:
    man übergibt einfach die aktuelle systemzeit als startwert(das macht man mit srand()) und die is ja immer verschieden zu jedem programmstart, ergo sind die folgen der zufallszahlen auch immer neue...
    alternativ zu der geposteten schreibweise(in den kommentaren), die ich ein bissl umständlich find, kannst du auch schreiben:

    srand((unsigned)time(NULL));
    

    hier castest du also den rückgabewert von "time", der ja glaub ich in sekunden seit dem 1.1.1970 zurückgegeben wird, in einen unsigned-datentyp.
    time(NULL) ist glaub ich die aktuelle zeit...

    gruß
    konstantin



  • oder du nimmst gleich randomize(), der macht fast dasselbe, benutzt aber den xten Sekundenbruchteil sprich du wirst selbst dann keine Probleme bekommen wenn du randomize mehrmals innerhalb einer Sekunde aufrufst.

    *edit*
    ich seh grad
    inline void _RTLENTRY randomize(void) { srand((unsigned) time(NULL)); }

    also irgendwie hat mein Lehrer mir früher mist erzählt 😡
    Naja aber dafür kann man sich randomize() besser merken 🙄

    [ Dieser Beitrag wurde am 17.06.2003 um 13:16 Uhr von dreaddy editiert. ]



  • von randomize hab ich noch nie was gehört, is ja genial.
    is die auch in der stdio.h bzw -.lib oder selbst definiert ??
    gruß
    konstantin



  • Original erstellt von ethereal:
    von randomize hab ich noch nie was gehört, is ja genial.
    is die auch in der stdio.h bzw -.lib oder selbst definiert ??
    gruß
    konstantin

    bei borland dabei, die anderen bauen sich es selber.
    sieht wesentlich schöner, als srand(time(0)) aus.


Anmelden zum Antworten