PDA

View Full Version : سوال: تولید عدد تصادفی غیر تکراری



behnam.m
جمعه 23 مهر 1389, 21:21 عصر
سلام من یک برنامه نوشتم که اعداد تصادفی در میاره تا وقتی که به اعداد 10 برسه متوقف میشه این اعدا در محدود 0 تا 25 است . یک شخصی لطف کن برنامه منو طوری تغییر بده که اعداد تکراری تولید نشه و در لیست باکس نشان داده سود ؟
ممنون


Random objRandom = new Random();

int intRandomNumber = 0;

LstData.Items.Clear();

do

{


intRandomNumber = objRandom.Next(25);

LstData.Items.Add(intRandomNumber);


} while (intRandomNumber != 10

group45
جمعه 23 مهر 1389, 21:42 عصر
public void crrand()//creat random
{
int i;
int[] ar2 = new int[25];
for (i = 0; i < 25; i++)
ar1[i] = 25;
int loop = 0, p, loop2 = 0;
Random r = new Random();
while (ar1[24] == 25)
{
if (loop2 > 150)
{
for (i = 0; i < 25; i++)
ar2[i] = ar1[i];
Array.Sort(ar2);
for (i = 0; i < 25; i++)
if (ar2[i] != i)
for (int j = 0; j < 25; j++)
if (ar1[j] == 25)
{
ar1[j] = i;
i = 25;
break;
}
loop2 = 0;
}
p = r.Next(0, 24);
loop2++;
for (i = 0; i < 25; i++)
{
if (ar1[i] == 25)
{
ar1[loop] = p;
loop++;
loop2 = 0;
break;
}
else if (ar1[i] == p)
break;
}
}
if (ar1[24] == 24)
{
ar1[24] = ar1[10];
ar1[10] = 24;
}
}


این بین 0 تا 24 هست

mohsen_csharp
جمعه 23 مهر 1389, 23:36 عصر
با سلام
اینم یه تابع کم نظیر که خودم نوشتم


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

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() + "-";
}
}

HH2BN1990
شنبه 24 مهر 1389, 00:19 صبح
group45 عزیز ، کد شما ارور داره!
mohsen_csharp عزیز ، کد شماهم به تعدادی که بعنوان ورودی تابع میدیم عدد تصادفی غیر تکراری تولید می کنه ولی ایشون گفتن که تا زمانی که به عدد 10 نرسیده عدد تصادفی غیر تکراری تولید کنه



این کدی که من نوشتم .



public List<int> Random(int Max,int EndNumber)
{
Random objRandom;
List<int> LstData = new List<int>();
int RandomNumber = 0;
do
{
objRandom = new Random();
RandomNumber = objRandom.Next(Max);
if (!LstData.Contains(RandomNumber))
LstData.Add(RandomNumber);
} while (RandomNumber != EndNumber);
return LstData;
}


لیست باکسی که داخل فرم هستش رو هم می تونی اینطوری پر کنی



listbox.DataSource = Random(25, 10);

group45
شنبه 24 مهر 1389, 09:04 صبح
group45 عزیز ، کد شما ارور داره!

من ازش تو یه برنامه الان دارم استفاده میکنم چطور ارور داره!!!!! بگو چیه؟؟؟؟؟؟؟؟ شاید کدا رو کامل کپی نکردی

HH2BN1990
شنبه 24 مهر 1389, 10:39 صبح
من ازش تو یه برنامه الان دارم استفاده میکنم چطور ارور داره!!!!! بگو چیه؟؟؟؟؟؟؟؟ شاید کدا رو کامل کپی نکردی


ارورش به خاطر ننوشتن خط زیره



int[] ar1 = new int[25];


کد شما هم اون چیزی که دوستمون می خواد نیست

mmd2009
شنبه 24 مهر 1389, 11:54 صبح
با سلام

شما میتونید از کدهای زیر برای این کار استفاده بکنید...



private void Form1_Load(object sender, EventArgs e)
{
listBox1.DataSource = myIntRandom(0, 50);
}

/// <summary>
/// متدی برای انقال اعداد تصادفی
///غیر تکرای به لیست باکس مربوطه
/// </summary>
/// <param name="myMinInt"> کوچکترین عدد تولیدی</param>
/// <param name="myMaxInt">بزرگترین عدد تولیدی</param>
/// <returns>مقدار کل اعداد تولیدی به لیسن باکس</returns>
private List<int> myIntRandom(int myMinInt, int myMaxInt)
{
List<int> randomlist = new List<int>();
List<int> MyRandom = new List<int>();
Random myRandomlist = new Random();
for (int i = myMinInt; i <= myMaxInt; i++)
{
MyRandom.Add(i);
}
while (MyRandom.Count > 0)
{
int myindex = myRandomlist.Next(MyRandom.Count);
randomlist.Add(MyRandom[myindex]);
if (MyRandom[myindex] == 10)
{
return (randomlist);
}
MyRandom.RemoveAt(myindex);
}
return randomlist;
}

group45
شنبه 24 مهر 1389, 12:49 عصر
ارورش به خاطر ننوشتن خط زیره



int[] ar1 = new int[25];
کد شما هم اون چیزی که دوستمون می خواد نیست

اهااااان.ببخشید چون public تعریفش کرده بودم یادم رفته بود بزارمش