problem mit random befüllten array



  • aber wieso????, kann man das nicht ändern?
    das soll nämlich später mal eine anwendung werden wo mann prozesse simulieren kann(eine art scheduler) und wenn ich dann die warteschlange füllen will(mit dem array: _arrProzesse) hätte ich aber gerne neu generierte werte.
    geht so etwas, oder nich....

    rendner



  • so ein mist, kann man bestimmt nur als registrierter user seine beiträge bearbeiten...naja
    @ elise
    noch mal zum array, das wird doch mit Prozessen gefüllt die zufallswerte enthalten,
    siehe: Prozess::Prozess() und wenn ich das aufrufe müssten die doch immer neu generiert werden.

    rendner[i]
    Es gibt nur 10 Typen von Menschen auf der Welt:
    Die, die Binärcode verstehen und die, die es nicht tun.



  • Wo ist denn dein srand(time(NULL))-Aufruf ?

    Jockel



  • @ Jockelx
    ??? weis leider nicht was du damit meinst, was soll denn das bezwecken????



  • rendner schrieb:

    @ Jockelx
    ??? weis leider nicht was du damit meinst, was soll denn das bezwecken????

    Das initialisiert den Zufallsgenerator. Du solltest diese Funktion einmal bei
    Programmstart aufrufen, dann bekommst du auch unterschiedliche Zufallswerte.

    mfg
    v R



  • und wie würde ich das jetzt schreiben, hab das so eingefügt wie hier gesagt und das gibtn fehler, ansonsten die werte sind schon zufällig, aber halt nur beim ersten mal aber vielleicht liegt es daran.
    also wäre schön wenn ihr mir das mal mit dem srand erklären könntet...



  • so habe mich mal ein bischen belesen, wegen dem: srand(time(NULL));
    das funtzt ja, aber dadurch das das array sofort gefüllt ist sind jetzt alle prozesse gleich, da das füllen weniger als 1ne sekunde dauert und srand(time(NULL)) würde hier nur verschiedene werte liefern wenn ich aller 1 sekunde einen prozess erzeuge, somit unbrauchbar.
    oder kann man das noch anders schreiben, hatte das jetzt so eingefügt:

    Prozess::Prozess()
    {
    //srand(time(NULL));<-------erzeugt aber dadurch jetzt immer den gleichen
    m_start = 0;//???
    m_size = rand()%500+2;
    m_takt = m_size+(rand()%80);
    m_name = arrName[rand()%30-1];
    m_status = 0;
    m_faktor = m_takt / _cpuTakt;
    }

    habe also im _arrProzesse 100 mal den gleichen prozess

    😞



  • Wie wäre es, wenn du das an den Anfang deines Programmes schreibst?



  • SirLant schrieb:

    Wie wäre es, wenn du das an den Anfang deines Programmes schreibst?

    wenn ichs im prog ganz oben schreibe kommen folgende fehler:

    error C2501: 'srand' : Fehlende Speicherklasse oder Typbezeichner
    error C2373: 'srand' : Neudefinition; unterschiedliche Modifizierer

    und wenn ichs in die main schreibe kommt dann fehler in der anwendung und es passiert nix, kann das denn keiner mal bei sich ausprobieren bevor er nen vorschlag postet

    rendner



  • das in der main war ein fehler meinerseits;)
    in der main bringt das gar nix



  • rendner schrieb:

    das in der main war ein fehler meinerseits;)
    in der main bringt das gar nix

    Glaub ich dir nicht 😛

    Versuch mal das

    int main(){
    
        srand (time (NULL));
    
        for(int i=99; i>=0; i--)
        {
            cout<<_arrProzesse[i].getProName()<<setw(5)<<_arrProzesse[i].getProSize() <<endl;
        }
        return 0;
    }
    


  • SirLant schrieb:

    Versuch mal das

    int main(){
    
        srand (time (NULL));
    
        for(int i=99; i>=0; i--)
        {
            cout<<_arrProzesse[i].getProName()<<setw(5)<<_arrProzesse[i].getProSize() <<endl;
        }
        return 0;
    }
    

    ...klappt doch nich!!!!!!!!!!
    hab ich auch ausprobiert!!!
    sonnst kopier mal den script von mir include mal noch time.h und probiers mal selber, unter die for-schleife in der main generiert ja nich die prozesse sondern gibt die aus, und wenn du die konsole dann schliest und erneut "emulierst" sind das genau die gleichen wie vorher....

    rendner



  • rendner schrieb:

    SirLant schrieb:

    Versuch mal das

    int main(){
    
        srand (time (NULL));
    
        for(int i=99; i>=0; i--)
        {
            cout<<_arrProzesse[i].getProName()<<setw(5)<<_arrProzesse[i].getProSize() <<endl;
        }
        return 0;
    }
    

    ...klappt doch nich!!!!!!!!!!
    hab ich auch ausprobiert!!!
    sonnst kopier mal den script von mir include mal noch time.h und probiers mal selber, unter die for-schleife in der main generiert ja nich die prozesse sondern gibt die aus, und wenn du die konsole dann schliest und erneut "emulierst" sind das genau die gleichen wie vorher....

    rendner

    Achso du hast da nen globales Array, dann kann es natürlich nicht gehen, schreib in deinen Konstruktor folgendes:

    static bool firstTime = true;
    if (firstTime)
    {
    srand (time (NULL));
    firstTime = false;
    }



  • boah...geil!
    mensch das is ja fein, funtzt!!!!
    aber wenn ichs ausführe habe ich manchmal so ne zeile wo ne zahl steht obwohl da ein name und denn die prozessSize stehen müsste, bekommt man das noch weg und nun musste mir auch noch erklären was deine zeilen da bewirken steig da nicht ganz durch.

    aber vielen dank, hab schon gedacht das wird nie was
    rendner 🙂



  • Denkbar wäre auch sowas:

    int seed_rng() {
      srand(time(NULL));
      return 0;
    }
    
    //...
    
    Prozess::Prozess() {
      static int dummy_to_seed_rng = seed_rng();
    
      //...
    }
    


  • 0xdeadbeef schrieb:

    Denkbar wäre auch sowas:

    int seed_rng() {
      srand(time(NULL));
      return 0;
    }
    
    //...
    
    Prozess::Prozess() {
      static int dummy_to_seed_rng = seed_rng();
    
      //...
    }
    

    das is ja das gleiche, aber ich denke ein bischen verschwenderisch, hab ja dann in jeden Prozess(insgesamt 100)ne variable die ich gar nicht brauch, aber trotzdem DANKE.
    aber ist das nicht so das man ne static-vari nur einmal nen wert zu weisen kann und dann nicht mehr,

    static bool firstTime = true; 
    if (firstTime) 
    { 
    srand (time (NULL)); 
    firstTime = false; //<------------somit geht das doch auch nicht
    
    }
    

    was das problem mit den zahlen zwischen den Prozessen(bei ausgabe des _arrPozesse, in der main)angeht weis ich immer noch nicht wie das zu stande kommt(es wird ja ein name per zufall daraus gewählt mit folgendem zugriff: rand()%30-1) und somit greift er ja auf die elemente 0-29, ich checks einfach nicht.
    kann mir da noch mal einer helfen, ansonsten schon mal danke an alle für ihre hilfe, besonderst an SirLant und 0xdeadbeef

    rendner



  • gut das mit dem static hat sich erledigt das was ich meinte war dann const, naja werds auch irgendwann lernen....;)



  • so jetzt funtzt alles, war ein flüchtichketsfehler meinerseits...

    have a nice day, rendner



  • Der Bezeichner static bedeutet, dass die Variable in einem statischen Speicherbereich liegt. Dementsprechend wird sie nur einmal initialisiert und srand(time(NULL)) wird nur einmal ausgeführt - und das auf jeden Fall bevor du das erste mal rand() benutzt. Der Vorteil gegenüber der bool-Konstruktion ist, dass du auf 100 unnötige bool-Vergleiche verzichten kannst, maw es ist schneller.


Anmelden zum Antworten