PDA

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



r_khan
شنبه 19 تیر 1389, 07:53 صبح
با سلام من در برنامم میخوام از 0تا 13 اعداد تصادفی غیرتصادفی بدین صورت تولید کنم که هر هفته اعداد تصادفی تولید کند یعنی این هفته مثلا اعداد 2 8 0 6 3 1 7 5 11 10 12 4 13 9 تولید کند و هفته بعد یه جور دیگه
لطفا کمکم کنید

mehrsa_fr
شنبه 19 تیر 1389, 08:04 صبح
اعداد تصادفی اعداد با قاعده ای نیشتن که تکراری نده و هفته ی بعد یک جور دیگه تولید کنه اگه بودن اسمشو اعداد تصادفی نمیزاشتن ولی برای تولید اعداد تصادفی(با تکرار) بین 0،13 از کد زیر میشه استفاده کرد


Random r = newRandom();
int Temp = r.Next(0,13);

hamid.shekasteh
شنبه 19 تیر 1389, 08:11 صبح
از کد زیر می تونید استفاده کنید:


Random rnd = new Random();

for (int i = 0; i < 7; i++)//For Week Day
{
int intRandom = rnd.Next(10, 100);
MessageBox.Show(intRandom.ToString());
}

vandermond
شنبه 19 تیر 1389, 08:27 صبح
من الان متاسفانه نميتونم كد بنويسم (VS رو پاك كردم كلا) ولي يادم مياد يكي از دوستان گفته بود كه پارامتر سوم Random.Next رو ميتوني شعاعي بدي كه عدد بعدي توي اون شعاع بازه عدد اول نباشه (نميدونم خوب گفتم يا نه. مثلا اگه از 0 تا 13باشه و پارامتر سوم رو بدي 1، اونوقت اگه عدد تصادفي توليدي اول 5باشه، ديگه 4و5و6 رو از بازه بعدي حذف ميكنه و باز براي بعدي هم بازه رو كوچك تر ميكنه تا كل بازه رو پوشش بده. بعد اون دوباره از اول و يه عدد تصادفي ديگه تو بازه اصلي ‌(اين مطالب رو اون فرد گفته بود و من تست نكردم و نميتونم تست كنم فعلا))
با استفاده از اين احتمالا كارتون راه ميفته.

mehrsa_fr
شنبه 19 تیر 1389, 09:12 صبح
public static int[] a = new int[13];
static void Main(string[] args)
{
Random r = new Random();
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();

}
public static bool Check(int Number)
{
bool ch = false;
foreach (int x in a)
{
if (x == Number)
{
ch = true;
}
}
return ch;
}
}

vandermond
شنبه 19 تیر 1389, 10:20 صبح
من الان متاسفانه نميتونم كد بنويسم (VS رو پاك كردم كلا) ولي يادم مياد يكي از دوستان گفته بود كه پارامتر سوم ...Random.Next
واقعا متاسفم. الان كه VS نصب شد رفتم ديدم كه ....(پارامتر سوم!!!)
احتمالا اون متدي كه من ديدم دست ساز بوده و باز هم مراتب عذر خواهي رو ...(نميدونستم چه فعلي بايد بگم)

Salar Ashgi
شنبه 19 تیر 1389, 10:52 صبح
دوست عزیز r_khan (http://www.barnamenevis.org/forum/member.php?u=79156) ، با متود Rnd.Next این تضمین همیشه وجود نداره که اعداد ما همیشه غیر تکراری هستن .

اگه واقعا قراره اعدادی که تولید بشن ، تکراری توش نباشه دیگه زیاد به اعداد تصادفی مربوط نمیشه .

یه روش نسبتا بهینه اینه که : شما اعداد 0 تا 13 رو داخل یه لیست (کالکشن جنریک) قرار بدید و بعدش

هربار با یه الگوریتم کاربردی یک چینش خاصی از اعداد رو انتخاب کنید .

hossein_ignore
شنبه 19 تیر 1389, 12:09 عصر
این یه DLL برای ایجاد عددهای رندوم با فاصله ی مشخص
مثال:

IgNoReCLS.RandomNumber r = new IgNoReCLS.RandomNumber();
label1.Text = r.NextRandom(0, 10, 2).ToString();

مثلا اگه minimumLength(فاصله)رو 2 بدی، اگه عدد 5 تولید شد، دیگه 3و4و5و6و7 تولید نمیشه! تا زمانی که امکان داشته باشه عدد تکراری نمیده، وقتی همه ی اعداد ممکن تو اون بازه رو ایجاد کرد، دوباره میاد یه سری اعداد رندوم دیگه تو اون بازه ایجاد می کنه
http://barnamenevis.org/forum/attachment.php?attachmentid=52593&d=1278691045

r_khan
یک شنبه 20 تیر 1389, 08:29 صبح
منظور من این نبود . منظورم اینه که ترتیب اعداد این هفته با هفته بعد فرق کنه نه این که با هر بار اجرای برنامه اعداد عوض بشوند این هفته یه ترتیبی از اعداد 0تا13(مثلا 2 6 9 3 10 و...) ایجاد شده و تا اخر هفته تغییر نمیکنه (حالا با هر بار اجرای برنامه) و هفته بعد که شد این ترتیب اعداد عوض میشه (مثلا 10 8 9 0 6 و ...)

Salar Ashgi
یک شنبه 20 تیر 1389, 11:35 صبح
دوست عزیز اینم خدمت شما ، با هر بار اجرای این تابع شما لیستی متفاوت از اعداد بین 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());
}


موفق و پیروز باشید .