Pembangkit Bilangan Acak (rand & srand) dalam C++

Tutorial ini Menjelaskan Penggunaan Fungsi rand() dan srand() secara Detail untuk Menghasilkan Bilangan Acak di C++:

Sering kali kita perlu menggunakan angka acak dalam aplikasi kita untuk menghasilkan simulasi atau permainan dan aplikasi lain yang membutuhkan kejadian acak.

Sebagai contoh, Dalam permainan dadu, tanpa adanya kejadian acak, kita akan mendapatkan sisi yang sama muncul setiap kali kita melempar dadu sehingga memberikan hasil yang tidak diinginkan.

Oleh karena itu, kita perlu memiliki generator angka acak yang dapat kita gunakan. Dalam lingkungan fisik, kita dapat membuat kejadian acak, tetapi tidak mungkin dilakukan pada komputer.

Hal ini dikarenakan segala sesuatu dalam komputer adalah biner, yaitu 0 atau 1 (benar atau salah) dan tidak ada yang di antaranya, sehingga komputer biasanya menghasilkan kejadian yang dapat diprediksi dan tidak dapat menghasilkan kejadian acak.

Sebagai gantinya, komputer mensimulasikan keacakan yang dilakukan dengan menggunakan generator bilangan acak semu (pseudo-random number generator/PRNG) C++ memiliki generator angka acak dan dapat digunakan dengan banyak aplikasi.

Dalam tutorial ini, kita akan membahas fungsi-fungsi/pendekatan untuk menghasilkan angka acak dalam C++ secara detail.

Pseudo-Random Number Generator (PRNG) dalam C++

Secara umum, pseudo-random number generator (PRNG) dapat didefinisikan sebagai sebuah program yang mengambil seed atau angka awal dan mengubahnya menjadi angka lain yang berbeda dengan seed dengan menggunakan operasi matematika.

Proses ini dilakukan secara berulang-ulang dengan mengambil angka terakhir yang dibangkitkan setiap kali, dan setiap kali angka yang dibangkitkan tidak berhubungan dengan angka-angka sebelumnya, sehingga program ini dapat menghasilkan serangkaian angka yang muncul secara acak.

Bahasa C++ dilengkapi dengan generator bilangan acak semu bawaan dan menyediakan dua fungsi rand () dan srand () yang dapat digunakan untuk menghasilkan bilangan acak.

Mari kita bahas kedua fungsi ini secara detail.

Fungsi rand dan srand dalam C++

srand ()

Prototipe fungsi: void srand (unsigned int int);

Parameter: seed - Nilai integer yang akan digunakan sebagai seed oleh algoritme generator bilangan acak semu.

Nilai pengembalian: Tidak ada

Deskripsi: Fungsi srand digunakan untuk menginisialisasi urutan bilangan acak semu dengan parameter yang disebut 'benih acak'. Ini membuat keluaran fungsi rand terlihat acak. Jika tidak, keluaran fungsi rand () akan sama setiap kali kita memanggilnya.

Jadi, jika kita mengunggulkan generator bilangan acak dengan fungsi srand (), generator akan memulai generator dari titik yang bergantung pada nilai argumen yang diteruskan ke srand. Jika kita mengatur generator bilangan acak dengan waktu sistem Sebagai contoh, sebelum pemanggilan pertama ke fungsi rand (), maka fungsi ini akan menghasilkan angka acak setiap kali kita menjalankan program.

Perhatikan bahwa kita biasanya hanya perlu memanggil fungsi srand () sekali sebelum memanggil fungsi rand () dan tidak setiap kali kita membuat bilangan acak.

rand ()

Prototipe fungsi: int rand (void);

Parameter: tidak ada

Nilai pengembalian: Nilai bilangan bulat antara 0 dan RAND_MAX.

Deskripsi: Fungsi rand () menghasilkan angka acak berikutnya dalam urutan. Angka yang dihasilkan adalah bilangan bulat acak semu antara 0 dan RAND_MAX. RAND_MAX adalah konstanta dalam header yang umumnya disetel ke 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"; // tampilkan 5 bilangan acak per baris jika (count % 5 == 0) std::cout <<"\n"; } return 0; } 

Keluaran:

Pada program di atas, kita telah membangkitkan 100 angka acak pertama, dengan memberikan jam sistem sebagai seed untuk fungsi srand. Pada program ini, kita telah menggunakan fungsi srand dan juga rand. Perhatikan bahwa karena adanya jam sistem sebagai seed, maka output yang dihasilkan akan berbeda setiap kali kita mengeksekusi program.

Perbedaan Antara rand () Dan srand ()

rand() srand()
Digunakan untuk menghasilkan angka acak. Mengunggulkan PRNG yang digunakan oleh fungsi rand ().
Dipanggil sebanyak yang kita inginkan untuk menghasilkan angka acak. Dipanggil hanya sekali untuk melihat generator nomor acak.
Tidak menerima argumen apa pun. Mengambil parameter yang digunakan untuk mengunggulkan generator bilangan acak.
Mengembalikan urutan angka acak setiap kali dipanggil. Tidak mengembalikan nilai.

C++ Float Acak

Fungsi rand () yang telah kita lihat di atas secara default mengembalikan nilai integer yang dapat menyebabkan overflow pada kasus tertentu. Dengan demikian, kita dapat menggunakan nilai float atau double. Kita dapat menghasilkan bilangan acak float dengan meng-cast nilai pengembalian fungsi rand () menjadi 'float'.

Dengan demikian, berikut ini akan menghasilkan angka acak antara float 0.0 dan 1.0 (keduanya inklusif).

 cout & lt; 

Demikian pula, baris di bawah ini akan menghasilkan angka acak antara 1,2 dan 3,4

 cout<<1.2 + static_cast (rand()) / (static_cast (RAND_MAX/(3.4-1.2))); 

Pada contoh berikutnya di bawah ini, kami menggunakan float acak untuk menghasilkan output.

C++ Angka Acak Antara 0 Dan 1

Kita dapat menggunakan fungsi srand () dan rand () untuk menghasilkan angka acak antara 0 dan 1. Perhatikan bahwa kita harus meng-cast output dari fungsi rand () ke nilai desimal, baik itu float atau double.

Nilai pengembalian default dari fungsi rand (), yaitu bilangan bulat, tidak cukup untuk menampilkan angka acak antara 0 dan 1 yang merupakan pecahan.

Program C++ yang diberikan di bawah ini menampilkan lima angka acak pertama antara 0 dan 1.

 #include #include menggunakan namespace std; int main() { cout<<"Bilangan acak yang dihasilkan antara 0 dan 1:"< ="" ="" cout="" endl;="" for="" i="" i++)="" null="" pre="" rand()="" rand_max="" return="" srand(="" {="" }="" }="">

Keluaran :

Kita melihat bahwa output dari program ini adalah angka acak antara 0 dan 1 yang merupakan pecahan.

Jika kita tidak meng-cast nilai kembalian dari fungsi rand () menjadi float atau double, maka kita akan mendapatkan 0 sebagai bilangan acak.

C++ Angka Acak Antara 1 Dan 10

Contoh berikutnya adalah menghasilkan angka acak antara 1 dan 10. Berikut ini adalah program C++ yang menghasilkan angka acak.

Kami memanggil fungsi srand dengan jam sistem dan kemudian memanggil fungsi rand dengan operator modul 10.

 #include #include #include menggunakan namespace std; int main() { srand(time(0)); // Inisialisasi pembangkit bilangan acak. cout<<"Bilangan acak yang dihasilkan antara 1 dan 10:"< ="" cout="" for(int="" i="0;i10;i++)" pre="" return="" }="">

Keluaran:

Pada program di atas, kita menghasilkan 10 angka acak pertama antara 1 dan 10. Perhatikan bahwa setiap kali program dijalankan, program ini akan menghasilkan kumpulan angka yang berbeda karena fungsi srand yang dipanggil.

Pertanyaan yang Sering Diajukan

T #1) Apa file header untuk fungsi Random di C++?

Jawaban: Fungsi untuk menghasilkan angka acak, rand dan srand didefinisikan dalam < cstdlib > header dari C++.

T # 2) Apa itu Rand_max di C++?

Jawaban: RAND_MAX adalah konstanta dalam header yang umumnya disetel ke nilai 32767. Generator bilangan acak semu (PRNG) menghasilkan bilangan acak antara 0 hingga RAND_MAX.

T # 3) Bagaimana cara kerja fungsi acak?

Jawaban: C++ mendukung dua fungsi acak, yaitu srand () dan rand ( ). Fungsi srand () mengisikan seed generator bilangan acak yang digunakan oleh fungsi rand () yang menghasilkan urutan bilangan acak tergantung dari seed awal yang diberikan.

T #4) Bagaimana Anda menyikapi waktu?

Jawaban: Fungsi srand mengunggulkan generator bilangan acak semu (PRNG) yang digunakan oleh fungsi rand (). Ini adalah praktik standar untuk menggunakan hasil pemanggilan ke waktu (0) sebagai seed. Fungsi waktu ini mengembalikan nilai, sejumlah detik sejak pukul 00:00, 1 Januari 1970, UTC (stempel waktu UNIX saat ini).

Dengan demikian, nilai dari seed berubah setiap detiknya. Oleh karena itu, setiap kali srand dipanggil dengan fungsi waktu, satu set baru dari bilangan acak dihasilkan.

Kesimpulan

Kita telah membahas Pembangkitan Angka Acak secara rinci dalam tutorial ini. Bahasa pemrograman atau komputer pada umumnya tidak menghasilkan angka acak karena mereka dirancang untuk memberikan keluaran yang dapat diprediksi. Oleh karena itu, kita perlu mensimulasikan keacakan.

Untuk mensimulasikan keacakan, kita menggunakan pseudo-random number generator (PRNG) yang sudah ada di dalam C++. Dengan demikian, dengan menggunakan dua fungsi, rand () dan srand (), kita bisa menghasilkan bilangan acak dalam C++.

Fungsi srand () digunakan untuk menyediakan seed untuk menghasilkan angka acak, sedangkan fungsi rand () menghasilkan angka acak berikutnya dalam urutan.

Gulir ke atas