تولید اعداد تصادفی در سی پلاس پلاس
رجوع شود به کتاب درسی فصل 6
7-6 مبحث آموزشی: تولید اعداد تصادفی
در این بخش به بحث برنامهنویسی برنامههای بازی و شبیه سازی میپردازیم. در این بخش و بخش بعدی، با استفاده از ساختارهای کنترلی که قبلاً با آنها آشنا شدهاید یک برنامه بازی ایجاد خواهیم کرد که حاوی توابع متعددی است. این بازی در ارتباط با شانس است. عنصر شانس میتواند در برنامههای کامپیوتری از طریق تابع کتابخانه استاندارد rand ایجاد شود.
به عبارت زیر توجه نمائید:
i = rand();
تابع rand یک مقدار صحیح بدون علامت مابین صفر و ثابت RAND_MAX ایجاد میکند. یک ثابت نمادین ایجاد شده در فایل سرآیند <cstdlib>. بایستی مقدار RAND_MAX حداقل 32767 باشد، حداکثر مقدار مثبت برای یک عدد صحیح دو بایتی (16 بیت). در GNU C++، مقدار RAND_MAX برابر با 214748647 و در ویژوال استودیو این مقدار برابر 32767 است. اگر rand مقادیری بصورت تصادفی ایجاد کند، هر مقدار در این محدودة در هر بار فراخوانی تابع rand دارای شانس (احتمال) برابر خواهد بود.
گاهاً ایجاد اعداد تصادفی در یک برنامه ضرورت پیدا میکند. با این وجود، محدودة مقادیر تولید شده توسط rand غالباً متفاوت از مقدار مورد نیاز در یک برنامه هستند. برای مثال، در برنامهای که پرتاب را شبیهسازی میکند، فقط نیاز به مقدار 0 برای نشان دادن "رو" و 1 برای "پشت" سکه نیاز دارد، یا برنامهای که پرتاب یک طاس شش وجهی را شبیهسازی میکند، نیاز به مقادیر تصادفی از 1تا 6 دارد. به همین ترتیب، برنامهای که حرکت یک سفینه فضایی را تداعی میکند و نیاز به حرکت در چهار جهت را دارد، مستلزم بدست آوردن عدد تصادفی از 1 تا 4 است.
پرتاب طاس شش وجهی
برای توصیف rand، اجازه دهید برنامهای ایجاد کنیم (شکل 8-6) که 20 پرتاب یک تاس شش وجهی و چاپ مقدار هر پرتاب را شبیهسازی نماید. نمونه اولیه تابع rand در سرآیند <cstdlib> قرار دارد. برای تولید اعداد صحیح در بازه 0 تا 5، از عملگر باقیمانده (%) به همراه rand استفاده میکنیم:
rand() % 6
این عمل بعنوان تغییر مقیاس شناخته میشود. عدد 6 فاکتور تغییر مقیاس نامیده میشود. سپس بازه اعداد تولیدی را با افزودن عدد 1 به نتیجه قبلی، جابجا یا شیفت میدهیم. برنامه شکل 8-6 نشان میدهد که نتایج در بازه 1 تا 6 قرار دارند.
1 // Fig. 6.8: fig06_08.cpp
2 // Shifted and scaled random integers.
3 #include <iostream>
4 using std::cout;
5 using std::endl;
6
7 #include <iomanip>
8 using std::setw;
9
10 #include <cstdlib> // contains function prototype for rand
11 using std::rand;
12
13 int main()
14 {
15 // loop 20 times
16 for ( int counter = 1; counter <= 20; counter++ )
17 {
18 // pick random number from 1 to 6 and output it
19 cout << setw( 10 ) << ( 1 + rand() % 6 );
20
21 // if counter is divisible by 5, start a new line of output
22 if ( counter % 5 == 0 )
23 cout << endl;
24 } // end for
25
26 return 0; // indicates successful termination
27 } // end main
|
شکل 8-6 | اعداد تصادفی در محدوده 1-6.
b
- ۹۲/۰۷/۱۸
- ۷۸۹۸ نمایش