PDA

View Full Version : سوال: ساخت کد رندم



joooje
یک شنبه 06 شهریور 1390, 14:39 عصر
سلام به همه دوستان
راسش من دنبال کدی هستم که رندم یه عددی رو بین مثلا 1 تا 10 انتخاب کنه
جستجو هم کردم ، چون میدونستم که این موضوع بسیار تکراری هست
ولی تو جستجو به یه مبحثی برخوردم که بعضی جاها دوستان حرف از رندم حقیقی و غیر حقیقی زده بودند
و برای ایجاد رندم حقیقی کلی کد نویسی کرده بودند
میخواستم ببینم که چه فرقی بینشون هست و کدوم بهتره؟
و البته برای من که تنها میخوام یه عدد بین یک تا 10 رو انتخاب کنم ساده ترین کد چی هست
ممنون

یوسف زالی
یک شنبه 06 شهریور 1390, 14:54 عصر
سلام.
رندم حقیقی یعنی مثلا عدد 2.45332 هم در نتیجه شما برگشت داده بشه یا اینکه اعداد فقط به صورت اعداد صحیح باشن.
نمیشه گفت کدوم بهتره.
بستگی به کارتون داره.

Felony
یک شنبه 06 شهریور 1390, 14:59 عصر
رندوم حقیقی و غیر حقیقی ؟ در بعضی از مواقع نیاز به تولید اعداد Random غیر تکراری هست بعضی کدها اعداد Random ی تولید میکنه که خیلی از مواقع یکسان هستند و نیازهای برنامه نویس رو به صورت معمول براورده نمیکنن .

اگر هدفتون فقط تولید یک عدد رندوم هست همون تابع Random با مقدار دهی متد RandSeed کفایت میکنه ولی اگر هدفتون تولید اعداد Random غیر تکراری هست در پست شماره 63 تاپیک زیر رو ببینید :

http://barnamenevis.org/showthread.php?209792-%D8%B3%D9%88%D8%B1%D8%B3%D9%87%D8%A7%D9%8A-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A2%D9%85%D9%88%D8%B2%D8%B4%D9%8A/page7

joooje
یک شنبه 06 شهریور 1390, 16:16 عصر
ممنون از راهنماییتون
البته این دوتا جوابی که به من داده شد یکسان نیستند
تو اولی فرقی بین حقیقی و غیر حقیقی نیست و تفاوت تو اعدادی هست که ارایه میشه
ولی تو دومی تفاوت وجود داره و غیر حقیقی میشه یه رندم گیری رایانه ای و حقیقی میشه واقعا یه رندم گیری محض
حالا کدوم درسته؟ !!!
و اما یه سوال دیگه؟
چرا وقتی رندم میگیرم :
x:=Random(100);
با هر بار اجرای برنامه دقیقا همون روند رندم گیری اجرا میشه؟
و با گذاشتن Randomize; مشکلش حل میشه؟
اصلا این کد هم کار رندم گیری میکنه یا نه

ParsaNM
یک شنبه 06 شهریور 1390, 16:55 عصر
دوست عزيز رندم بر اساس سيتم ساعت فراخواني ميشه ... بنابراي Randomize لازمه ..!

developing
دوشنبه 07 شهریور 1390, 18:43 عصر
با سلام


تابع رندوم در واقع همون رندومی هست که توی آمار استفاده داره و مسلما باید بین 0 تا 1 باشه.
اما در بسیاری از استفاده ها توی برنامه نویسی باید یک عدد صحیح بدست آورده شود.


تابع random را می توان به دو صورت بالا به کار برد.
اگه بخواهیم عدد حقیقی بین 0 تا 1 باشه با استفاده از تابع بدون پارامترRandom
و اگه بخواهیم عدد صحیح باشد به صورت Random(X) که در این صورت عدد به دست آمده بین 0 تا X خواهد بود.

و حالا می رسیم به رویه(procedure) بعدی که مساله اصلی روی همین است، Randomize.
این رویه برای این استفاده می گردد که به قول ParsaNM (http://barnamenevis.org/member.php?55846-ParsaNM) از ساعت(Clock)سیستم برای تولید اعداد تصادفی استفاده بشود. و در این صورت اعداد تصادفی که بدست می آید در هر بار اجرا با مورد قبل تفاوت خواهد داشت به دلیل اینکه ساعت سیستم در هر بار اجرای برنامه مقدار متفاوتی دارد.

نکته: استفاده از Randomize آیا اجباری است و یا نه؟

الف) در برخی موارد نیاز سیستمی که برنامه نویسی می شود این است که ببیند با یک سری از اعداد تصادفی در هر بار اعمال شرایط چه نتایجی به دست می آید.(مثلا داده های آماری که در آن و یک سری متغیرها را بر روی یک سری از داده های تصادفی امتحان می کنند. که این داده های تصادفی باید در هر آزمایش یکسان باشد.) در این صورت استفاده از Randomize باعث می شود که اعداد متغیر شوند و هر بار اعداد متفاوتی آزمایش شوند که صد البته این مطلوب آزمونگر نیست. پس استفاده از این رویه در اینگونه کاربردها نمی گنجد.

ب) ولی در بسیاری از موارد نیاز به تولید اعدادی تصادفی است که واقعا در هر اجرا باید با اجرای قبلی متفاوت باشد(نمونه ی خوب این مورد بازی مین روب {Minesweeper} در ویندوز می باشد که در هر بار بازی کردن باید جای مین ها عوض شود.) در این موارد استفاده از Randomize موضوعیت پیدا می کند تا بتوان برنامه را غیر قابل پیش بینی نمود.

نتیجه گیری: پس باید مورد استفاده را بدانیم تا بگوییم استفاده از کدام مورد(1 یا 2 و الف یا ب ) می تواند برای ما استفاده داشته باشد.




دوست عزيز رندم بر اساس سيتم ساعت فراخواني ميشه ... بنابراي Randomize لازمه ..!

پس آقا پارسا لزومی به استفاده از Randomize وجود نخواهد داشت.

ParsaNM
پنج شنبه 17 شهریور 1390, 13:09 عصر
جناب (http://barnamenevis.org/member.php?116920-developing)developing حق با شماست ... متن کاملي نوشته بودين .. من هم با شما موافقم ولي منظور من هم همين بود ولي شايد کامل نگفتم .. (http://barnamenevis.org/member.php?116920-developing)
(http://barnamenevis.org/member.php?116920-developing)