Wie benutzt man rand?



  • Könntet Ihr bei den Zufallszahlen weiterhelfen?

    // Soll Zahl zw 0 und arraySize zurückgeben.
    int getzahl(int arraySize) {
    	double zahl;
    
    	srand((unsigned)time(NULL));
    	zahl = (double)rand() / (double)RAND_MAX * (double)arraySize;
    
    	return (int)zahl;
    }
    

    wenn ich das ausführe kommen momentan fast immer die gleichen Zahlen raus. Wenn ich nicht caste kommt 14,25 dann 14,26 dann 14,78 ... raus.
    Es steht aber so in der MSN Hilfe.



  • es gibt halt keine wirklichen zufall...
    ach die Pseudo-Random-Numbers werden nur berechnet...

    was du mit dem srand machst ist den startwert mit dem dein "Zufall anfängt zu rechnen" mit der aktuellen zeit zu initialisieren...

    wenn du das proggie ständig neu startest kommt halt immer das gleiche raus weil der beim initialisieren mit der zeit glaub ich nur minuten nimmt...

    du musst srand((unsigned)time(NULL)); nur einmal beim start deines proggies aufrufen...

    dann bekommst du bei jedem mal wenn du rand aufrufst (fast) immer eine andere zufallszahl..

    probier mal einfach rand in ner schleife aufzurufen dann wirst du hoffentlich verstehen was ich meine

    int main(){
    int i;
    srand((unsigned)time(NULL));
    for(i=0;i<10;++i)printf("Zahl %d: %d\n",i+1,rand()%100);
    }
    


  • Hallo Windalf,

    vielen Dank:-)
    Hast Du noch einen Tip wie ich den Maximalwert eines Arrays herausbekomme?

    char *xyz[] {
    "gfrt", "rt", "htrrhd", "rht"...
    }

    sizeof(*xyz) funktioniert nicht. Bzw gibt mir die Größe des ersten Elementes...



  • Das kannst du dem Array nicht ansehen. Du musst die Länge eines Arrays immer in
    einer geeigneten Vriable oder Konstante speichern.

    Sowas lernt man aber in jedem guten Buch...



  • Ja schon, man lernt aber nur die Theorie.
    Ich kann Dir jetzt nicht die Stelle oder das Buch nennen wo ich folgendes gelesen habe:
    Alle sizeof Operationen werden zu Compilizeit errechnet. Alle bis auf die von dynamischen Arrays. In meinem Fall ist es aber kein dynamisches Array, da es ja während der Compilezeit angelegt wird. Der Compiler müßte demnach mit sizeof(abc) die Größe des Arrays ermitteln können.

    Es stand auch irgendwo das das geht...



  • Wahrscheinlich so:

    char *xyz[] {
    "gfrt", "rt", "htrrhd", "rht"...
    }
    
    const int SIZE = sizeof(xyz) / sizeof(char*);
    

    -Gunnar



  • Hallo Gunnar,

    vielen Dank. Ich hatte das "/ sizeof(char*)" vergessen und so kamen mir die Werte als zu groß vor...

    Viele Grüße

    Hilbert


Anmelden zum Antworten