PDA

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



tabatabaeefar
یک شنبه 20 اردیبهشت 1388, 11:55 صبح
سلام دوستان
کسی میدونه چطور میشه 9 تا عدد تصادفی غیر تکراری از 1 تا 9 ایجاد کرد.
در واقع یعنی 8 تا تصادفی. چون آخری که تصادفی نمیشه.
ممنون میشم راهنمایی بفرمایید.

sanaz e
دوشنبه 21 اردیبهشت 1388, 10:04 صبح
براي توليد اعداد تصادفي از تابع Rnd استفاده مي شود. تابع INt هم قسمت صحيح عدد تصادفي را برميگرداند.

int(rnd()*10)
براي اينكه اعدد تصادفي مشابه نشوند در فرم لود دستور Randomize() رو تايپ كن

tabatabaeefar
سه شنبه 22 اردیبهشت 1388, 13:08 عصر
سلام دوست عزیز
زحمت کشیده بودید.
برای تولید اعداد تصادفی مشکلی ندارم.
فقط برای غیر تکراری بودنشون با مشکل مواجه شدم.
کدی که شما نوشتید، در vb6 جواب میداد.
اما در vb.net دیگه جواب نمیده!

sari-1369
سه شنبه 22 اردیبهشت 1388, 14:16 عصر
یه آرایه از نوع integer بساز

اولین عدد رو توی اولین خونه آرایه قرار بده ، دفعه بعد عدد ساخته شده رو با اعداد داخل آرایه مقایسه کن ، اگه تکراری بود که هیچی . اگر نبود تو خونه بعدی آرایه قرارش بده . این کار رو ادامه بده تا وقتی که هر 8 تا خونه آرایت پر بشه .

tabatabaeefar
سه شنبه 22 اردیبهشت 1388, 17:37 عصر
حرف شما درسته
من هم از همین روش استفاده کردم.
اما فکر نمی کنید منطقش درست نیست؟
اومدیمو این حلقه یک حلقه بی انتها شد!

sari-1369
سه شنبه 22 اردیبهشت 1388, 17:46 عصر
ینی چی ؟؟ چطوری بی انتها بشه ؟؟

tabatabaeefar
سه شنبه 22 اردیبهشت 1388, 18:01 عصر
فرض کنید با توجه به قوانین احتمال هیچ وقت 8 تا خونمون پر نشه!
یا بعد از یک مدت طولانی پر بشه
یعنی احتمال نداره شما یک تاس رو 1000000000 با پرتاب کنی و هیچ وقت عدد 6 رو نیاد؟!

mohsen_csharp
سه شنبه 22 اردیبهشت 1388, 18:28 عصر
با یک مثال برات توضیح میدم.
یک آرایه از 1 تا 9 تعریف کن و محتویات آن ها را به ترتیب اعداد 1 تا 9 قرار بده.
یه حلقه بنویس که a=9 تا 1 بره و در داخل حلقه کارهای زیر را انجام بده:
{
عددی تصادفی بین 1 تا a ایجاد کن فرض کن این عدد x=5 بشه.
حالا محتویات خانه x رو با محتویات خانه a عوض کن.
}
پس از پایان حلقه شما یک آرایه با اعداد تصادفی غیر تکراری خواهید داشت.
اینم کدش ولی با C# نوشتم.توجه کن که تو C# اندیس آرایه از صفر شروع میشه.


//تعریف آرایه
int[] ar = new int[10];
//مقدار دهی اولیه آرایه
for (int i = 0; i < 10; i++)
{
ar[i] = i;
}
//تولید اعداد تصادفی غیر تکراری
Random rand = new Random();
for (int a = 9; a > -1; a--)
{
int x = rand.Next(a);
int temp;
temp = ar[x];
ar[x] = ar[a];
ar[a] = temp;
}

tabatabaeefar
سه شنبه 22 اردیبهشت 1388, 18:39 عصر
خیلی ممنون.
خیلی زحمت کشیدید.
انشاالله بتونم از خجالتتون در بیام.
راستی در vb.net هم ایندکس آرایه ها از صفر شروع میشه.

tabatabaeefar
چهارشنبه 23 اردیبهشت 1388, 08:48 صبح
روش آقا محسن خیلی جالب بود.
اما آیا خود vb.net تابعی نداره که این کار رو انجام بده؟!

mohsen_csharp
چهارشنبه 23 اردیبهشت 1388, 10:59 صبح
اما آیا خود vb.net تابعی نداره که این کار رو انجام بده؟!
با اینکه من vb.net کار نمی کنم ولی فکر نکنم چنین تابعی داشته باشه.

hamidniit
دوشنبه 27 اردیبهشت 1389, 13:32 عصر
سلام
خسته نباشید . بچه ها خواهش میکنم کمکم کنید من عدد تصادفی می خوام از 1 تا 16 برای نشون دادن عکس فردا تحویل پروژه دارم این کد C# من هستش ولی ارور می ده
int[] pic = new int[16];
public void RandomPic()
{
for (int i = 0; i < 15; i++)
{
pic[i] = i;
}
Random rand = new Random();
for (int a = 15; a > -1; a--)
{
int x = rand.Next(a);
int temp;
temp = pic[x];
pic[x] = pic[a];
pic[a] = temp;
}
}




private void btn1_Click(object sender, EventArgs e)
{
btn1.Image = System.Drawing.Image.FromFile("c:\\Picure\\"+pic.ToString()+".jpg");
}

Peyman.Gh
دوشنبه 27 اردیبهشت 1389, 13:47 عصر
سلام
خسته نباشید . بچه ها خواهش میکنم کمکم کنید من عدد تصادفی می خوام از 1 تا 16 برای نشون دادن عکس فردا تحویل پروژه دارم این کد C#‎ من هستش ولی ارور می ده

Random rand = new Random();
int num = rand.Next(17);
button2.Image = System.Drawing.Image.FromFile("C:\\Picure\\" + num.ToString() + ".jpg");

موفق باشید.

hamidniit
دوشنبه 27 اردیبهشت 1389, 13:53 عصر
داداش این عدد تکراری می ده

hamidniit
دوشنبه 27 اردیبهشت 1389, 14:15 عصر
Random rand = new Random();
int num = rand.Next(17);
button2.Image = System.Drawing.Image.FromFile("C:\\Picure\\" + num.ToString() + ".jpg");

موفق باشید.
کمکم کنید من می خوام اعدادم تکراری نباشه:گریه:

hamidniit
دوشنبه 27 اردیبهشت 1389, 14:52 عصر
کسی نیست؟:گریه:

hamidniit
دوشنبه 27 اردیبهشت 1389, 18:07 عصر
بچه ها یکی منو کمک کنه من میخوام 16 عدد تصادفی و بدون تکراری می خوام که عکسامو نشون بدم فردا تحویل دارم اعدادم 1تا 16 :عصبانی++::عصبانی++::عصبانی++:: صبانی++:

hamidniit
دوشنبه 27 اردیبهشت 1389, 23:11 عصر
بچه ها کمک

nima898
سه شنبه 28 اردیبهشت 1389, 11:27 صبح
نتایج تو آرایه b ذخیره میشه


For i = 1 To 16
a(i) = i
Next
For i = 1 To 16
r = Int(Rnd() * (17 - i) + 1)
b(i) = a(r)
a(r) = 20
f = True
DoWhile f
f = False
For j = 1 To 16
If a(j) = 20 Then
For k = j To 15
a(k) = a(k + 1)
f = True
Next
EndIf
Next
Loop
Next



البته به نظر من روش پست شماره 8 بهتره (روش بر زدن)

Hossis
چهارشنبه 23 مهر 1393, 09:09 صبح
برای این که تکراری نشوند، دستور Ranfomize رو قبل از rnd() تایپ کن