PDA

View Full Version : برنامه نو.یسی



ARMANSADRA
سه شنبه 12 آذر 1392, 15:56 عصر
سلام.ببخشید در مورد مطلب زیر یک سوال داشتم.


{
این سوالی بود كه امروز در ذهنم كاملا اتفاقی جرقه زد و به دنبال جواب اون گشتم و نتایجی كه در ادامه خواهید دید رو پیدا كردم
اعدادی تصادفی به معنی اعدادی است كه غیرقابل پیشبینی و نامعلوم بوده و نظر افراد در تولید آن دخالت نداشته باشد احتمال انتخاب هر عدد با اعداد دیگر برابر باشد از زمان‌های قدیم روش هایی برای تولید این اعداد وجود داشته‌است از جمله پرتاب تاس، پرتاب سکه و برهم زدن کارت‌ها که همچنان در بازی‌ها مورداستفاده قرار می‌گیرند تولید یك عدد كاملا تصادفی تركیبی از علوم كامپیوتر (http://egza.wordpress.com/) ریاضی و فیزیك است و آنچنان كه در ابتدا ساده به نظر می رسد نیست چرا همون طور كه همه می دونند كامپیوتر ماشینی است كه با گرفتن ورودی . خروجی معینی رو تولید می كند حالا این وسط كامپیوتر می خواهد یك عدد تصادفی از كجا به ما بده عجیب است
اعداد تصادفی یك مبحث بزرگ و پر كاربرد كامپیوتر است از جمله موارد نیاز به اعداد تصادفی موارد زیر است
شبیه سازی دنیای واقعی و نادانسته ها كه از كارهای اصلی كامپیوتر است
رمزگذاری اطلاعات
نمونه برداری تصادفی به جای سرشماری
تست کارایی برنامه ها وكد ‌های کامپیوتری با ورودی های تصادفی




دو روش كلی برای تولید اعداد تصادفی وجود دارد
1- استفاده از یك سخت افزار برای پیگیری تغییرات یك رفتار طبیعی و كاملا تصادفی و ارسال نتایج به كامپیوتر. به عنوان مثال برخی پدیده‌های فیزیکی از جمله واپاشی رادیواكتیوی دارای رفتاری کاملاً تصادفی هستند كه با استفاده از این روش لیستی از اعداد به واقع تصادفی تولید خواهند شد ولی تولید اعداد تصادفی با این روش به دلیل نیاز به تجهیزاتی كه تقریبا در هیچ كامپیوتری نصب نیست خیلی به ندرت انجام می گیرد
2- اعداد شبه تصادفی كه با استفاده از فرمول های خاص تولید می شوند و شباهت زیادی به اعداد تصادفی دارند این اعداد برای هر فردی كه از فرمول مطلع نباشد كاملا تصادفی جلوه می كنند البته هر روشی مورد قبول نیست و اعداد تولید شده نباید به صورت گردشی تكرار شوند احتمال تولید شدن هر عدد برابر سایر اعداد باشد و همچنین اعداد تولیدی قابل پیشبینی نباشند مگر اینكه شما از فرمول و عددی كه به عنوان مقدار آغازین انتخاب شده است اگاه باشید
تابعی در زبان سی برای تولید اعداد تصادفی



int rand()
{
random_seed = random_seed * 1103515245 +12345;
return (unsigned int)(random_seed / 65536) % 32768;
}
با این روش هر عدد شبه تصادفی به مقدار آغازین خود بستگی دارد به طوری كه با اجرای یك فرمول با مقدار آغازین ثابت و به دفعات زیاد نتایج یكسانی به دست خواهد آمد برای تولید اعداد شبه تصادفی كه غیر قابل پیشبینی باشند باید مقدار آغازین یك عدد كاملا تصادفی باشد برای این مساله در دنیای كامپیوتر معمولا از تاریخ و زمان به عنوان مقدار آغازین استفاده می شود به این شكل كه تعداد ثانیه های سپری شده از یك تاریخ خاص مثلا اول ژانویه 1970 محاسبه شده و به عنوان یك مقدار اغازین استفاده می شود تعداد ثاینه های سپری شده با هر بار اجرای برنامه و كد متفاوت خواهند بود كه انتخاب خوبی برای تابع تولید اعداد شبه تصادفی می باشد روش دیگری كه استفاده می شود كمك گرفتن از كاربر برای انتخاب مقدار آغازین (http://egza.wordpress.com/)است مثلا برنامه از كاربر می خواهد تا تعدادی از كلیدهای صفحه كلید را به صورت بی هدف فشار دهد یا اشاره گر ماوس را در صفحه ی نمایش حركت دهد یا كاربر در میكروفون جمله ای را ادا كند و سپس برنامه ورودی را تركیب كرده و عددی را برای آغاز تابع تولید اعداد تصادفی می سازد
زمانی كه تولید عدد تصادفی مهم باشد مثل رمزگذاری اطلاعات می توان از تركیب روشها استفاده كرد مثلا استفاده از كاربر زمان سیستم مدل قطعات سخت افزاری سیستم زمان روشن بودن كامپیوتر تاریخ نصب نرم افزارها تعداد بیتهای استفاده شده از رم و… استفاده كرد.}


میخواستم بدونم اعدادی که به صورت تصادفی با استفاده از برنامه نویسی تولید میشود.راهی وجود دارد که با استفاده از برنامه نویسی به عدد بعدی او ن پی برد

اعداد به صورت زیر است.اعدادبین1تا256است

228 157 95 244(از چپ به راست)


15 252 200 153 (از چپ به راست)



185 102 200 153 (از چپ به راست)


86 3 170 15 (از چپ به راست)