- Pseudo- Penjana Nombor Rawak (PRNG) Dalam C++
- Fungsi rand Dan srand Dalam C++
- Perbezaan Antara rand () Dan srand ()
- C++ Random Float
- C++ Random Number Between 0 And 1
- C++ Random Number Between 1 And 10
- Frequently Asked Questions
- Conclusion
Tutorial Ini Menerangkan Penggunaan Fungsi rand() dan srand() secara Terperinci untuk Menjana Nombor Rawak dalam C++:
Banyak kali kami memerlukan penggunaan nombor rawak dalam aplikasi kami untuk menghasilkan simulasi atau permainan dan aplikasi lain yang memerlukan acara rawak.
Sebagai contoh, dalam permainan dadu, tanpa acara rawak, kita akan mempunyai bahagian yang sama muncul setiap kali kita melontar dadu sekali gus memberikan hasil yang tidak diingini.
Oleh itu, kita perlu mempunyai penjana nombor rawak yang boleh kita gunakan. Dalam persekitaran fizikal, kita boleh mempunyai peristiwa rawak yang dijana tetapi ia tidak mungkin apabila melibatkan komputer.
Ini kerana segala-galanya dalam komputer adalah binari iaitu 0 atau 1 (benar atau palsu) dan tiada di antaranya. Oleh itu, komputer biasanya menjana peristiwa yang boleh diramal dan tidak dapat menjana peristiwa rawak.
Sebaliknya, komputer mensimulasikan rawak yang dilakukan menggunakan penjana nombor rawak pseudo (PRNG) . C++ mempunyai penjana nombor rawak dan boleh digunakan dengan banyak aplikasi.
Dalam tutorial ini, kita akan membincangkan fungsi/pendekatan untuk menjana nombor rawak dalam C++ secara terperinci.
Pseudo- Penjana Nombor Rawak (PRNG) Dalam C++
Secara amnya, penjana nombor rawak pseudo (PRNG) boleh ditakrifkan sebagai program yang mengambil benih atau nombor permulaan dan mengubahnya menjadi beberapa nombor lain yang berbeza daripada benihmenggunakan operasi matematik.
Proses ini dijalankan berulang kali dengan mengambil nombor yang dijana terakhir setiap kali. Setiap kali nombor yang dijana tidak berkaitan dengan nombor sebelumnya. Oleh itu program ini mampu menjana satu siri nombor yang kelihatan rawak.
Bahasa C++ dilengkapi dengan penjana nombor pseudo-rawak terbina dan menyediakan dua fungsi rand () dan srand () yang boleh digunakan untuk jana nombor rawak.
Mari kita bincangkan kedua-dua fungsi ini secara terperinci.
Fungsi rand Dan srand Dalam C++
srand ()
Prototaip fungsi: void srand (unsigned int seed);
Parameter: seed – Nilai integer untuk digunakan sebagai benih oleh algoritma penjana nombor rawak pseudo .
Nilai pulangan: Tiada
Penerangan: fungsi srand digunakan untuk memulakan jujukan nombor pseudo-rawak dengan parameter yang dipanggil 'rawak benih'. Ia menjadikan output fungsi rand kelihatan rawak. Jika tidak, output fungsi rand () akan sama setiap kali kita memanggilnya.
Oleh itu, jika kita menyemai penjana nombor rawak dengan fungsi srand (), ia akan memulakan penjana dari titik yang bergantung pada nilai hujah yang dihantar ke srand. Jika kita menetapkan penjana nombor rawak dengan masa sistem Sebagai contoh, sebelum panggilan pertama ke fungsi rand (), maka ia akan menjana nombor rawak setiap kali kita menjalankanprogram.
Perhatikan bahawa kita biasanya perlu memanggil fungsi srand () sekali sahaja sebelum panggilan ke fungsi rand () dan bukan setiap kali kita menjana nombor rawak.
rand ( )
Prototaip fungsi: int rand (kosong);
Parameter: tiada
Kembali nilai: Nilai integer antara 0 dan RAND_MAX.
Penerangan: Fungsi rand () menjana nombor rawak seterusnya dalam jujukan. Nombor yang dijana ialah integer pseudo-rawak antara 0 dan RAND_MAX. RAND_MAX ialah pemalar dalam pengepala yang biasanya ditetapkan kepada nilai 32767.
#include #include #include int main() { std::srand(static_cast(std::time(nullptr))); for (int count=1; count = 100; ++count) { std::cout std::rand() "\t"; // display 5 random numbers per row if (count % 5 == 0) std::cout "\n"; } return 0; }
Output:
Dalam program di atas, kami mempunyai menghasilkan 100 nombor rawak pertama, dengan memberikan jam sistem sebagai benih untuk fungsi srand. Dalam program ini, kami telah menggunakan kedua-dua fungsi srand dan juga rand. Ambil perhatian bahawa disebabkan jam sistem sebagai benih, output yang dihasilkan akan berbeza setiap kali apabila kita melaksanakan program.
Perbezaan Antara rand () Dan srand ()
rand() | srand() |
---|---|
Digunakan untuk menjana nombor rawak. | Membenihkan PRNG yang digunakan oleh fungsi rand (). |
Dipanggil seberapa banyak kali kita mahu menjana nombor rawak. | Dipanggil sekali sahaja untuk melihat penjana nombor rawak. |
Tidak mengambil sebarang hujah. | Mengambil parameter yang digunakan untuk menyemai penjana nombor rawak. |
Mengembalikan urutannombor rawak setiap kali ia dipanggil. | Tidak mengembalikan nilai. |
C++ Random Float
Fungsi rand () yang kita telah melihat di atas secara lalai mengembalikan nilai integer yang boleh menyebabkan limpahan dalam kes tertentu. Oleh itu, kita boleh menggunakan nilai apungan atau berganda. Kita boleh menjana nombor rawak apungan dengan menghantar nilai pulangan fungsi rand () kepada 'terapung'.
Oleh itu, perkara berikut akan menghasilkan nombor rawak antara apungan 0.0 dan 1.0 (kedua-duanya termasuk).
coutSimilarly, the below line will generate a random number between 1.2 and 3.4
cout1.2 + static_cast (rand()) / ( static_cast (RAND_MAX/(3.4-1.2)));In our subsequent example below we make use of random float to generate the output.
C++ Random Number Between 0 And 1
We can use srand () and rand () function to generate random numbers between 0 and 1. Note that we have to cast the output of rand () function to the decimal value either float or double.
The default return value of rand () function i.e. integer is inadequate to display random numbers between 0 and 1 which are fractions.
C++ program given below displays the first five random numbers between 0 and 1.
#include #include using namespace std; int main() { cout"Random numbers generated between 0 and 1:"="" ="" cout="" endl;="" for="" i="" i++)="" null="" pre="" rand()="" rand_max="" return="" srand(="" {="" }="" }=""> Output:
We see that the output of the program is the random number between 0 and 1 which are fractions.
If we don’t cast the return value of rand () function to float or double, then we will get 0 as the random number.
C++ Random Number Between 1 And 10
The next example is to generate random numbers between 1 and 10. Following is the C++ program that generates random numbers.
We call the srand function with the system clock and then call the rand function with module 10 operators.
#include #include #include using namespace std; int main() { srand(time(0)); // Initialize random number generator. cout"Random numbers generated between 1 and 10:"="" cout="" for(int="" i="0;i10;i++)" pre="" return="" }=""> Output:
In the above program, we generate the first 10 random numbers between 1 and 10. Note that every time the program is run, it will generate different sets of numbers because of the srand function being called.
Frequently Asked Questions
Q #1) What is the header file for Random function in C++?
Answer: The functions to generate random numbers, rand and srand are defined in cstdlib> header of C++.
Q #2) What is Rand_max in C++?
Answer: RAND_MAX is a constant in header generally set to value 32767. The pseudo-random number generator (PRNG) generates random numbers between 0 to RAND_MAX.
Q #3) How does the random function work?
Answer: C++ supports two random functions i.e. srand () and rand ( ). The function srand () seeds the random number generator used by rand () function which generates the random number sequence depending on the initial seed provided.
Q #4) How do you srand with time?
Answer: The srand function seeds the pseudo-random number generator (PRNG) used by the rand () function. It is a standard practice to use the result of a call to time (0) as seed. This time function returns the value, a number of seconds since 00:00 hours, Jan 1, 1970, UTC (current UNIX timestamp).
Thus the value of seed changes every second. Hence every time when srand is called with time function, a new set of the random numbers is generated.
Conclusion
We have discussed Random Number Generation in detail in this tutorial. Programming languages or in general computers do not generate random numbers as they are designed to give predictive output. Hence, we need to simulate randomness.
In order to simulate randomness, we make use of pseudo-random number generator (PRNG) which is in-built in C++. Thus using the two functions, rand () and srand () we can generate random numbers in C++.
The function srand () is used to provide seed for generating random numbers while rand () function generates the next random number in the sequence.