با سلام
دوستان فرأيندتوليداعدادتصادفي به جه شكله؟
وأيا وقتي در وي بي ار Randomize و Rnd براي توليد اين اعداد استفاده ميكنيم ميشه مستقيما
تضمين كرد كه هيج عدد تصادفي تكراري توليدنميشه يا خير؟
باتشكر
نه كه تضميني نيست كه عدد تكراري نياد ...
ممكنه 100 بار اجرا كني اعداد تكراري نباشه ولي 3 بار اجرا كني هر 3 بار تكراري باشه
تصادفيه ديگه !!! :arrow:
تاييد ميشه :!:
بعضي وقتها اين راندوم حال ادمو ميگيره
تاييد نميشه
نقل قول: ميشه مستقيما تضمين كرد كه هيج عدد تصادفي تكراري توليدنميشه يا خير؟
اگه 11 عدد تصادفي صحيح بين يك تا 10 توليد كني حتما يكي تكراري خواهد بود و حتي هر 11 عدد هم مي توانند برابر باشند
و اما روش تا اونجا كه من مي دونم از روي تايمر اين عدد توليد ميشد و اگه از اون دستور Randomize استفاده نكني اين اعداد براي اجراي دوم با اجراي اول برابر خواهند بود (البته تو داس ويندوز رو نمي دونم)
نبايد هم تضميني باشه !!
كامپيوتر اعداد تصادفي رو از روي ساعت كامپيوتر درست مي كنه !
حالا اگه از كلمه Randomize استفاده كني متفاوت ميشه اما تضميني نيست :roll:
اين مطلب رو تر msdn يافتم ولي معناي اون رو متوجه نميشم لطفا كممممممكككككككك:
Note To repeat sequences of random numbers, call Rnd with a negative argument
immediately before using Randomize with a numeric argument.
Using Randomize with the same value for number does not repeat the previous sequence.
دوست عزيز ترجمه اين مطالب اينه :
توجه داشته باشيد براي تكرار مراتبي از اعداد تصادفي ؛ تابع Rnd رو با يك آرگومان منفي بلافاصله و قبل از تابع Randomize با آرگومان عددي ؛ صدا بزنيد !
استفاده از تابع Randomize با مقدار مشابه به عنوان آرگومان ؛ مراتب قبلي توليد اعدد تصادفي را تكرار نخواهد كرد . :roll:
حالا معناي اين يعني چي :
اين يعني اگه بخواي يه عدد تصادفي رو به كرات استفاده كني و همچنين چند تا عدد تصادفي ديگه هم در كنار اون داشته باشي ميتوني با تابع Rnd و آرگومان منفي اين كار رو انجام بدي :
منظورم اينه كه اگه تابع (Rnd(-1 رو صدا بزني و اين تابع يه مقدار تصادفي براي شما ايجاد كنه و شما (Rnd(-2 بعد از اون صدا بزني و اين تابع هم يه عدد تصادفي ديگه رو براي شما ايجاد كنه ؛ اگر دوباره بخواي مقدار عدد تصادفي اي كه در تابع (Rnd(-1 بدست آوردي رو دوباره بگيري كافيه كه اين تابع رو دوباره صدا بزني ( البته با همون آرگومان منفي اش ) . خواهي ديد كه مقدارش تغيير نمي كنه و در نتيجه مراتب توليد عدد تصادفي شما دوباره تكرار ميشه !
كد زير رو امتحان كن تاببيني خط اول و خط آخرش يه مقدار رو توليد خواهد كرد :
کد:
MsgBox Str(Rnd(-1))
MsgBox Str(Rnd(-2))
MsgBox Str(Rnd(-1))
حالا اگه از آرگومان منفي استفاده نكني مقادير شما تكراري نخواهد بود :
کد:
MsgBox Str(Rnd(1))
MsgBox Str(Rnd(-2))
MsgBox Str(Rnd(-1))
در آخر هم ؛از اين متن ميشه فهميد كه استفاده از تابع Randomize باعث ميشه كه مرتب اعداد تصادفي شما كه يكسان نباشند به شرطي كه از آرگومان خاصي براي تابع Rnd استفاده نشه !
قربانت ممد جان ممنون که واسه ما انقدر به خودت زحمت میدی
من دارم روی یه پروژه کار میکنم که کلا سرو کارش با رندوم و رندوم بازاره و کار بسیار جالبی هم هست
تولید اعداد تصادفی و کیفیتو چند و چون اونا مستقیما روی کارم اثر میذاره
برای مشکل تکراری بودنشون میشه دستی چکش کرد مثلا من براش تابع زیر رو نوشتم
اونقدر عدد تولید بشه تا به یه عدد غیر تکراری برسیم
البته اگه حداقل دیگه تعداد و محدوده برابر باشند
کد:
Public Function Create_Rnd(RecNum As Integer, qNum As Integer) As String
Dim arr() As Integer
Dim I As Integer
Dim J As Integer
Dim s As String
Dim C As Integer
ReDim arr(qNum)
For I = 1 To qNum
GiveAnother:
C = 0
Randomize
arr(I) = Int(RecNum * Rnd + 1)
For J = 1 To I
If arr(I) = arr(J) Then
C = C + 1
If C > 1 Then
GoTo GiveAnother
End If
End If
Next J
Next I
For I = 1 To qNum - 1
s = s & Str(arr(I)) & ","
Next I
s = s & Str(arr(qNum))
Create_Rnd = s
End Function
عزيزم من كاري نكردم :oops:
:idea: نبايد كلا با وجود تابع Randomize اعداد تكراري بشن اما اينو هم نبايد نديده گرفت كه اگه سر و كارمون با شانس و احتمالات باشه خاصيت تكرار هم ميتونه وجود داشته حالا اگه احتمال وقوع اون 1 در ميليون باشه !
دقيقا مثل پرتاب 30 تا سكه كه مي تونن 30 تاشون شير يا خط بيان با وجود اينكه احتمالش 1 در چند هزاره !! :?
همچنين من شنيدم كه ايجاد عدد تصادفي واقعي براي كامپيوتر هاي فعلي امكان پذير نيست چون كامپيوتر يه وسيله الكترونيكيه و همه كاراش رو يه اصول از پيش تعيين شده ميره جلو پس 100 درصد توليد اعداد تصادفي هم بايد يه قاعده خاص داشته باشه . طراحان ميگن كه ما از ميلي ثانيه هاي موجود در ساعت كامپيوتر براي ساخت اعداد تصادفي استفاده مي كنيم ! :roll: چطورش رو خدا مي دونه !! 8O
MyValue = CInt(Int((6 * Rnd()) + 1)) ' Generate random value between 1 and 6
البته اگه جاي 6 را با يك عدد ديگري عوض كنيد آنوقت عددي تصادفي بين 1 و آن عدد توليد خواهد شد
منبع : راهنماي وي بي دات نت
اينم من قبلا نوشته بودم ، البته من اينو به خاطر شانس و ايناش نمي خواستم ، گفتم حالا بذارم شايد به كارت اومد (براي طول هاي بزرگتر از 1 طراحي شده ! ) :
کد:
Function RndNum(Lenght)
On Error Resume Next
If Lenght = 0 Then
MsgBox "Your Lenght must be biger than 0 !", vbExclamation, "Error!"
Exit Function
ElseIf Lenght = 1 Then
i = ""
For c = 1 To 20
Randomize
b = Int(Rnd(999999) * 999999) + 100000
i = i & b
Next
If Mid(i, (Len(b) / 2) - 1, 1) = 0 Then
RndNum = Mid(Mid(Int(Rnd(999999999999#) * 999999999999#) + 1000000000, (Len(b) / 2) - 1, 1) + 1, 1, 1)
Else
RndNum = Mid(i, (Len(b) / 2) - 1, 1)
End If
Else
i = ""
For c = 1 To Lenght
Randomize
b = Int(Rnd(9999) * 9999) + 1000
i = i & b
Next
RndNum = Left(i, Lenght)
End If
End Function