PDA

View Full Version : ایجاد عدد تصادفی بین دو بازه عددی



mohamad_karaj
چهارشنبه 13 فروردین 1393, 18:55 عصر
سلام و تبریک سال نو
چطور میشه با تابع rand اعداد تصادفی در دو بازه عددی تولید کرد؟
بین یک بازه عددی رو می دونم
rand.Next (n_min, n_max) 1
این عددی مثلا بین 0 تا 20 رو تولید می کنه
ولی اگه بشه می خوام بین 0 تا 20 و 50 تا 80 رو تولید کنه
چون این 4 تا عددی که تو مثال بالا گفتم (0 و 20 و 50 و 80) در برنامه تغییر می کنه گذاشتن شرط سخت میشه

PouriaParhami
چهارشنبه 13 فروردین 1393, 19:42 عصر
سلام این لینک ها رو نگاه کنید فکر می کنم کمکتون کنه.
http://msdn.microsoft.com/en-us/library/system.random.nextdouble.aspx
http://msdn.microsoft.com/en-us/library/2dx6wyd4(v=vs.110).aspx

mohamad_karaj
چهارشنبه 13 فروردین 1393, 19:59 عصر
ممنون
تو یکی از مثال ها به تعداد مشخص از یه بازه تولید می کرد بعد به یه تعداد دیگه از بازه دوم
یعنی مقدار مشخصه مثلا از هر بازه 10 تا عدد میده
عرض بنده این بود که انتخاب از بازه ها رندوم باشه

rahnema1
پنج شنبه 14 فروردین 1393, 06:55 صبح
سلام،این برنامه 10 تا عدد تصادفی در دو تا بازه انتخاب می کنه

Dim rnd As New Random()
Dim arrRange ={{0 ,21},
{50,81}}
Dim randarr As IEnumerable(Of Integer)=Enumerable.Range(0,10).Select(Function(y As Integer) ((Function(x As Integer) rnd.Next(arrRange(x, 0),arrRange(x, 1))) (rnd.Next(2))))

mohamad_karaj
پنج شنبه 14 فروردین 1393, 10:22 صبح
ممنون ولی خروجیشو با چی بگیرم
کدوم دستور عددو بر میگردونه

rahnema1
پنج شنبه 14 فروردین 1393, 11:19 صبح
با استفاده از متد ToArray میشه تبدیل به آرایه کرد
یک نکته اوش روش قبلی که گذاشتم طول بازه ها را در نظر نمی گیره مثلا اگه یه بازه 1000 تا عضو داشته باشه و یک بازه هم 100 تا عضو داشته باشه و بخواهیم مثلا 10 عدد تصادفی انتخاب کنیم به طور متوسط از هر بازه 5 تا انتخاب می کنه
اما این یکی طول بازه را هم در نظر می گیره نتیجه عم در یک آرایه با ده عضو به نام randarr2 ذخیره میشه
همچنین امکان این وجود داره تا به انتهای لیست بازه های دیگری هم اضافه بشه

Dim rnd As New Random()
Dim lst As New List(Of List(Of Integer))() From { _
New List(Of Integer)() From {0,20,0}, _
New List(Of Integer)() From {50,80,0} _
}
Dim r As Integer=lst(0)(0)
For Each item As List(Of Integer) In lst
r+=item(1)-item(0)+1
item(2)=r
Next
Dim randarr2 As Integer()= Enumerable.Range(0,10).Select(Function(y As Integer) _
(Function(r1 As Integer) ((Function(elem As List(Of Integer)) 1+ elem(1)- (elem(2)- r1)) (lst.Where(Function(x) x(2) > r1)(0))))(rnd.Next(lst(0)(0) ,r))).ToArray()

mohamad_karaj
پنج شنبه 14 فروردین 1393, 13:56 عصر
ممنون
تو وی بی . نت جواب نداد
مرسی که وقت گذاشتید

rahnema1
پنج شنبه 14 فروردین 1393, 14:04 عصر
یادتون نره در ابتدای فایل این را بذارید
Imports System.Linq
Imports System.Collections.Generic