سلام دوستان
کسی میدونه چطور میشه 9 تا عدد تصادفی غیر تکراری از 1 تا 9 ایجاد کرد.
در واقع یعنی 8 تا تصادفی. چون آخری که تصادفی نمیشه.
ممنون میشم راهنمایی بفرمایید.
Printable View
سلام دوستان
کسی میدونه چطور میشه 9 تا عدد تصادفی غیر تکراری از 1 تا 9 ایجاد کرد.
در واقع یعنی 8 تا تصادفی. چون آخری که تصادفی نمیشه.
ممنون میشم راهنمایی بفرمایید.
براي توليد اعداد تصادفي از تابع Rnd استفاده مي شود. تابع INt هم قسمت صحيح عدد تصادفي را برميگرداند.
int(rnd()*10)
براي اينكه اعدد تصادفي مشابه نشوند در فرم لود دستور Randomize() رو تايپ كن
سلام دوست عزیز
زحمت کشیده بودید.
برای تولید اعداد تصادفی مشکلی ندارم.
فقط برای غیر تکراری بودنشون با مشکل مواجه شدم.
کدی که شما نوشتید، در vb6 جواب میداد.
اما در vb.net دیگه جواب نمیده!
یه آرایه از نوع integer بساز
اولین عدد رو توی اولین خونه آرایه قرار بده ، دفعه بعد عدد ساخته شده رو با اعداد داخل آرایه مقایسه کن ، اگه تکراری بود که هیچی . اگر نبود تو خونه بعدی آرایه قرارش بده . این کار رو ادامه بده تا وقتی که هر 8 تا خونه آرایت پر بشه .
حرف شما درسته
من هم از همین روش استفاده کردم.
اما فکر نمی کنید منطقش درست نیست؟
اومدیمو این حلقه یک حلقه بی انتها شد!
ینی چی ؟؟ چطوری بی انتها بشه ؟؟
فرض کنید با توجه به قوانین احتمال هیچ وقت 8 تا خونمون پر نشه!
یا بعد از یک مدت طولانی پر بشه
یعنی احتمال نداره شما یک تاس رو 1000000000 با پرتاب کنی و هیچ وقت عدد 6 رو نیاد؟!
با یک مثال برات توضیح میدم.
یک آرایه از 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;
}
خیلی ممنون.
خیلی زحمت کشیدید.
انشاالله بتونم از خجالتتون در بیام.
راستی در vb.net هم ایندکس آرایه ها از صفر شروع میشه.
روش آقا محسن خیلی جالب بود.
اما آیا خود vb.net تابعی نداره که این کار رو انجام بده؟!
با اینکه من vb.net کار نمی کنم ولی فکر نکنم چنین تابعی داشته باشه.نقل قول:
اما آیا خود vb.net تابعی نداره که این کار رو انجام بده؟!
سلام
خسته نباشید . بچه ها خواهش میکنم کمکم کنید من عدد تصادفی می خوام از 1 تا 16 برای نشون دادن عکس فردا تحویل پروژه دارم این کد C# من هستش ولی ارور می ده
int[] pic = newint[16];
publicvoid RandomPic()
{
for (int i = 0; i < 15; i++)
{
pic[i] = i;
}
Random rand = newRandom();
for (int a = 15; a > -1; a--)
{
int x = rand.Next(a);
int temp;
temp = pic[x];
pic[x] = pic[a];
pic[a] = temp;
}
}
privatevoid btn1_Click(object sender, EventArgs e)
{
btn1.Image = System.Drawing.Image.FromFile("c:\\Picure\\"+pic.ToString()+".jpg");
}
داداش این عدد تکراری می ده
کسی نیست؟:گریه:
بچه ها یکی منو کمک کنه من میخوام 16 عدد تصادفی و بدون تکراری می خوام که عکسامو نشون بدم فردا تحویل دارم اعدادم 1تا 16 :عصبانی++::عصبانی++::عصبانی++:: صبانی++:
بچه ها کمک
نتایج تو آرایه 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 بهتره (روش بر زدن)
برای این که تکراری نشوند، دستور Ranfomize رو قبل از rnd() تایپ کن