User Tools

Site Tools


qna:c:lib:stdlib:seed-time

Η srand

Ο σκοπός της srand είναι να παρέχει έναν αρχικό σπόρο (seed) στο σύστημα παραγωγής ψευδοτυχαίων αριθμών. Δέχεται μία παράμετρο (που είναι unsigned int) την οποία χρησιμοποιεί για να καθορίσει την ακολουθία των ψευδοτυχαίων αριθμών που παράγονται από τις κλήσεις της rand από εκείνη τη στιγμή και μετά.

Δηλαδή για μία οποιαδήποτε δεδομένη τιμή του σπόρου, η ακολουθία των αποτελεσμάτων που δίνουν διαδοχικές κλήσεις στη συνάρτηση rand (ενώ διαφέρουν από τη μία κλήση στην άλλη), θα είναι πάντα η ίδια. Έτσι κάθε φορά που θα εκτελείται ο κώδικας, θα προκύπτουν τα ίδια αποτελέσματα.

Αυτό φυσικά δεν ταιριάζει με τον σκοπό να είναι τα αποτελέσματα όσο πιο τυχαία γίνεται. Έτσι θα πρέπει να δωθεί ως παράμετρος στην srand ένας αριθμός που είναι διαφορετικός κάθε φορά που εκτελείται το πρόγραμμά μας.

Ένας καλός υποψήφιος για αυτή τη δουλειά είναι η χρονική στιγμή κατά την οποία ξεκινά η εκτέλεση του προγράμματος. Έτσι θα χρησιμοποιήσουμε τη συνάρτηση time(NULL) ( ή time(0) ), η οποία επιστρέφει τον αριθμό των δευτερολέπτων που έχουν περάσει μέχρι τη στιγμή που καλείται, μετρώντας από την 1/1/1970. Άρα σε κάθε εκτέλεση είναι διαφορετική η τιμή αυτή. Μπορείτε να δείτε περισσότερα στη σελίδα:
https://www.tutorialspoint.com/c_standard_library/c_function_time.htm

Άρα καλή πρακτική είναι στην αρχή κάθε προγράμματος που θα χρησιμοποιήσει την rand να μπαίνει ο παρακάτω κώδικας που ορίζει το seed (τον σπόρο).

srand( time( NULL ) );

ή

srand( time( 0 ) );

Για να χρησιμοποιήσετε την time θα πρέπει να κάνετε #include <time.h> ενώ εάν έχετε χρησιμοποιήσει τη γραφή με το NULL, ίσως χρειαστεί να κάνετε και #include <stdlib.h>.

ΠΡΟΣΟΧΗ! Η srand θα πρέπει να καλείται μία φορά πριν την πρώτη χρήση της rand στην αρχή του κώδικα - καλύτερα να είναι μία από τις πρώτες εντολές της main - και όχι κάθε φορά που χρησιμοποιείται η rand. Δείτε και αυτό το σχετικό άρθρο:
https://stackoverflow.com/questions/7343833/srand-why-call-it-only-once

qna/c/lib/stdlib/seed-time.txt · Last modified: 2021/03/12 10:19 by xallos