PDA

View Full Version : سوال: تولید عدد تصادفی بین 1 تا 10 به صورتی که تکراری نباشد!



Pedram_Parsian
شنبه 26 مرداد 1392, 10:40 صبح
با سلام به همه برنامه نویسان مبتدی و حرفه ای!
من دارم یه برنامه می نویسم که یه پیغام نشان بده و هر دفعه یه عدد به صورت تصادفی در پیغام نشان بده که شرط های زیر رو داشنه باشد:
1. عدد های پشت سر هم تکراری نباشد.
2. عدد های بین 1 تا 10 باشد.

لطفا من را راهنمایی کنید با تشکر.

aliagamon
شنبه 26 مرداد 1392, 10:48 صبح
با این کد عدد رندوم بین 1 تا 10 میسازی ...

Random rnd = new Random();
int msgNum = rnd.Next(1, 11);

واسه تکراری نبودن هم هر بار که میسازی باید با اعداد قبلی چک کنی که مثل هم نباشن ...

hamid_0341
شنبه 26 مرداد 1392, 10:52 صبح
با این کد عدد رندوم بین 1 تا 10 میسازی ...

Random rnd = new Random();
int msgNum = rnd.Next(1, 11);

واسه تکراری نبودن هم هر بار که میسازی باید با اعداد قبلی چک کنی که مثل هم نباشن ...
اگه با 3 عدد قبل یکی بود چی ؟

Pedram_Parsian
شنبه 26 مرداد 1392, 10:56 صبح
دوست عزیز
میشه همین کدی رو که برای تکراری نشدن باید استفاده کنم رو توی یک مثال بهم نشان بدهید؟
من منظورتون رو متوجه نشدم از این جمله که گفتید : واسه تکراری نبودن هم هر بار که میسازی باید با اعداد قبلی چک کنی که مثل هم نباشن ...
اگه میشه کدی که از تکراری نشدنش جلوگیری می کنه رو برام بنویسید
با تشکر فراوان! :لبخند:

hamid_0341
شنبه 26 مرداد 1392, 11:13 صبح
نمونه کد
if (iconlabel != null)
{
int randomnumber = random.Next(icons.Count);
iconlabel.Text = icons[randomnumber];
if (Convert.ToInt32(label1.Text) == randomnumber)
{
icons.RemoveAt(randomnumber);
}
}

aliagamon
شنبه 26 مرداد 1392, 11:18 صبح
از این استفاده کن

Random rnd=new Random();
float[] msgNum = new float[5];

for(int i = 0;i<5;i++)
{
msgNum[i] = rnd.Next(1, 11);
for (int j = 0; j < i; j++)
{
if (msgNum[i] == msgNum[j])
i--;
}
}
var builder = new StringBuilder();
Array.ForEach(msgNum, x => builder.Append(x));
var res = builder.ToString();
MessageBox.Show(res);

hamid_0341
شنبه 26 مرداد 1392, 11:19 صبح
من توی این کد یک لیست به نام icons تولید کردم که اعداد توش ریختم بعدراندوم عددا نشون دادم بعد هر وقت یک عدد نشون داد گفتم این عدد پاک کنه از اون لیست
دیگه اون عدد تکراری نمیشه

Pedram_Parsian
شنبه 26 مرداد 1392, 11:25 صبح
ببخشید
برای این برنامه چه کنترل هایی به فرم اضافه کردید؟
icons چیه؟ چرا زیرش خط قرمز کشیده شده؟
به جای iconlabel هم باید یه لیبل جدید به فرم اضافه کنیم؟

Pedram_Parsian
شنبه 26 مرداد 1392, 11:29 صبح
توی این کد دوم اعداد بین 1 تا 10 نیست برای این که اعداد بین یک تا ده بشه باید کجای مد رو تغییر بدیم؟

hamid_0341
شنبه 26 مرداد 1392, 11:30 صبح
برات توضیح دادم icons یه لیست اینجوری
List<int> icons = new List<int>
{
1,2,3,4,5,6,7,8,9,10
};

aliagamon
شنبه 26 مرداد 1392, 11:32 صبح
کد دوم یعنی کد من؟....
کد من دقیقا اعداد بین 1 تا 10 هستن ولی کنار هم مینویسم اخرش تو خروجی همین
شما بگو واسه چه کاری میخوای انجام بدی من کد رو اونطوری بنویسم براتون

Pedram_Parsian
شنبه 26 مرداد 1392, 11:32 صبح
من توی این کد یک لیست به نام icons تولید کردم که اعداد توش ریختم بعدراندوم عددا نشون دادم بعد هر وقت یک عدد نشون داد گفتم این عدد پاک کنه از اون لیست
دیگه اون عدد تکراری نمیشه
خوب این کد شما فقط 10 بار کار می کنه

hamid_0341
شنبه 26 مرداد 1392, 11:41 صبح
مگه بعد از ورود فرمت رفرش نمیشه یا برنامه این فرمش بسته یا یاز نمیشه ؟ ؟؟ ؟ خب این دوباره لیست ساخته میشه
از کد اقای aliagamon (http://barnamenevis.org/member.php?214213-aliagamon) استفاده کن

مهرداد صفا
شنبه 26 مرداد 1392, 11:44 صبح
با سلام.
لطفا قبل از ایجاد تاپیک جدید جستجو کنید.
http://barnamenevis.org/showthread.php?372811-%D8%AA%D9%88%D9%84%DB%8C%D8%AF-%D8%B9%D8%AF%D8%AF-%D8%AA%D8%B5%D8%A7%D8%AF%D9%81%DB%8C-%D8%BA%DB%8C%D8%B1-%D8%AA%DA%A9%D8%B1%D8%A7%DB%8C-%D9%88-%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A8%D9%87-%D8%A7%D8%B1%D8%A7%DB%8C%D9%87.

Pedram_Parsian
شنبه 26 مرداد 1392, 11:45 صبح
کد دوم یعنی کد من؟....
کد من دقیقا اعداد بین 1 تا 10 هستن ولی کنار هم مینویسم اخرش تو خروجی همین
شما بگو واسه چه کاری میخوای انجام بدی من کد رو اونطوری بنویسم براتون
من کدی که لازم دارم باید این خاصیت ها رو داشته باشه:. یه دکمه(button) وجود داره که وقتی کاربر روی اون کلیک می کنه توی یه پیغام به کاربر یه عدد بین 1 تا 10 (خیلی مهم نیست بین چند تا چند ولی قابل کنترل باشه) بده و اگر کاربر دوباره روی دکمه کلیک کرد عدد بعدی که می ده با عدد قبلی یکی نباشه (دو عدد پشت سر هم تکراری به کاربر نده)
:لبخندساده:

Pedram_Parsian
شنبه 26 مرداد 1392, 11:50 صبح
با سلام.
لطفا قبل از ایجاد تاپیک جدید جستجو کنید.
http://barnamenevis.org/showthread.php?372811-%D8%AA%D9%88%D9%84%DB%8C%D8%AF-%D8%B9%D8%AF%D8%AF-%D8%AA%D8%B5%D8%A7%D8%AF%D9%81%DB%8C-%D8%BA%DB%8C%D8%B1-%D8%AA%DA%A9%D8%B1%D8%A7%DB%8C-%D9%88-%D8%A7%D9%86%D8%AA%D9%82%D8%A7%D9%84-%D8%A8%D9%87-%D8%A7%D8%B1%D8%A7%DB%8C%D9%87.
سلام
من جستجو کردم ولی کد این لینک با کدی که من لازم دارم متفاوت بود
من به دو عدد تکراری نیاز ندارم
با تشکر از مدیر بخش

aliagamon
شنبه 26 مرداد 1392, 11:55 صبح
تو این پروژه که براتون نوشتم دو عدد تکراری پشت سر هم ایجاد نمیشه:لبخند:

مهرداد صفا
شنبه 26 مرداد 1392, 12:16 عصر
یک متغیر سراسری برای نگهداری آخرین مقدار تولید شده ایجاد کنید و در هر بار در صورتیکه عدد تولید شده جدید برابر با عدد قبلی بود عدد جدید دیگری تولید کنید:

int LastNumber=-1;
void ButtonClicked......
{
Random rand=new Random();
int NewNumber=-2;
GetRandom:
NewNumber=rand.Next(1,11);
if(NewNumber==LastNumber)
goto GetRandom;
MessageBox.Show(NewNumber.ToString());
LastNumber=NewNumber;
//....
}

Pedram_Parsian
شنبه 26 مرداد 1392, 12:20 عصر
تو این پروژه که براتون نوشتم دو عدد تکراری پشت سر هم ایجاد نمیشه:لبخند:
مرسی دوست عزیز
:تشویق: