با سلام من در برنامم میخوام از 0تا 13 اعداد تصادفی غیرتصادفی بدین صورت تولید کنم که هر هفته اعداد تصادفی تولید کند یعنی این هفته مثلا اعداد 2 8 0 6 3 1 7 5 11 10 12 4 13 9 تولید کند و هفته بعد یه جور دیگه
لطفا کمکم کنید
با سلام من در برنامم میخوام از 0تا 13 اعداد تصادفی غیرتصادفی بدین صورت تولید کنم که هر هفته اعداد تصادفی تولید کند یعنی این هفته مثلا اعداد 2 8 0 6 3 1 7 5 11 10 12 4 13 9 تولید کند و هفته بعد یه جور دیگه
لطفا کمکم کنید
اعداد تصادفی اعداد با قاعده ای نیشتن که تکراری نده و هفته ی بعد یک جور دیگه تولید کنه اگه بودن اسمشو اعداد تصادفی نمیزاشتن ولی برای تولید اعداد تصادفی(با تکرار) بین 0،13 از کد زیر میشه استفاده کرد
Random r = newRandom();
int Temp = r.Next(0,13);
آخرین ویرایش به وسیله mehrsa_fr : شنبه 19 تیر 1389 در 08:31 صبح
از کد زیر می تونید استفاده کنید:
Random rnd = new Random();
for (int i = 0; i < 7; i++)//For Week Day
{
int intRandom = rnd.Next(10, 100);
MessageBox.Show(intRandom.ToString());
}
من الان متاسفانه نميتونم كد بنويسم (VS رو پاك كردم كلا) ولي يادم مياد يكي از دوستان گفته بود كه پارامتر سوم Random.Next رو ميتوني شعاعي بدي كه عدد بعدي توي اون شعاع بازه عدد اول نباشه (نميدونم خوب گفتم يا نه. مثلا اگه از 0 تا 13باشه و پارامتر سوم رو بدي 1، اونوقت اگه عدد تصادفي توليدي اول 5باشه، ديگه 4و5و6 رو از بازه بعدي حذف ميكنه و باز براي بعدي هم بازه رو كوچك تر ميكنه تا كل بازه رو پوشش بده. بعد اون دوباره از اول و يه عدد تصادفي ديگه تو بازه اصلي (اين مطالب رو اون فرد گفته بود و من تست نكردم و نميتونم تست كنم فعلا))
با استفاده از اين احتمالا كارتون راه ميفته.
publicstaticint[] a = newint[13];
staticvoid Main(string[] args)
{
Random r = newRandom();
for (int i = 0; i < 13; i++)
{
int Temp = r.Next(0, 14);
while (Check(Temp))
{
Temp = r.Next(0, 14);
}
a[i] = Temp;
}
foreach (int x in a)
{
Console.WriteLine(x);
}
Console.ReadLine();
}
publicstaticbool Check(int Number)
{
bool ch = false;
foreach (int x in a)
{
if (x == Number)
{
ch = true;
}
}
return ch;
}
}
دوست عزیز r_khan ، با متود Rnd.Next این تضمین همیشه وجود نداره که اعداد ما همیشه غیر تکراری هستن .
اگه واقعا قراره اعدادی که تولید بشن ، تکراری توش نباشه دیگه زیاد به اعداد تصادفی مربوط نمیشه .
یه روش نسبتا بهینه اینه که : شما اعداد 0 تا 13 رو داخل یه لیست (کالکشن جنریک) قرار بدید و بعدش
هربار با یه الگوریتم کاربردی یک چینش خاصی از اعداد رو انتخاب کنید .
این یه DLL برای ایجاد عددهای رندوم با فاصله ی مشخص
مثال:
IgNoReCLS.RandomNumber r = new IgNoReCLS.RandomNumber();
label1.Text = r.NextRandom(0, 10, 2).ToString();
مثلا اگه minimumLength(فاصله)رو 2 بدی، اگه عدد 5 تولید شد، دیگه 3و4و5و6و7 تولید نمیشه! تا زمانی که امکان داشته باشه عدد تکراری نمیده، وقتی همه ی اعداد ممکن تو اون بازه رو ایجاد کرد، دوباره میاد یه سری اعداد رندوم دیگه تو اون بازه ایجاد می کنه
https://barnamenevis.org/attach...3&d=1278691045
منظور من این نبود . منظورم اینه که ترتیب اعداد این هفته با هفته بعد فرق کنه نه این که با هر بار اجرای برنامه اعداد عوض بشوند این هفته یه ترتیبی از اعداد 0تا13(مثلا 2 6 9 3 10 و...) ایجاد شده و تا اخر هفته تغییر نمیکنه (حالا با هر بار اجرای برنامه) و هفته بعد که شد این ترتیب اعداد عوض میشه (مثلا 10 8 9 0 6 و ...)
دوست عزیز اینم خدمت شما ، با هر بار اجرای این تابع شما لیستی متفاوت از اعداد بین 0 تا 13 را دریافت
خواهید نمود .
یه تابع واسه اینکار :
string Random_Days()
{
List<int> list = new List<int>();
for (int i = 0; i <= 13; i++)
list.Add(i);
string res = "";
var query = list.OrderBy(a => Guid.NewGuid());
foreach (var q in query)
{
res += q.ToString() + " / ";
}
return res;
}
فراخوانی :
private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(Random_Days());
}
موفق و پیروز باشید .