اطلاعات دروس آموزشی

در این بلاگ اطلاعات و فایل های مرتبط با دروس ارائه شده منتشر می گردد

اطلاعات دروس آموزشی

در این بلاگ اطلاعات و فایل های مرتبط با دروس ارائه شده منتشر می گردد

تولید اعداد تصادفی در سی پلاس پلاس

پنجشنبه, ۱۸ مهر ۱۳۹۲، ۱۱:۲۸ ق.ظ

رجوع شود به کتاب درسی فصل 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


6          6          5          5          6

5          1          1          5          3

6          6          2          4          2

6          2          3          4          1 

 

 

 

 

 

 

 

 


شکل 8-6 |  اعداد تصادفی در محدوده 1-6.


b
  • موافقین ۰ مخالفین ۰
  • ۹۲/۰۷/۱۸
  • ۷۸۹۸ نمایش
  • ا

نظرات (۲)

بدنبود
همون اول مینوشتیدusing name space std;
این کارا واسه چیه دگ هی یکی یکی با این ::
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی