Zufallszahl | switch case | Variable | Fehler



  • also stell ich mir bis jetzt zwei FRAGEN :
    1. wie ändere ich zufall() in freie Funktion?
    Also eine freie Funktion stelle ich mir ohne Scope-Operator einfach mit

    int zufall(int);
    

    vor.
    Die Methode wird dann zu Funktion und kann somit auch nicht unter private in der Klasse im Header bleiben. richtig? D.h. ich muss sie noch VOR der Deklaration der Klasse hinschreiben, oder?

    2. wohin verschiebe ich srand() ?
    -> also soll ich echt nach main() suchen? Ich bin mir zu 99% sicher das die initialisierung von der Klasse an der ich arbeite nur 1 mal durchgeführt wird.

    DAAAAAAAAAAANKE fürs lesen 🙂



  • Michi8080 schrieb:

    Also eine freie Funktion stelle ich mir ohne Scope-Operator einfach mit

    int zufall(int);
    

    vor.

    Genau.

    Michi8080 schrieb:

    Die Methode wird dann zu Funktion und kann somit auch nicht unter private in der Klasse im Header bleiben. richtig? D.h. ich muss sie noch VOR der Deklaration der Klasse hinschreiben, oder?

    Nicht unbedingt davor, einfach im Header. Wenn sie nur lokal in der Implementierungsdatei (.cc) verwendet wird, kannst du sie auch erst da deklarieren. Aber definieren auf jeden Fall erst da.

    Michi8080 schrieb:

    2. wohin verschiebe ich srand() ?
    -> also soll ich echt nach main() suchen? Ich bin mir zu 99% sicher das die initialisierung von der Klasse an der ich arbeite nur 1 mal durchgeführt wird.

    Wenn du dir fast sicher bist, kannst du srand() auch dort aufrufen. Du kannst ja mit Standardausgaben prüfen, ob der Teil mehr als einmal aufgerufen wird...



  • versteh ich es richtig das ich aus aktuell :

    int CommonPartSublayerScheduling::zufall(int a) {
    
            int r = 0;
            srand( (unsigned) time(NULL) ) ;
            for (int i=0; i<10; i++) {
            r = 1 + rand() % 100;
    
            return (r);
            }
    

    die Funktion so reduzieren muss :

    int zufall(int a) {
    
            int r = 0;
            for (int i=0; i<10; i++) {
            r = 1 + rand() % 100;
    
            return (r);
            }
    

    und dann noch :

    srand( (unsigned) time(NULL) ) ;
    

    in die .cc direkt in die Initialisierung kopieren

    und

    in .h statt :

    int zufall(int WERT);
    

    innerhalb der Klasse steht, diese Funktion außerhalb der Klasse platzieren.

    richtig?



  • Ja. Du weisst aber schon, dass ein return die Funktion unmittelbar beendet, oder?

    Einrückung wäre übrigens immer noch keine schlechte Idee...



  • also mit beenden war es mir jetzt nicht primär bewusst.
    Aber ich will ja nur in die Funktion rein, WERT zuweisen und diesen zurückgeben, FERTIG!
    Ob die Funktion dann Beendet ist oder nicht, wo ist da der Unterscheid wenn ich immer neue Werte erzeugen werde und kein "Memory" Effekt brauche? Oder sehe ich es falsch?



  • Dann lass die Schleife weg. Die wird ja so eh nur einmal ausgeführt..



  • also ich habe alles genau so gemacht ..

    jetzt wird immer eine 0 ausgeworfen???

    hmm??



  • int zufall() 
    {
     return (rand()%100);
    }
    

    Ansonsten sag mal, was du willst.. 🙄



  • ja ich glaube genau das. das ich immer eine neue Zufallszahl zwischen 0 und 100 zurückgebe

    DANKE! ich versuch es mal.....



  • SUPER! 😉 es läuft wunderbar!!!! :)))))

    Daaaaaaaaaaaaaaaaaaaaaaaaanke!



  • Und dafür haben wir jetzt 4 Seiten gebraucht?!.. 😉



  • // ...
    if ( 0 < WERT < 60 )
    // ...
    

    Nur falls es noch nicht erwähnt wurde: das ist natürlich Blödsinn, so kann man das in C++ nicht schreiben.
    Wenn dann so:

    if ( 0 < WERT && WERT < 60 )
    

    Wobei der "0 < WERT"-Teil IMO sowieso unnötig ist.



  • ja .... sorry das es über 4 Seiten ging.

    Mir hat es sehr geholfen 😉


Anmelden zum Antworten