PDA

View Full Version : سوال: بهترین روش استفاده از rnd



butterfly8528
پنج شنبه 22 اسفند 1387, 14:41 عصر
سلام دوستان عزیز

من میخوام در هر اجرای برنامه ، یک عکس از بین 157 عکس به صورت کاملا شانسی در برنامه نمایش داده بشه .

من میخوام شانس نمایش برای تمام عکس ها کاملا یکسان باشه

به نظر شما بهترین روش چیه ؟

لطفا من رو راهنمایی کنید :خجالت:

azarsoft
پنج شنبه 22 اسفند 1387, 15:09 عصر
به نظر من بهتره یک عدد تصادفی بین 1 تا 157 رو هنگام اجرای برنامه ایجاد کنی و معادل اون عدد عکس مربوط را فراخوانی کنی
در این حالت شانس نمایش برای تمام تصاویر وجود دارد

به زبان ساده
---------------------------------------------------------
1- ابتدا تصاویر رو از 1 تا 157 نام گذاری کن
2- یک عدد تصادفی بین 1 تا 157 تولید کن
3- تصویر هم نام با عدد را فراخوانی کن

butterfly8528
پنج شنبه 22 اسفند 1387, 15:40 عصر
دوست عزیز خیلی ممنون از جوابتون

اگه میشه کدش رو هم بزارید :بامزه:

azarsoft
پنج شنبه 22 اسفند 1387, 16:35 عصر
D=int(rnd*(157-1+1)+1)

با این خط می تونی یک عدد تصادفی بین 1 تا 157 ایجاد کنی

فکر کنم با این کارت راه بیفته ، اگه نشد بگو یک نمونه برات می نویسم

butterfly8528
پنج شنبه 22 اسفند 1387, 19:04 عصر
azarsoft عزیز من خودم این مدلیهاشو بلدم.

ولی این جوریش بدرد نمیخوره

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

ولی من میخوام هر دفعه یک عدد شانسی انتخاب شود نه فقط 111

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

اگر کد را در روال یک command قرا بدی با هر کلیک نتیجه همیشه به صورت زیر میشه :

کلیک اول : 111

کلیک دوم: 84

کلیک سوم: 91

کلیک چهارم : 46

کلیک پنجم : 48

.
.
.

وبه همین صورت

این نحوه امتحانش :


Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim D As Integer
D = Int(Rnd * (157 - 1 + 1) + 1)
Print D
End Sub


لطفا هرکی میتونه کمک کنههههههههه

xxxxx_xxxxx
پنج شنبه 22 اسفند 1387, 19:49 عصر
اول روال تون بنويسيد Randomize


Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Randomize
Dim D As Integer
D = Int(Rnd * (157 - 1 + 1) + 1)
Print D
End Sub

ببخشيد اين كار براي چيه؟


(157-1+1)

!!!!!
خود عدد 157 كافيه فقط آخرش بايد با 1 جمع بشه.

butterfly8528
پنج شنبه 22 اسفند 1387, 21:32 عصر
xxxxx_xxxxx عزیز دستت درد نکنه :خجالت:

هر وقت تو تاپیک هام به سوال هام جواب دادی کارم حل شده :تشویق:


ببخشيد اين كار براي چيه؟


این همون کدیه که azarsoft جان لطف کردن .


راستی واقعا کاره Randomize کاملا شانسیه ؟ و برحسب شانس عدد انتخاب میشه ؟

یا بر اساس زمان بندی و فرایند های vb ? :متفکر:

xxxxx_xxxxx
پنج شنبه 22 اسفند 1387, 22:51 عصر
تابع Randomize يك پارامتر هم داره كه مي تونه مقداردهي نشه.
من بعضي وقتها ديدم كه بهش مقدار Timer رو ميدند و Timer حاوي عددي هست كه نشون دهنده زمان شروع به كار سيستم تا بحال هست و اين مقدار بر حسب ميلي ثانيه هست يعني در هرلحظه متفاوت هست
تابع Randomize هم نياز به يك مقداري داره كه در هرلحظه متفاوت باشه و اين درحالي هست كه اگر بهش مقدار ندي خودش به طور پيش فرض همان مقدار Timer را ميگيره:چشمک:

ساير دوستان اگر درمورد اين تابع (Randomize) بيشتر مي دونند بفرمايند تا ماهم بدونيم. و اگر من اشتباه مي كنم باز هم لطفاً صحيح ان را بگين تا متوجه بشيم.

butterfly8528
جمعه 23 اسفند 1387, 00:25 صبح
xxxxx_xxxxx عزیز بسیار ممنون


من بعضي وقتها ديدم كه بهش مقدار Timer رو ميدند و Timer حاوي عددي هست كه نشون دهنده زمان شروع به كار سيستم تا بحال هست و اين مقدار بر حسب ميلي ثانيه هست يعني در هرلحظه متفاوت هست


میشه یک مثل هم برا ما بزنید :بامزه:

xxxxx_xxxxx
جمعه 23 اسفند 1387, 00:51 صبح
اگه منظورتون تايمر هست شما مقدارشو ببينيد كه درهرلحظه متفاوت هست:


MsgBox Timer
اما اگه منظورتون نشون دادن اون حالتي هست كه گفتم به نمونه كد زير توجه كنيد:


Private Sub Form_Activate()
Randomize 1
For i = 1 To 5
Print Int(Rnd * 10) + 1
Next i
Print
Randomize 100
For i = 1 To 5
Print Int(Rnd * 10) + 1
Next i
Print
Me.ForeColor = vbRed
Randomize Timer
For i = 1 To 5
Print Int(Rnd * 10) + 1
Next i
End Sub
اينها رو تو فرم كپي كنيد و فرمتون رو يكم كشيده كنيد.
مي بينيد كه در اجراهاي متفاوت اعدادي كه در دو حلقه اول توليد ميشن يكسان هستند، به خاطر اين كه عددي كه به Randomize داده شده يك عدد ثابت هست. حالا هرعددي كه مي خواد باشه.
ولي اعدادي كه قرمز چاپ ميشن در هر اجرا متفاوت هستند چون مقداري كه به Randomize داده شده در هر لحظه متفاوت هست.

البته منظورم اين نيست كه اعدادي كه در دو حلقه اول توليد ميشن يكسان هستند. بلكه اعداد حلقه اول در اجراهاي متفاوت يكسان است و حلقه دوم هم براي خودش در اجراهاي متفاوت اعدادش يكسان هست. فقط براي اين كه نشون بدم اون عدد ثابت هرچيزي مي تونه باشه دو تا حلقه مثال زدم.