PDA

View Full Version : سوال: تولید عدد Random



IamOverlord
دوشنبه 31 مرداد 1390, 20:06 عصر
سلام دوستان،
چه طوری می تونیم یه عدد Random از +بی نهایت تا -بی نهایت تولید کنیم؟ یعنی عدد Random مون به بازه ی خاصی محدود نشه. :متفکر:

shahabbasic
دوشنبه 31 مرداد 1390, 20:37 عصر
سلام دوستان،
چه طوری می تونیم یه عدد Random از +بی نهایت تا -بی نهایت تولید کنیم؟ یعنی عدد Random مون به بازه ی خاصی محدود نشه. :متفکر:
فکر نکنم چنین کاری بشه کرد چون بی نهایت بالاخره تا چقدر؟ خود بشر هم برای عددای خیلی خیلی بزرگ اسمی نداره چون بکارش نمیاد که بخواد براش اسم بذاره
تابع Rnd از یک محدوده تا یک محدوده میتونه تولید کنه

returnx
دوشنبه 31 مرداد 1390, 20:38 عصر
بیشتر این موضوع مربوط به ریاضی میشه تا برنامه نویسی...
تقریبا میشه به اینصورت عمل کرد:


Private Sub Command1_Click()
Dim r As Double
Randomize Timer
r = Rnd
Print r
End Sub
اما عدد هایی که تولید میشه اکثرا مثبت هست...

arenaw
دوشنبه 31 مرداد 1390, 21:44 عصر
خب میتونی یه rnd * 2 هم بذاری ، اگه 1 شد عدد قبلی رو + و اگه 2 شد منفی کنه

IamOverlord
دوشنبه 31 مرداد 1390, 22:29 عصر
اگه بخوایم یه عدد رو به طور اتفاقی هی کم و زیاد کنیم، این کار باز هم باید با یه حلقه ی For که به تعداد محدودی اجرا می شه انجام بشه تا بالاخره یه نتیجه ی خروجی داشته باشیم و محدوده ی عددمون از -بی نهایت تا +بی نهایت نمی شه.
ولی یه راه خیلی جالبی به دست آوردم!

r = (Int(Rnd * 2) * 2 - 1) * Tan(Rnd * Pi / 2)

اگه توجه کرده باشید، تانژانت 0 می شه 0 و تانژانت Pi / 2 می شه بی نهایت (البته این حرف از لحاظ ریاضی می شه گفت درست نیست چون تعریف نشده هست، ولی انگار که بی نهایته) و تانژانت اعداد بین این دو عدد می شه اعدادی بین 0 تا بی نهایت. به خاطر همین کد بالا درسته. ولی چون ما داریم با بی نهایت ور می ریم، همیشه یه جای کار می لنگه، خوب ما جواب دلخواه رو به دست آوردیم ولی چی رو از دست دادیم؟ شانس تولید اعداد نزدیک به صفر بیشتر از بقیه است. ولی به هر حال فهمیدم می شه این کار رو کرد.

shahabbasic
دوشنبه 31 مرداد 1390, 23:04 عصر
خب میتونی یه rnd * 2 هم بذاری ، اگه 1 شد عدد قبلی رو + و اگه 2 شد منفی کنه
یعنی شما نمیدونی هیچ وقت 2 نمیده؟؟؟؟ اگر بنویسی rnd*2 هیچ وقت 2 نمیده فقط 0 و 1 میده

IamOverlord
دوشنبه 31 مرداد 1390, 23:09 عصر
یعنی شما نمیدونی هیچ وقت 2 نمیده؟؟؟؟ اگر بنویسی rnd*2 هیچ وقت 2 نمیده فقط 0 و 1 میده

احتمالا منظورشون Int(Rnd * 2) + 1 بوده.

setroyd
سه شنبه 01 شهریور 1390, 00:40 صبح
این دیگه کاری نداره که خودت تست کن بهتر یاد میگیری سعی کن خودت تلاش کنی تا درک کنی .

setroyd
سه شنبه 01 شهریور 1390, 01:05 صبح
برای تولید اعداد منفی و مثبت rnd or -rnd استفاده کن که هم - و هم + تولید بشه یعنی مثل a=rnd or -rnd اینجوری عدد یا + میشه یا -

vbhamed
سه شنبه 01 شهریور 1390, 02:20 صبح
سلام

نوشتن اين برنامه زياد مشكل نيست، و حتما نبايد خودتون رو درگير محدوديتهاي يك تابع كنيد
يك ليست باكس رو صفحه بزاريد و كد زير رو بنويسيد
البته بي نهايت كه خب چيز تعريف نشده اي هست اما مي‌تونيد با متغير TedadArgham تعيين كنيد عددتون تا چند رقم باشه
مثبت و منفي هم ميده

Private Sub Form_Load()

Randomize Timer

Dim i%, j%, c%, s%, x$, TedadArgham%

TedadArgham = 30

For i = 0 To 200

c = Int(Rnd * TedadArgham) + 1

x = ""

For j = 1 To c
x = x & Int(Rnd * 10)
Next

While Left$(x, 1) = "0"
x = Mid$(x, 2)
Wend

If x = "" Then x = 0

c = Int(Rnd * 2) + 1
x = IIf(c = 1, "-", "") & x

List1.AddItem x

Next

End Sub