یکی از تمرین هایی که اساتید برای درس برنامه نویسی سی پلاس پلاس به دانشجویان میدهد سورس تولید اعداد شبه تصادفی می باشد البته کاربران زیادی هم می پرسند اعداد شبه تصادفی چیست؟ یا در مورد الگوریتم تولید اعداد شبه تصادفی سوال میپرسند. در این پست سعی میکنیم جواب چند سوال مثل روش های تولید اعداد شبه تصادفی و مولد اعداد شبه تصادفی رو دهیم که کاربران علاوه بر یادگیری اعداد شبه تصادفی بتوانند از سورس اعداد شبه تصادفی هم استفاده کنند.
مولد اعداد شبه تصادفی :
یک سازندهٔ اعداد شبه تصادفی که به سازندهٔ قطعی بیتهای شبه تصادفی نیز، معروف است، در واقع به الگوریتمی اطلاق میشود که میتواند، دنبالهای از اعداد تولید نماید به گونهای که، تخمین خوبی از ویژگیهای اعداد تصافی را داشته باشند. در واقع دنبالهٔ تولید شده، تصادفی نمیباشد و برای دنبالههای کوچک به طور کامل قابل پیش بینی است و از روی حالت اولیهٔ الگوریتم، قابل محاسبهاست، اما میتوان با استفاده از تولید کنندههای تصادفی سخت افزاری، دنبالههای عددی بهتری تولید نمود. اعداد تصادفی در عمل بسیار مهم و کاربردی هستند. علت کاربرد گستردهٔ آن را، میتوان توانایی تولید دوبارهٔ اعداد تولید شده در اجراهای قبل و سرعت بالای تولید، ذکر نمود. به همین منظور، از این الگوریتم در شبیه سازی، رمزنگاری و… به وفور استفاده میگردد. به طور نمونه، اکثر برنامههای رمزنگاری نیاز دارند که خروجی شان غیر قابل پیش بینی باشد و این امر جز با استفاده از اعداد تصادفی، میسر نمیگردد.
در حالت کلی، لازم است بررسیهای دقیق ریاضی انجام گردد تا تضمین شود الگوریتمی، اعدادی تولید میکند که تا حد معقولی تصادفی هستند و استفادهٔ آنها برای کاربردهای دیگر معقول به نظر برسد. ون نیومن به سوء برداشت از الگوریتمهای تولید کنندهٔ اعداد تصادفی، اشاره کردهاست و هشدار داده که همواره باید به تفاوت آنها توجه نمود.
توضیحاتی در مورد سورس اعداد شبه تصادفی دهیم که کاربران کامل با این سورس کد آشنا شوند و به راحتی بتوانند از آن استفاده کنند. لازم به ذکر هست از این سورس کد در جهت یادگیری و آموزش برنامه نویسی سی پلاس پلاس استفاده کنید. چون سورس کدها منابع خوبی برای آموزش برنامه نویسی میباشند.
این برنامه از سه تابع time و rand و srand که درون یک حلقه ی for بینهایت قرار دارند،تشکیل شده است. این برنامه از تابع rand که در سرفایل <cstdlib> تعریف شده است برای تولید اعداد شبه تصادفی استفاده میکند،اساس کار این تابع به این شکل است که هر عدد شبه تصادفی از روی عدد قبلی خود ساخته میشود.اولین عدد شبه تصادفی از روی یک مقدار داخلی که “هسته” گفته میشود ایجاد میگردد.
تابع time که در فایل <ctime> تعریف شده،زمان فعلی سیستم را به صورت یک عدد صحیح unsigned برمیگرداند. برای تنظیم هسته ی rand از تابع srand استفاده میشود.
توجه : اگر از تابع srand در برنامه استفاده نمیکردیم اعداد شبه تصادفی یکسان در اجراهای مختلف تولید میشد مثلا اگر در اجرای اول،پنج عدد تولید شده ی اول 6 و 6 و 5 و 5 و 6 باشد،در اجرای دوم نیز پنج عدد اول همان اعداد تولید میشدند،که این امر باعث کاهش تصادفی بودن اعداد میشود.
دستور 1+rand()%6 باعث میشود که عدد تولید شده در محدوده ی 1 تا 6 باشد.
سورس اعداد شبه تصادفی
#include<iostream> #include<conio.h> #include<time.h> #include<cstdlib> using namespace std; int main(){ char ch; for(;;){ srand(time(NULL)); cout<<"\n\n"<<"random number="<<1+rand()%6<<"\n\n"; cout<<"press q to exit or any other key to continue"; if(ch=getch()=='q') break; } } //> sourceiran.com
دیدگاه کاربران
تعداد دیدگاه های کاربران : ۰ دیدگاه