Zufallszahlen mittels Uhrzeit und Laufzeitberechnung
-
Hallo
Also ein Teil einer Aufgabenstellung lautet wie folgt:
"Verwenden Sie dabei die Uhrzeit als Startwert für den Zufallszahlengenerator."Kann mir bitte jemand erklären wie das geht.
Und Punkt 2 ist rauszufinden wie lange eine Funktion zum ausführen braucht, dazu wäre es notwendige die Zeit davor und danach rauszufinden, denk ich mal. Aber wie komme ich an die Uhrzeit und in weiterer Folge an die Differenz weil dabei gehts ja um Millisekunden denk ich.
Vielen Dank im Voraus.
-
Hi,
ich kann Dir zwar nicht mit einem Beispiel dienen, aber vielleicht hilft Dir das hier weiter:
http://pronix.linuxdelta.de/C/standard_C/c_programmierung_22.shtml
-
Du meinst sicherlich sowas:
srand((unsigned)time(NULL)); k=1+(rand()%10);
Dort wird eine Zufallszahl zwischen 1 und 10 erstellt. Die Systemzeit dient dabei als Startwert.
Ich habe dazu aber noch eine Frage:
Ich füge das o.g in einer while Schleife ein, damit ich mehrere Zufallszahlen generieren kann. Es kommt aber immer die selbe dabei raus! Hab irgendwo etwas von einem Zeitintervall gelesen, kann mir da vielleicht einer weiterhelfen?
-
hm, folgendes Beispiel habe ich auch von obigen Link
#include <stdlib.h> #include <stdio.h> #include <time.h> int main() { int zufallszahl, i; srand(time(NULL)); for (i = 0; i < 5; i++) printf("Zufallszahl lautet %d\n", zufallszahl = rand() % 10 + 1); return 0; }
Wenn ich das ausführe, dann bekomme (fast) immer andere Zahlen geliefert. Wenn ich die Schleife nur einmal durchlaufe, dann sind häufiger die gleichen Werte vertreten, bei mir 1, 4 und 8 sehr dominierend, aber das kann ja auch "Zufall" sein.
-
Ja, stimmt.
Mein Fehler lag darin, dass ich meinn
srand((unsigned)time(NULL));
mit in die Schleife gepackt habe. Das darf anscheinend nicht. Jetzt geht es bei mir auch. Dankeschön.
Vergesst aber bitte nicht die zweite Frage des Threaderöffners, nicht das sein Problem jetzt hier untergeht, nur weil ich mich dazwischen gemogelt hab
-
Kinkster schrieb:
Ja, stimmt.
Mein Fehler lag darin, dass ich meinn
srand((unsigned)time(NULL));
mit in die Schleife gepackt habe. Das darf anscheinend nicht.
Das darf man deswegen nicht, weil srand() den Startwert (seed) für rand() vorgibt. Wenn dieser aber immer derselbe ist (time(NULL) gibt innerhalb einer Sekunde ja immer denselben Wert), dann spuckt rand() auch immer die gleichen Werte aus.
-
Auch dafür gibt es dort ein Beispiel, auf der gleichen Seite:
#include <stdio.h> #include <time.h> int main() { clock_t prgstart, prgende; int c; prgstart=clock(); printf("Bitte geben Sie irgendetwas ein und " "beenden Sie mit '#'!!\n"); printf("\n > "); while((c=getchar())!= '#') putchar(c); prgende=clock(); printf("Die Programmlaufzeit betrug %.2f Sekunden\n", (float)(prgende-prgstart) / CLOCKS_PER_SEC); return 0; }
-
Herzlichen Dank