stefanos59 Δημοσ. 5 Δεκεμβρίου 2010 Δημοσ. 5 Δεκεμβρίου 2010 καλησπερα εχω την πααρκατω συναρτηση >int random(void ) { srand(time(NULL)); return (1+rand()% 10);//paragwgi arithmou apo to 1 ews to 10 } θα ηθελα να ρωτησω τι κανει η εντολη srand(time(NULL));
Gbax13 Δημοσ. 5 Δεκεμβρίου 2010 Δημοσ. 5 Δεκεμβρίου 2010 δεν ξέρω για την srand φίλε μου πάντως η παραγωγή τυχαίου μέχρι το 10 δεν γίνεται με τη rand(10) ;
anakiou Δημοσ. 5 Δεκεμβρίου 2010 Δημοσ. 5 Δεκεμβρίου 2010 srand(time(NULL));makes use of the computer's internal clock to control the choice of the seed. Since time is continually changing, the seed is forever changing. Remember, if the seed number remains the same, the sequence of numbers will be repeated for each run of the program. Random Number Generator
Timonkaipumpa Δημοσ. 5 Δεκεμβρίου 2010 Δημοσ. 5 Δεκεμβρίου 2010 δεν ξέρω για την srand φίλε μου πάντως η παραγωγή τυχαίου μέχρι το 10 δεν γίνεται με τη rand(10) ; Διάβασε καλύτερα. Δεν είδα πουθενά rand(10) ; καλησπερα εχω την πααρκατω συναρτηση >int random(void ) { srand(time(NULL)); return (1+rand()% 10);//paragwgi arithmou apo to 1 ews to 10 } θα ηθελα να ρωτησω τι κανει η εντολη srand(time(NULL)); Η rand παίρνει σαν "σημείο εκκίνησης" έναν αριθμό (από εκεί που θα ξεκινήσει η ψευδοτυχαία ακολουθία σου με αριθμούς και περίοδο τουλάχιστον 2^32, σύμφωνα με ό,τι λέει η IEEE για την rand). Αυτός ο αριθμός είναι το "0" στον δικό σου κώδικα. Παραπάνω πληροφορίες εδώ
MitsakosGR Δημοσ. 5 Δεκεμβρίου 2010 Δημοσ. 5 Δεκεμβρίου 2010 Η srand() δίνει τον σπόρο (όπως λέγεται στα ελληνικά) για την παραγωγή του τυχαίου αριθμού. Η rand στον υπολογιστή βασίζεται σε έναν αλγόριθμο ψευτοτυχαίων αριθμών. Αυτό σημαίνει ότι με βάση τον σπόρο (seed) παράγεται η ακολουθία τυχαίων αριθμών. Το time(NULL) δίνει σαν σπόρο στην rand τα δευτερόλεπτα που έχουν περάσει από την 1/1/1970(νομίζω). Κάτι δηλαδή που αλλάζει συνεχώς, για αυτό βγάζει συνέχεια διαφορετικά αποτελέσματα. Αν δοκιμάσεις να το τρέξεις βάζοντας κάθε φορά τον ίδιο σπόρο θα δεις ότι τα "τυχαία" αποτελέσματα της rand() θα είναι πάντα τα ίδια. edit γιατί με πρόλαβαν : Αυτός ο αριθμός είναι το "0" στον δικό σου κώδικα. Δεν είναι το "0". Είναι το time(NULL) δηλαδή τα δευτερόλεπτα που έχουν περάσει από την 1/1/1970.
thanos713 Δημοσ. 5 Δεκεμβρίου 2010 Δημοσ. 5 Δεκεμβρίου 2010 Η srand() παίρνει σπέρμα (seed ) από την ώρα στον δικό σου κώδικα... Edit. Με πρόλαβαν...
Timonkaipumpa Δημοσ. 5 Δεκεμβρίου 2010 Δημοσ. 5 Δεκεμβρίου 2010 Η srand() δίνει τον σπόρο (όπως λέγεται στα ελληνικά) για την παραγωγή του τυχαίου αριθμού. Η rand στον υπολογιστή βασίζεται σε έναν αλγόριθμο ψευτοτυχαίων αριθμών. Αυτό σημαίνει ότι με βάση τον σπόρο (seed) παράγεται η ακολουθία τυχαίων αριθμών. Το time(NULL) δίνει σαν σπόρο στην rand τα χιλιοστά του δευτερολέπτου που έχουν περάσει από το 1900 (νομίζω). Κάτι δηλαδή που αλλάζει συνεχώς, για αυτό βγάζει συνέχεια διαφορετικά αποτελέσματα. Αν δοκιμάσεις να το τρέξεις βάζοντας κάθε φορά τον ίδιο σπόρο θα δεις ότι τα "τυχαία" αποτελέσματα της rand() θα είναι πάντα τα ίδια. δεν δίνει "0"; Χμμ.. Λάθος μου, δεν κοίταξα την time.
MitsakosGR Δημοσ. 5 Δεκεμβρίου 2010 Δημοσ. 5 Δεκεμβρίου 2010 Η srand() παίρνει σπέρμα (seed ) από την ώρα στον δικό σου κώδικα... Edit. Με πρόλαβαν... seed = σπόρος sperm = σπέρμα :P :P
Sudavar Δημοσ. 6 Δεκεμβρίου 2010 Δημοσ. 6 Δεκεμβρίου 2010 Εγώ απλά να πω πως το καλύτερο είναι να καλείται η srand μια φορά κατά την διάρκεια του προγράμματός σου. Οπότε να μην την έχεις σε συνάρτηση(εκτός της main) όπως εδώ, αλλά να την καλείς μια φορά όταν αρχίζει το πρόγραμμά σου, στην main.
thanos713 Δημοσ. 6 Δεκεμβρίου 2010 Δημοσ. 6 Δεκεμβρίου 2010 seed = σπόρος sperm = σπέρμα :P :P Α ναι; Λάθος τότε...
Gbax13 Δημοσ. 8 Δεκεμβρίου 2010 Δημοσ. 8 Δεκεμβρίου 2010 Διάβασε καλύτερα. Δεν είδα πουθενά rand(10) ; Το ερωτηματικό στο τέλος ήταν ερώτηση γι'αυτό δεν το έβαλα κολλητά
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.