PDA

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



mshirzad68
چهارشنبه 18 خرداد 1390, 16:44 عصر
یه درخواست کمک ازتون داشتم
من دارم رو یه پروژه وب سایت آزمون اینترنتی کار میکنم .
وب سایتی که به بانک اطلاعاتی وصل میشه و از سوالات موجود تو بانک یک امتحان طرح میکنه و خودش هم امتحان رو تصحیح و نمره رو در بانک ثبت میکنه .
برای انتخاب سوالات آزمون ؛ برنمه عدد تصادفی بین 1 تا تعداد سوالات آزمون ایجاد میکنه و طبق اون اعداد تصادفی که در یک آرایه ذخیره میشن ؛ سوالات رو انتخاب میکنه و نمایش میده .
مشکل من اینجاست که ممکنه اعداد تصادفی تکراری تولید بشن . یعنی وقتی که یک عدد بین این اعداد انتخاب میشه ؛ برای انتخاب عدد دوم دیگه اون عدد بین اعداد اعداد انتخابی نباشه ..
میخواستم ببینم آیا الگوریتم خاصی برای این کار هست ؟
البته من خودم با بکار بردن سلول های خاکستری مغزم یه الگوریتم کوچولو نوشتم !
این الگوریتم اجرا میشه ولی جواب نمیده . یعنی عدد تکراری تولید میکنه .
الگوریتم خودم :
rndNUM[0] = rnd.Next(tedad);
//پیدا کردن عدد تصادفی و چک کردن اینکه آیا عدد پیدا شده تکراری است یا نه اگر تکراری بود دوباره انتخاب شود و اگر تکراری نبود در آرایه سوالات تصادفی ذخیره شود
for (int i = 1; i <= 9; i++)
{
temp = rnd.Next(10);
for (int j = 0; j <= i; j++)
if (temp == rndNUM[j])
{
Check = true;
temp = rnd.Next(10);
rndNUM[i] = temp;
}
else if (temp != rndNUM[j])
continue;
if (Check = false)
rndNUM[i] = temp;
else if (Check = true)
continue;
}

آیا شما برای حل این مشکل من پیشنهادی دارید ؟
در صورت امکان و داشتن وقت ممنون میشم کمکم کنید .
با سپاس . محسن شیرزاده .

sam166
چهارشنبه 18 خرداد 1390, 23:31 عصر
این یک تابع برا ایجاد اعداد تصادفی است
IEnumerable<int> UniqueRandom(int minInclusive, int maxInclusive)
{
List<int> candidates = new List<int>();
for (int i = minInclusive; i <= maxInclusive; i++)
{
candidates.Add(i);
}
Random rnd = new Random();
while (candidates.Count > 1)
{
int index = rnd.Next(candidates.Count);
yield return candidates[index];
candidates.RemoveAt(index);
}
}


foreach (int i in UniqueRandom(100, 10000))
{

lblpass = i.ToString(); ;
}

mshirzad68
جمعه 20 خرداد 1390, 10:05 صبح
خیلی ممنون . ولی یه سوال میتونم بپرسم ؟ ین کدی که نوشتید به زبان سی هستش ؟
خط اول و دوم رو تو سی شارپ ارور میگیره . من تا حالا کد به این شکل ندیدم و نمیدونم چجوریه . میشه خط اوّل رو برام توضیح بدین ؟

mshirzad68
جمعه 20 خرداد 1390, 10:08 صبح
خیلی ممنون . ولی یه سوال میتونم بپرسم ؟ ین کدی که نوشتید به زبان سی هستش ؟
خط اول و دوم رو تو سی شارپ ارور میگیره . من تا حالا کد به این شکل ندیدم و نمیدونم چجوریه . میشه خط اوّل رو برام توضیح بدین ؟

sam166
جمعه 20 خرداد 1390, 12:27 عصر
این فضای نام رو اضافه کن
using System.Collections.Generic;

aassaass
دوشنبه 13 آذر 1391, 11:28 صبح
با سلام دوست عزیز این کدی که شما قرار دادید اعداد تصادفی تکراری هم تولید میکنه!!!!

fakhravari
دوشنبه 13 آذر 1391, 11:59 صبح
public static Int64 Unique_Numberic()
{
byte[] bytes = Guid.NewGuid().ToByteArray();
return BitConverter.ToInt64(bytes, 0);
}
Guid جستجو کنید.