PDA

View Full Version : سوال: بدست آوردن اعداد تصادفی با تابع



irpersian20
یک شنبه 20 اسفند 1391, 12:18 عصر
سلام

من میخواهم به واسطه تابع توزیع. یکنواخت اعداد تصادفی در رنج 10 تا 25 ایجاد کنم
امکان داره کسی کمک کنه؟
ممنون

tooraj_azizi_1035
یک شنبه 20 اسفند 1391, 12:25 عصر
byte[] bytes1 = new byte[100];
byte[] bytes2 = new byte[100];
Random rnd1 = new Random();
Random rnd2 = new Random();

rnd1.NextBytes(bytes1);
rnd2.NextBytes(bytes2);

Console.WriteLine("First Series:");
for (int ctr = bytes1.GetLowerBound(0);
ctr <= bytes1.GetUpperBound(0);
ctr++) {
Console.Write("{0, 5}", bytes1[ctr]);
if ((ctr + 1) % 10 == 0) Console.WriteLine();
}
Console.WriteLine();
Console.WriteLine("Second Series:");
for (int ctr = bytes2.GetLowerBound(0);
ctr <= bytes2.GetUpperBound(0);
ctr++) {
Console.Write("{0, 5}", bytes2[ctr]);
if ((ctr + 1) % 10 == 0) Console.WriteLine();
}
// The example displays the following output to the console:
// First Series:
// 97 129 149 54 22 208 120 105 68 177
// 113 214 30 172 74 218 116 230 89 18
// 12 112 130 105 116 180 190 200 187 120
// 7 198 233 158 58 51 50 170 98 23
// 21 1 113 74 146 245 34 255 96 24
// 232 255 23 9 167 240 255 44 194 98
// 18 175 173 204 169 171 236 127 114 23
// 167 202 132 65 253 11 254 56 214 127
// 145 191 104 163 143 7 174 224 247 73
// 52 6 231 255 5 101 83 165 160 231
//
// Second Series:
// 97 129 149 54 22 208 120 105 68 177
// 113 214 30 172 74 218 116 230 89 18
// 12 112 130 105 116 180 190 200 187 120
// 7 198 233 158 58 51 50 170 98 23
// 21 1 113 74 146 245 34 255 96 24
// 232 255 23 9 167 240 255 44 194 98
// 18 175 173 204 169 171 236 127 114 23
// 167 202 132 65 253 11 254 56 214 127
// 145 191 104 163 143 7 174 224 247 73
// 52 6 231 255 5 101 83 165 160 231

irpersian20
یک شنبه 20 اسفند 1391, 12:26 عصر
سلام
دوست عزیز با توزیع یکنواخت. میخوام بین رنج خاص عدد تولید کنم.

tooraj_azizi_1035
یک شنبه 20 اسفند 1391, 12:36 عصر
Random random = new Random();
int randomNumber = random.Next(0, 100);

irpersian20
یک شنبه 20 اسفند 1391, 12:40 عصر
Random random = new Random();
int randomNumber = random.Next(0, 100);


دوست عزیز
توزیع یکنواخت.

tooraj_azizi_1035
یک شنبه 20 اسفند 1391, 12:41 عصر
توزیع یکنواخت رو یادم رفته به زبونی که برنامه نویس ها بفهمند خواستتون رو بگید.

irpersian20
یک شنبه 20 اسفند 1391, 16:12 عصر
سلام
توزیع یکنواخت یعنی احتمال ظاهرا شدن اعداد با یکدیگر برابر باشد.
حالا من نمیدانم این توابعی که سی شارپ داره و اعداد میده بیرون بر اساس چه توزیعی است?

the king
یک شنبه 20 اسفند 1391, 17:55 عصر
Random random = new Random();
int randomNumber = random.Next(0, 100);




دوست عزیز
توزیع یکنواخت.

یکنواخته، خود فرمول تولید اعداد تصادفی ای که Random ازشون استفاده می کنه توزیع یکنواخت داره،
برای Next از هم عملا از عملگر باقیمانده تقسیم استفاده میشه که اونم نتیجه اش توزیع یکنواخت داره.

irpersian20
یک شنبه 20 اسفند 1391, 21:36 عصر
یکنواخته، خود فرمول تولید اعداد تصادفی ای که Random ازشون استفاده می کنه توزیع یکنواخت داره،
برای Next از هم عملا از عملگر باقیمانده تقسیم استفاده میشه که اونم نتیجه اش توزیع یکنواخت داره.

سلام
خب از کجا مطمئن بشیم؟ که تابع رندوم از توزیع یکنواخت استفاده میکنه؟

the king
یک شنبه 20 اسفند 1391, 22:24 عصر
سلام
خب از کجا مطمئن بشیم؟ که تابع رندوم از توزیع یکنواخت استفاده میکنه؟
اولا می تونید شخصا خیلی ساده امتحان کنید، فرضا یک میلیون عدد تصادفی بین 0 الی 3 رو بررسی کنید، ببینید تعداد هر کدوم از اعداد 0 الی 3 چقدره.
اگر هر چهار گروه در حدود 25 درصد بودند توزیع یکنواخته وگرنه اگه با هم تفاوت اساسی داشتند و از 25 درصد دور بودند من دارم گمراه تون می کنم :

int[] counts = new int[4];
Random rnd = new Random();
for (int i = 0; i < 1000000; i++)
counts[rnd.Next(4)]++;
MessageBox.Show(string.Format(
"Count 0 = {0:0.0}% Count 1 = {1:0.0}% Count 2 = {2:0.0}% Count 3 = {3:0.0}%"
, counts[0] / 10000.0, counts[1] / 10000.0, counts[2] / 10000.0, counts[3] / 10000.0));


توزیع یکنواخت به انگلیسی میشه Uniform Distribution ، این توضیحات مربوط به مثال از متد Sample ئه در سایت مایکروسافت :


The following code example derives a class from Random and overrides the Sample method to generate a distribution of random numbers.
This distribution is different than the uniform distribution generated by the Sample method of the base class.


Random.Sample Method (http://msdn.microsoft.com/en-us/library/system.random.sample(v=vs.80).aspx)
و این توضیح مربوط به متد هایی مثل Next ئه :


Starting with the .NET Framework version 2.0, if you derive a class from Random and override the Sample method, the distribution provided by the derived class implementation of the Sample method is not used in calls to the base class implementation of the following methods:
The Random.NextBytes(Byte[]) method.
The Random.Next() method.
The Random.Next(Int32, Int32) method, if (maxValue - minValue) is greater than Int32.MaxValue.

Instead, the uniform distribution provided by the base Random class is used


Random.Sample Method (http://msdn.microsoft.com/en-us/library/system.random.sample.aspx)