PDA

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



senator_aka
یک شنبه 06 خرداد 1386, 19:05 عصر
سلام به همه

من امروز یه مشکل پیش اومد برام و اون این بود که نتونستم یه عدد تصادفی که تکراری هم نباشه را با تابع random انتخاب کنم.
اصلا این کار چطور با این تابع انجام میشه؟
اصلا میشه یا نه؟

من می خوام با استفاده از for چند عدد بین 10 تا 40 پیدا کنم که هیچ کدام تکراری نباشه !!!

اصلا چطور میشه شروع اعداد را از 10 انتخاب کرد؟

مثلا اگه اعداد 11 و 20 و 34 را انتخاب کرد عدد چهارم و پنجم دیگه این اعداد نباشند.

ممنون میشم اگه کمکم کنید !

Mbt925
یک شنبه 06 خرداد 1386, 19:22 عصر
خوب شما اعدادی که هر بار تولید می کنید رو توی یه آرایه یا رشته یا ... ذخیره می کنید و هر بار که یه عدد جدید تولید کردید ، اول اون عدد رو توی اعداد قبلی جستجو می کنین، اگه تکراری بود انقدر این کارو تکرار می کنین تا تکراری نباشه.


انتخاب آرایه یا رشته یا هر چیز دیگه که برای ذخیره ی اعداد استفاده میکنید، بستگی به راحتیتون داره .(البته در این سطح) ، چون قراره هر بار توش جستجو انجام بدین.

h_sadeghynejad
یک شنبه 06 خرداد 1386, 19:46 عصر
همونطور که جناب Mbt925 (http://barnamenevis.org/forum/member.php?u=34702) گفتند باید برای جلوگیری از تکراری بودن مقادیر رو نگه داری و بعد توی اونها سرچ کنی که تکراری نباشن و اما برای پیدا کردن باید از تابع Rand استفاده کنی
به این شکل:



dim a as integer
a=rand()*30
a=a+10


که یک عدد تصادفی از یک تا 30 پیدا میکه به اضافه ده میکنه که میشه یه عدد تصادفی از ده تا چهل
موفق باشی

hadi2345
یک شنبه 06 خرداد 1386, 21:13 عصر
با سلام ...


http://barnamenevis.org/forum/showthread.php?t=55648&highlight=%CA%D5%C7%CF%DD%26%231740%3B

__siavash__
یک شنبه 06 خرداد 1386, 23:42 عصر
یه لیست باکس و یه کامند باتن به فرمت اضافه کن بعد اینا رو کپی کن
یه جورایی جواب میده اما باید یه خورده دستکاری بشن
(یه خورده عجله ای نوشتم آخه فردا امتحان دارم)


Option Explicit
Dim B() As Integer
Dim a As Integer
Dim i As Integer

Private Sub Command1_Click()
Call Random
Call IsDbl(a)
ReDim Preserve B(i)
B(i) = a
List1.AddItem a
i = i + 1
End Sub

Public Function Random() As Integer
a = Int((6 * Rnd) + 1)
End Function

Public Function IsDbl(ByVal a As Integer) As Boolean
ReDim Preserve B(i)
For i = 0 To UBound(B)
If B(i) <> a Then
IsDbl = False
Else
MsgBox "تکراری بود"
IsDbl = True
End If
Next
End Function

تو تابع Random یه عدد بین 1 تا 6 انتخاب میشه که زودتر به عدد تکراری برسی!
برای اعداد بین 10 تا 40 که طبق بالا دوستمون توضیح دادن


Dim a As Integer
a = Int((30 * Rnd) + 1)
a = a + 10

senator_aka
دوشنبه 07 خرداد 1386, 00:06 صبح
خیلی خیلی از لطف شما ممنونم .

من واقعا خوشحالم که چنین انجمن هایی هست که افرادی مثل شما دوستان خوبم به افرادی مثل من کمک می کنند.

بازهم ممنونم اما چیزی که می خوام بگم چیزی از ارزش کار شما دوستان و لطفی که به من کردید کم نمی کنه !!

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

منظور من از بیان این سوال استفاده از تابعی یا چیزی مثل آن بود که فکر کنم وجود نداشته باشد.(هر چند که ما خودمان هم باید یه ذره کارکنیم و مغزمان را به کار بیاندازیم به جای اینکه فقط دنبال تابع یا ...)

باز هم از لطف شما دوستان سپاسگذارم و امید وارم همیشه در پناه حق پیروز و موفق باشید

Mbt925
دوشنبه 07 خرداد 1386, 12:40 عصر
اگر هم تابع آماده ای برای این کار وجود داشته باشه ، فکر نکنم سرعتش زیاد فرقی بکنه ، چون اونم باید همین الگوریتم رو پیاده سازی کنه.

Mbt925
سه شنبه 08 خرداد 1386, 10:21 صبح
اینم تابع آماده برای ایجاد اعداد تصادفی غیرتکراری
یه Sample میذارم که کاملا روشن و واضحه.
اگه مشکلی بود بگین :