PDA

View Full Version : انتخاب اعداد بین 1تا 1000 به صورت تک تک و تصادفی



sara_aryanfar
جمعه 28 مرداد 1390, 20:22 عصر
با سلام البته شاید من درست سوالم رو مطرح نکردم که به دلیل تکراری بودن پاک شد به هر خال من یه بازه عددی دارم مثل 1تا 1000 می خوام یه تابع باشه هر بار یکی از این اعداد رو به صورت تصادفی و غیر تکراری به من بده چطور می تونم این کار رو بکنم

مدیران محترم پاک نکنید مباحث دیگر مربوط به تولید اعداد شارژ و نمی دونم از این بحث ها هست که به بحث من مربوط نمیشه سرچ کردم ممنون

HOJAT1
جمعه 28 مرداد 1390, 21:13 عصر
http://barnamenevis.org/showthread.php?253679-تولید-عدد-تصادفی-غیر-تکراری

// تولید اعداد تصادفی غیر تکراری بین دو عدد

private int[] CreateUniqueRandomNums(int min, int max, int numOfRandNums)
{
// تولید دانه
System.Threading.Thread.Sleep((new Random()).Next(50, 500));
int seed = DateTime.Now.Millisecond + (new Random()).Next(DateTime.Now.Millisecond);
Random rand = new Random(seed);
int[] nums = new int[max - min + 1];
int n, min2 = min, max2 = max, temp1, temp2;
// پر کردن عناطر آرایه از min تا max
for (int i = min; i <= max; i++)
{
nums[i - min] = i;
}
// جابجایی تصادفی عناصر آرایه و انتقال به انتهای آرایه و کم کردن حد بالای اندیس حلقه
for (int i = min; i < max; i++)
{
n = rand.Next(min2, max2);
temp1 = nums[max2 - min];
temp2 = nums[n - min];
nums[max2 - min] = temp2;
nums[n - min] = temp1;
max2--;
}
// تعیین طول آرایه مقدار بازگشتی
int[] retNums = new int[numOfRandNums];
for (int i = 0; i < numOfRandNums; i++)
{
retNums[i] = nums[i];
}
return retNums;
}
//یه نمونه مثال از نحوه چگونگی استفاده از این تابع
private void button1_Click(object sender, EventArgs e)
{
int[] arr = new int[10];
arr = this.CreateUniqueRandomNums(0, 25, 10);
for (int i = 0; i < arr.Length; i++)
{
textBox3.Text += arr[i].ToString() + "-";
}
}

quantomquery
شنبه 29 مرداد 1390, 02:13 صبح
سلام
وای چرا اینقدر خودتونو خسته می کنید
1- یه لیست از اعدادی که می خوای به ترتیب بساز - مثلا 1 تا 1000
2- به تعداد 1000 بار به صورت تصادفی اینارو جابجا کن
3- یه عدد تصادفی از 0 تا count این لیست بگیر - یعنی از ایندکسش
4 - عدد توی ایندکس رو نمایش بده و بعد اونو remove کن
5- این کارو اینقدر انجام بده تا count برابر صفر بشه - چون هر بار یکی رو ریموو می کنی

******* فقط چون تابع رندوم یکم مشنگه
اول یه ترد استاپ 2 میلی سکند بده
بعد یه رندوم با تخم (seed) میلی ثانیه dateTime.Now.milisecond بده تا یه جواب بهتری بگیری

موفق باشی

sara_aryanfar
سه شنبه 01 شهریور 1390, 14:56 عصر
با تشکر من چند روزی اینترنت نداشتم عذر می خوام دیر جواب میدم دوستان من روش های مختلفی برای تولید عدد تصادفی هست منم از رندوم استفاده می کنم اما همونطور که می دونید این متد مقادیر رو تکراری میده من فقط راهی می خوام که این مقدار تکراری تولید نشه نه روش جدیدی برای تولید عدد تصادفی برای جلوگیری از تکرار هم به فکر استفاده از ارایه افتادم اما خوب وقتی مقدار داده بالا باشه پیچیدگی زمانی الگوریتم بالا میره برای مقایسه راهی هست تو خود تابع رندوم که مانع تکرار باشه

Farshid007
سه شنبه 01 شهریور 1390, 15:23 عصر
نمیشه که
اخه اون رندوم ،عدد ساخته شده را با چی مقایسه کنه که تکراری نباشه؟؟
فقط ارایه میشه دیگه::
int[] Randoms = new int[0];
private void button1_Click(object sender, EventArgs e)
{
Random objRandom = new Random();
int intRandom = objRandom.Next(0, 1000);
foreach (int i in Randoms)
{
if (i == intRandom)
{
button1_Click(sender, e);
return;
}
else
{
Array.Resize(ref Randoms, Randoms.Length + 1);
Randoms[Randoms.Length - 1] = intRandom;

}
}
MessageBox.Show(Convert.ToString(intRandom));

}

sara_aryanfar
سه شنبه 01 شهریور 1390, 15:28 عصر
درسته آرایه مشکل رو حل می کنه اما شما توجه کن وقتی می خوای این عدد تصادفی بین 0الی 1000 باشه مورد ساده هست اما وقتی عدد شما 0تا 1000000000 باشه شما حساب کن بخوای روی چنین آرایه ای عمل جستجو رو انجام بدی چی میشه فکرم نکنم هیچ کدوم از روش های سیلیکشن سورت و بابل سورت روش جواب بده

Farshid007
سه شنبه 01 شهریور 1390, 15:31 عصر
چه خبره؟؟؟
مگه شما چی دارید می نویسید که اینهمه می خواهید رندوم بسازید

sara_aryanfar
سه شنبه 01 شهریور 1390, 15:35 عصر
هیچی یه برنامه کوچیک برای تشخیص مکان آینده یک الکترون بر اساس حرکاتش در فضا:چشمک:

Farshid007
سه شنبه 01 شهریور 1390, 15:55 عصر
هیچی یه برنامه کوچیک برای تشخیص مکان آینده یک الکترون بر اساس حرکاتش در فضا:چشمک:
یا بسم الله الرحمن الرحیم
اون وقت شما می خواهید این تشخیص رو با کلاس رندوم تشخیص بدید؟؟

sara_aryanfar
سه شنبه 01 شهریور 1390, 16:42 عصر
نه جناب فرشید خان من اینبرنامه رو برای کسی می نویسم کلاس رندوم هم تنها قسمت خیلی کوچک برنامه هست که برای کاردرروی فضای سه بعدی بهش نیازه

sara_aryanfar
سه شنبه 01 شهریور 1390, 17:22 عصر
نمیشه که
اخه اون رندوم ،عدد ساخته شده را با چی مقایسه کنه که تکراری نباشه؟؟
فقط ارایه میشه دیگه::
int[] Randoms = new int[0];
private void button1_Click(object sender, EventArgs e)
{
Random objRandom = new Random();
int intRandom = objRandom.Next(0, 1000);
foreach (int i in Randoms)
{
if (i == intRandom)
{
button1_Click(sender, e);
return;
}
else
{
Array.Resize(ref Randoms, Randoms.Length + 1);
Randoms[Randoms.Length - 1] = intRandom;

}
}
MessageBox.Show(Convert.ToString(intRandom));

}

خوب آقا فرشید من کد شما رو با اجازه یه جزئی تغییر دادم تا اعداد رندوم مورد نظر رو به تعداد دلخواه بسازه

private void ep()
{
Random objRandom = new Random();
while (listView1.Items.Count < 100000000)
{

int intRandom = objRandom.Next(0, 100000000);
foreach (int i in Randoms)
{
if (i == intRandom)
{
ep();
return;
}
else
{
Array.Resize(ref Randoms, Randoms.Length + 1);
Randoms[Randoms.Length - 1] = intRandom;

}
}
listView1.Items.Add(Convert.ToString(intRandom));
}

quantomquery
پنج شنبه 03 شهریور 1390, 15:00 عصر
سلام
وای چرا اینقدر خودتونو خسته می کنید
1- یه لیست از اعدادی که می خوای به ترتیب بساز - مثلا 1 تا 1000
2- به تعداد 1000 بار به صورت تصادفی اینارو جابجا کن
3- یه عدد تصادفی از 0 تا count این لیست بگیر - یعنی از ایندکسش
4 - عدد توی ایندکس رو نمایش بده و بعد اونو remove کن
5- این کارو اینقدر انجام بده تا count برابر صفر بشه - چون هر بار یکی رو ریموو می کنی

******* فقط چون تابع رندوم یکم مشنگه
اول یه ترد استاپ 2 میلی سکند بده
بعد یه رندوم با تخم (seed) میلی ثانیه dateTime.Now.milisecond بده تا یه جواب بهتری بگیری

موفق باشی


سلام
این راه جدید نیست و درصد اطمینان از عدد تصادفی(بدون تکرار) اون 100 هست
برای 10000 تا عدد هست البته 500 تا عدد اولشو نشون دادم که میتونین بقیه رو هم ببینین
سرعتش هم بجای جستجو و ارایه خوبه

اینو امتحان کنید :

sempay_ninjutsu
پنج شنبه 03 شهریور 1390, 15:41 عصر
با سلام
چرا انقدر کد می نویسید و محیط برنامتونو شلوغ می کنید.من یه کامپوننت نوشتم.ابتدا MyGame.DLL را به پروژتون اضافه کنید(ازطریق Add References)بعد کافیه در فرمتون ازش استفاده کنید.خاصیت این کامپوننت اینه که توضیحاتش بصورت فارسی زیرش نوشته شده و کار با آن خیلی سادست.
فقط بازه ی اعداد تصادفی تون باید از اندازه آرایتون بیشتر باشه.مثال پایین اعداد تصادفی بین 1 تا 17 را انتخاب می کند.(که 17 جز آنها نمی باشد).بعد اعداد تصادفی غیر تکراری در آرایه پی قرار داده شده است.
int[] p = new int[16];
MyGame.Windows.Forms.MyRandom myrandom1 = new MyGame.Windows.Forms.MyRandom(p, 1, 17);
p = myrandom1.Myarrayrandom();

حالا دوستان خودتون قضاوت کنید کدوم راحت تره.........
موفق باشید.