PDA

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



Shahab.
دوشنبه 16 بهمن 1391, 01:31 صبح
سلام
من میخوام عدد n رو از کاربر دریافت کنم (n تعداد خانه های آرایه است)
فرض میکنیم کاربر عدد 10 رو وارد میکنه پس 10 تا خونه درون حافظه ایجاد میشه
حالا من میخوام اعداد از 1 تا 10 رو درون این خانه ها بطور تصادفی مرتب کنم اونم بدون تکرار
مثال :
s(0)=8
s(1)=6
s(2)=3
s(3)=9
s(4)=5
s(5)=2
s(6)=1
s(7)=4
s(8)=10
s(9)=7

در مثال بالا میبینم که اعداد درون این آرایه از 1 تا 10 هستن ولی بطور تصادفی درون خانه های آرایه قرار گرفتن
حالا چجوری این کارو بکنم که هر دفعه یک عدد تصادفی درون یکی از خانه ها قرار بگیره اما کلا اعداد از 1 تا n باشن و هیچ عدد تکراری هم وجود نداشته باشه؟
قطعه کدی دارید برای این کار؟

Hashemvp
دوشنبه 16 بهمن 1391, 10:08 صبح
کتابتو خوب بخونی توش هست:لبخند:
از روش حلقه های حبابی استفاده کن
موفق باشی

Shahab.
دوشنبه 16 بهمن 1391, 13:23 عصر
بلد نیستم والا

m2011kh
دوشنبه 16 بهمن 1391, 20:16 عصر
سلام.
تو فرمتون یه Command و یک List و یک TextBoxاضافه کنید و این کد هارو به Command تون اضافه کنید.
Private Sub Command1_Click()
Call Randomize
Dim IndexRandom As Integer, i As Integer
IndexRandom = Text1.Text
ReDim Arraye(IndexRandom) As Integer
For i = 1 To IndexRandom
Arraye(i) = Int(Rnd * 50)
List1.AddItem Arraye(i)
Next i
End Sub


این کد به اندازه عدد شما یه آرایه با همون ابعاد ایجاد میکنه و تو همه اونها رو یک عدد Random در محدوده 50 ایجاد میکنه و تو لیست نشون میده.

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

Arraye(i) = Int(Rnd * 50)

MMD

the king
دوشنبه 16 بهمن 1391, 20:37 عصر
سلام
من میخوام عدد n رو از کاربر دریافت کنم (n تعداد خانه های آرایه است)
فرض میکنیم کاربر عدد 10 رو وارد میکنه پس 10 تا خونه درون حافظه ایجاد میشه
حالا من میخوام اعداد از 1 تا 10 رو درون این خانه ها بطور تصادفی مرتب کنم اونم بدون تکرار
مثال :
s(0)=8
s(1)=6
s(2)=3
s(3)=9
s(4)=5
s(5)=2
s(6)=1
s(7)=4
s(8)=10
s(9)=7

در مثال بالا میبینم که اعداد درون این آرایه از 1 تا 10 هستن ولی بطور تصادفی درون خانه های آرایه قرار گرفتن
حالا چجوری این کارو بکنم که هر دفعه یک عدد تصادفی درون یکی از خانه ها قرار بگیره اما کلا اعداد از 1 تا n باشن و هیچ عدد تکراری هم وجود نداشته باشه؟
قطعه کدی دارید برای این کار؟

روش اول ، بعد از مقدار دهی کلیه خانه ها بار ها جابجاشون می کنیم (به اصطلاح بازی با کارت ها، بر می زنیم)


Dim n As Integer, i As Integer, a() As Integer
Dim temp As Integer, x As Integer, y As Integer
n = Val(InputBox("please enter number n : ", "Input n", "10"))
Randomize
ReDim a(0 To n - 1)
For i = 1 To n
a(i - 1) = i
Next
For i = 1 To 100
y = Int(Rnd * n)
x = Int(Rnd * n)
temp = a(x)
a(x) = a(y)
a(y) = temp
Next


روش دوم : از اول به صورت تصادفی مقدار دهی می کنیم. شرط اش اینه که مقدار خونه ها هیچوقت صفر نباشه.

Dim n As Integer, i As Integer, a() As Integer
Dim x As Integer
n = Val(InputBox("please enter number n : ", "Input n", "10"))
Randomize
ReDim a(0 To n - 1)
For i = 1 To n
Do
x = Int(Rnd * n)
Loop Until a(x) = 0
a(x) = i
Next


روش سوم، شبیه همون روش دومه، کد طولانی تر میشه اما شرط روش دوم رو نداره.

Dim n As Integer, i As Integer, a() As Integer
Dim x As Integer, b() As Boolean
n = Val(InputBox("please enter number n : ", "Input n", "10"))
Randomize
ReDim a(0 To n - 1)
ReDim b(0 To n - 1)
For i = 1 To n
Do
x = Int(Rnd * n)
Loop While b(x)
a(x) = i
b(x) = True
Next

Shahab.
دوشنبه 16 بهمن 1391, 20:37 عصر
آقای m2011kh عزیز من اینکه کاری نداره
شما به سئوال من دقت نکردی
خدمتتون عرض کردم که بدون تکرار
این کد شما ممکنه در خانه ی سوم آرایه عدد 6 رو قرار بده و در خانه ی چهارم هم عدد 6 رو باز قرار بده و...

m2011kh
دوشنبه 16 بهمن 1391, 22:10 عصر
میدونم ولی من معمولا اصل غزیه رو بهت میدم جزییاتش با خودت.

اصلش اینه که من فقط راهنماییت کنم نه اینکه جواب کاملتو بهت بدم.

اگه کوتاهی شد معذرت
MMD

vbhamed
سه شنبه 17 بهمن 1391, 10:10 صبح
سلام
در اين روش نيازي به گشتن آرايه (و صرف وقت) جهت موارد تكراري وجود نداره چون عدد انتخاب شده از كلكسيون حذف ميشه پس مطمئنا عدد بعدي تكراي نيست

Dim c As New Collection, s() As Long, n&, i&, nr&

n = InputBox("Enter n:")
ReDim s(n - 1)

For i = 0 To n - 1
c.Add i + 1
Next

Randomize Timer
For i = 0 To n - 1
nr = Int(Rnd * n) + 1
s(i) = c(nr)
c.Remove nr
List1.AddItem s(i)
n = n - 1
Next