random number generator c
Αυτό το σεμινάριο περιγράφει λεπτομερώς τη χρήση των συναρτήσεων rand () και srand () για τη δημιουργία τυχαίων αριθμών στο C ++:
Πολλές φορές απαιτούμε τη χρήση τυχαίων αριθμών στην εφαρμογή μας για την παραγωγή προσομοιώσεων ή παιχνιδιών και άλλων εφαρμογών που απαιτούν τυχαία συμβάντα.
Για παράδειγμα, σε ένα παιχνίδι με ζάρια, χωρίς τυχαία γεγονότα, θα έχουμε την ίδια πλευρά να εμφανίζεται κάθε φορά που ρίχνουμε τα ζάρια δίνοντας έτσι ανεπιθύμητα αποτελέσματα.
Έτσι καθίσταται απαραίτητο να έχουμε στη διάθεσή μας μια γεννήτρια τυχαίων αριθμών. Στο φυσικό περιβάλλον, μπορούμε να δημιουργήσουμε τυχαία συμβάντα, αλλά δεν είναι δυνατόν όταν πρόκειται για υπολογιστές.
=> Διαβάστε το The Easy C ++ Training Series.
Αυτό συμβαίνει επειδή τα πάντα στους υπολογιστές είναι δυαδικά, δηλαδή 0 ή 1 (αληθινά ή λάθος) και τίποτα στο μεταξύ. Έτσι, οι υπολογιστές δημιουργούν συνήθως προβλέψιμα συμβάντα και δεν είναι σε θέση να δημιουργήσουν τυχαία συμβάντα.
Αντ 'αυτού, οι υπολογιστές προσομοιώνουν την τυχαιότητα που γίνεται χρησιμοποιώντας ψευδο-τυχαία γεννήτρια αριθμών (PRNG) . Το C ++ διαθέτει γεννήτρια τυχαίων αριθμών και μπορεί να χρησιμοποιηθεί με πολλές από τις εφαρμογές.
Σε αυτό το σεμινάριο, θα συζητήσουμε λεπτομερώς τις λειτουργίες / προσεγγίσεις για τη δημιουργία τυχαίων αριθμών στο C ++.
Τι θα μάθετε:
- Ψευδο-τυχαία γεννήτρια αριθμών (PRNG) σε C ++
- rand And srand Λειτουργίες στο C ++
- Διαφορά μεταξύ rand () και sand ()
- C ++ Random Float
- Τυχαίος αριθμός C ++ μεταξύ 0 και 1
- Τυχαίος αριθμός C ++ μεταξύ 1 και 10
- Συχνές Ερωτήσεις
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Ψευδο-τυχαία γεννήτρια αριθμών (PRNG) σε C ++
Σε γενικές γραμμές, μια ψευδο-τυχαία γεννήτρια αριθμών (PRNG) μπορεί να οριστεί ως ένα πρόγραμμα που παίρνει έναν σπόρο ή έναν αρχικό αριθμό και τον μετατρέπει σε κάποιο άλλο αριθμό που διαφέρει από τον σπόρο χρησιμοποιώντας μαθηματικές πράξεις.
Αυτή η διαδικασία πραγματοποιείται επανειλημμένα λαμβάνοντας τον τελευταίο αριθμό που δημιουργήθηκε κάθε φορά. Κάθε φορά που ο αριθμός που δημιουργείται δεν σχετίζεται με τους προηγούμενους αριθμούς. Έτσι, αυτό το πρόγραμμα μπορεί να δημιουργήσει μια σειρά αριθμών που εμφανίζονται τυχαία.
Η γλώσσα C ++ συνοδεύεται από μια ενσωματωμένη γεννήτρια ψευδο-τυχαίων αριθμών και παρέχει δύο λειτουργίες rand () και srand () που μπορούν να χρησιμοποιηθούν για τη δημιουργία τυχαίων αριθμών.
Ας συζητήσουμε λεπτομερώς αυτές τις δύο λειτουργίες.
πώς να ανοίξετε το αρχείο xml στο πρόγραμμα περιήγησης
rand And srand Λειτουργίες στο C ++
srand ()
Πρωτότυπο λειτουργίας: άκυρο srand (χωρίς υπογραφή int seed)
Παράμετροι: seed - Μια ακέραια τιμή που θα χρησιμοποιηθεί ως seed από τον αλγόριθμο ψευδο-τυχαίων αριθμών.
Τιμή επιστροφής: Κανένας
Περιγραφή: Η συνάρτηση srand χρησιμοποιείται για την αρχικοποίηση της ακολουθίας ψευδο-τυχαίων αριθμών με μια παράμετρο που ονομάζεται «τυχαίος σπόρος». Κάνει την έξοδο της λειτουργίας rand να φαίνεται τυχαία. Διαφορετικά, η έξοδος της συνάρτησης rand () θα είναι η ίδια κάθε φορά που την ονομάζουμε.
Επομένως, εάν σπείρουμε τη γεννήτρια τυχαίων αριθμών με τη συνάρτηση srand (), θα ξεκινήσει η γεννήτρια από το σημείο που εξαρτάται από την τιμή ορίσματος που μεταβιβάστηκε στο srand. Εάν ορίσουμε τη γεννήτρια τυχαίων αριθμών με το χρόνο του συστήματος Για παράδειγμα, πριν από την πρώτη κλήση στη συνάρτηση rand (), τότε θα παράγει τους τυχαίους αριθμούς κάθε φορά που εκτελούμε το πρόγραμμα.
Σημειώστε ότι πρέπει συνήθως να καλέσουμε τη συνάρτηση srand () μόνο μία φορά πριν από τη συνάρτηση call to rand () και όχι κάθε φορά που δημιουργούμε τυχαίους αριθμούς.
ραντ ()
Πρωτότυπο λειτουργίας: int rand (άκυρο);
Παράμετροι: κανένας
Τιμή επιστροφής: Μια ακέραια τιμή μεταξύ 0 και RAND_MAX.
Περιγραφή: Η συνάρτηση rand () δημιουργεί τον επόμενο τυχαίο αριθμό στην ακολουθία. Ο αριθμός που δημιουργείται είναι ο ψευδο-τυχαίος ακέραιος αριθμός μεταξύ 0 και RAND_MAX. Το RAND_MAX είναι μια σταθερά στην κεφαλίδα που έχει οριστεί γενικά στην τιμή 32767.
#include #include #include int main() { std::srand(static_cast(std::time(nullptr))); for (int count=1; count <= 100; ++count) { std::cout << std::rand() << ' '; // display 5 random numbers per row if (count % 5 == 0) std::cout << '
'; } return 0; }
Παραγωγή:
Στο παραπάνω πρόγραμμα, δημιουργήσαμε τους πρώτους 100 τυχαίους αριθμούς, δίνοντας το ρολόι συστήματος ως το σπόρο για τη λειτουργία srand. Σε αυτό το πρόγραμμα, χρησιμοποιήσαμε λειτουργίες τόσο srand όσο και rand. Λάβετε υπόψη ότι λόγω του ρολογιού συστήματος ως σπόρου, η παραγωγή που παράγεται θα είναι διαφορετική κάθε φορά που εκτελούμε το πρόγραμμα.
Διαφορά μεταξύ rand () και sand ()
σειρά() | srand () |
---|---|
Χρησιμοποιείται για τη δημιουργία τυχαίων αριθμών. | Σπέρνει το PRNG που χρησιμοποιείται από τη λειτουργία rand (). |
Κλήθηκε όσες φορές θέλουμε να δημιουργήσουμε τους τυχαίους αριθμούς. | Κλήθηκε μόνο μία φορά για να δείτε τη γεννήτρια τυχαίων αριθμών. |
Δεν παίρνει επιχειρήματα. | Παίρνει την παράμετρο που χρησιμοποιείται για τη δημιουργία γεννήτρια τυχαίων αριθμών. |
Επιστρέφει την ακολουθία τυχαίων αριθμών κάθε φορά που καλείται. | Δεν επιστρέφει μια τιμή. |
C ++ Random Float
Η συνάρτηση rand () που έχουμε δει από προεπιλογή επιστρέφει μια ακέραια τιμή που μπορεί να προκαλέσει υπερχείλιση σε ορισμένες περιπτώσεις. Έτσι, μπορούμε να χρησιμοποιήσουμε float ή double value. Μπορούμε να δημιουργήσουμε τυχαίους αριθμούς float ρίχνοντας την τιμή επιστροφής της συνάρτησης rand () στο «float».
Έτσι, τα παρακάτω θα δημιουργήσουν έναν τυχαίο αριθμό μεταξύ float 0,0 και 1,0 (και οι δύο συμπεριλαμβάνουν).
cout< Ομοίως, η παρακάτω γραμμή θα δημιουργήσει έναν τυχαίο αριθμό μεταξύ 1.2 και 3.4
cout<<1.2 + static_cast (rand()) / ( static_cast (RAND_MAX/(3.4-1.2)));
Στο επόμενο παράδειγμα παρακάτω χρησιμοποιούμε τυχαίο float για να δημιουργήσουμε την έξοδο.
Τυχαίος αριθμός C ++ μεταξύ 0 και 1
Μπορούμε να χρησιμοποιήσουμε τη συνάρτηση srand () και rand () για τη δημιουργία τυχαίων αριθμών μεταξύ 0 και 1. Σημειώστε ότι πρέπει να ρίξουμε την έξοδο της συνάρτησης rand () στην δεκαδική τιμή είτε float είτε double.
Η προεπιλεγμένη τιμή επιστροφής της συνάρτησης rand (), δηλαδή ο ακέραιος αριθμός είναι ανεπαρκής για την εμφάνιση τυχαίων αριθμών μεταξύ 0 και 1 που είναι κλάσματα.
Το πρόγραμμα C ++ που δίνεται παρακάτω εμφανίζει τους πρώτους πέντε τυχαίους αριθμούς μεταξύ 0 και 1.
δωρεάν λογισμικό μετατροπής βίντεο για τα Windows 10
#include #include using namespace std; int main() { cout<<'Random numbers generated between 0 and 1:'< Παραγωγή :
Βλέπουμε ότι η έξοδος του προγράμματος είναι ο τυχαίος αριθμός μεταξύ 0 και 1 που είναι κλάσματα.
Αν δεν ρίξουμε την τιμή επιστροφής της συνάρτησης rand () σε float ή double, τότε θα λάβουμε το 0 ως τον τυχαίο αριθμό.
Τυχαίος αριθμός C ++ μεταξύ 1 και 10
Το επόμενο παράδειγμα είναι η δημιουργία τυχαίων αριθμών μεταξύ 1 και 10. Ακολουθεί το πρόγραμμα C ++ που δημιουργεί τυχαίους αριθμούς.
Καλούμε τη λειτουργία srand με το ρολόι συστήματος και στη συνέχεια καλούμε τη λειτουργία rand με τους χειριστές της μονάδας 10.
#include #include #include using namespace std; int main() { srand(time(0)); // Initialize random number generator. cout<<'Random numbers generated between 1 and 10:'< Παραγωγή:
Στο παραπάνω πρόγραμμα, δημιουργούμε τους πρώτους 10 τυχαίους αριθμούς μεταξύ 1 και 10. Σημειώστε ότι κάθε φορά που εκτελείται το πρόγραμμα, δημιουργεί διαφορετικά σύνολα αριθμών λόγω της κλήσης της συνάρτησης srand.
Συχνές Ερωτήσεις
Q # 1) Ποιο είναι το αρχείο κεφαλίδας για τη συνάρτηση Random στο C ++;
Απάντηση: Οι συναρτήσεις για τη δημιουργία τυχαίων αριθμών, rand και srand ορίζονται στο< cstdlib > κεφαλίδα του C ++.
Q # 2) Τι είναι το Rand_max στο C ++;
Απάντηση: RAND_MAX είναι μια σταθερά στην κεφαλίδα που έχει οριστεί γενικά στην τιμή 32767. Η ψευδο-τυχαία γεννήτρια αριθμών (PRNG) δημιουργεί τυχαίους αριθμούς μεταξύ 0 έως RAND_MAX.
Q # 3) Πώς λειτουργεί η τυχαία λειτουργία;
Απάντηση: Το C ++ υποστηρίζει δύο τυχαίες λειτουργίες, δηλ. srand () και rand (). Η συνάρτηση srand () δημιουργεί τη γεννήτρια τυχαίων αριθμών που χρησιμοποιείται από τη συνάρτηση rand () η οποία δημιουργεί την ακολουθία τυχαίων αριθμών ανάλογα με τον αρχικό σπόρο που παρέχεται.
Q # 4) Πώς λείπεις με το χρόνο;
Απάντηση: Η συνάρτηση srand δημιουργεί την ψευδο-τυχαία γεννήτρια αριθμών (PRNG) που χρησιμοποιείται από τη συνάρτηση rand (). Είναι μια συνήθης πρακτική να χρησιμοποιείτε το αποτέλεσμα μιας κλήσης στο χρόνο (0) ως σπόρος. Αυτή η συνάρτηση χρόνου επιστρέφει την τιμή, μερικά δευτερόλεπτα από τις 00:00 ώρες, 1 Ιανουαρίου 1970, UTC (τρέχουσα χρονική σήμανση UNIX).
Έτσι, η αξία των σπόρων αλλάζει κάθε δευτερόλεπτο. Ως εκ τούτου, κάθε φορά που καλείται srand με συνάρτηση χρόνου, δημιουργείται ένα νέο σύνολο τυχαίων αριθμών.
συμπέρασμα
Συζητήσαμε λεπτομερώς τη δημιουργία τυχαίων αριθμών σε αυτό το σεμινάριο. Οι γλώσσες προγραμματισμού ή γενικά οι υπολογιστές δεν δημιουργούν τυχαίους αριθμούς καθώς έχουν σχεδιαστεί για να παρέχουν προγνωστική έξοδο. Ως εκ τούτου, πρέπει να προσομοιώσουμε την τυχαιότητα.
Προκειμένου να προσομοιώσουμε την τυχαιότητα, χρησιμοποιούμε ψευδο-τυχαία γεννήτρια αριθμών (PRNG) που είναι ενσωματωμένη στο C ++. Έτσι, χρησιμοποιώντας τις δύο συναρτήσεις, rand () και srand () μπορούμε να δημιουργήσουμε τυχαίους αριθμούς σε C ++.
Η συνάρτηση srand () χρησιμοποιείται για την παροχή σπόρου για τη δημιουργία τυχαίων αριθμών ενώ η συνάρτηση rand () δημιουργεί τον επόμενο τυχαίο αριθμό στην ακολουθία.
=> Αναζητήστε ολόκληρη τη σειρά προπόνησης C ++ εδώ.
Συνιστώμενη ανάγνωση
- C # Τυχαίος αριθμός και C # Τυχαία γεννήτρια συμβολοσειρών με παραδείγματα κώδικα
- Εκπαιδευτικό πρόγραμμα Python Main Function με πρακτικά παραδείγματα
- Tutorial Unix Pipes: Pipes in Unix Programming
- Επανάληψη σε C ++
- Λειτουργίες φίλων στο C ++
- Πολυμορφισμός σε C ++
- Αντικειμενοστρεφής προγραμματισμός στο C ++
- OOP Java: Εισαγωγή στον αντικειμενοστρεφή προγραμματισμό στην Java