سلام عليکم
من نياز دارم که يک عدد تصادفي توليد بشه بين يک تا دوهزار
من با تابع Rnd امتحان کردم ولي جواب نداد يعني اون عددي رو که ميخوام توليد کنه توليد نميکنه
حالا اساتيدان و دوستان گرامي چگونه اين کار رو انجام بدم؟لطفا به ساده ترين صورت توضيح دهيد.
سلام عليکم
من نياز دارم که يک عدد تصادفي توليد بشه بين يک تا دوهزار
من با تابع Rnd امتحان کردم ولي جواب نداد يعني اون عددي رو که ميخوام توليد کنه توليد نميکنه
حالا اساتيدان و دوستان گرامي چگونه اين کار رو انجام بدم؟لطفا به ساده ترين صورت توضيح دهيد.
با سلام
ببین به کارت میاد:
a = Int(Rnd * 2000)
Text1.Text = a
آره درسته
فقط:
ميخوام چک کنه ببينه اگه تو تکست باکس1 قبلا يه عددي بوده ديگه اون رو توليد نکنه،بانک اطلاعاتي که ميخوام درست کنم عدد رو ثبت ميکنه
حالا اين رو چه جوري اعمال کنم؟تابعي براي چک کردن اعداد (در ديتاگريد)وجود داره؟
و اين کد شما عدد 0 رو هم توليد ميکنه من نميخوام عدد 0 توليد بشه!
ممنون
دوستان
حالا که دارم ميبينم من ميخوام کدهايي رو براي يک فورم توليد بکنه
ميشه کاري کرد که از يک شروع به توليد کدها بکنه مثلا تو يک تايمر بنويسيم همچين چيزيText1=text1+1
که اگه اولين فورم من عدد يک رو تو ديتاگريد تو بانک اکسس ثبت کرد بعد که خواستم يه فورم ديگه چاپ کنم اون بشه 2 و بعدي 3 و به همين صورت ادامه بده
سپاس گذارم
و اين کد شما عدد 0 رو هم توليد ميکنه من نميخوام عدد 0 توليد بشه!a = Int(Rnd * 1999) + 1
Text1.Text = a
این مورد رو دقیق اطلاع ندارم بزار دوستانی که بلدن جواب بدن . اما فکر نکنم امکان پذیر باشه ...ميخوام چک کنه ببينه اگه تو تکست باکس1 قبلا يه عددي بوده ديگه اون رو توليد نکنه،بانک اطلاعاتي که ميخوام درست کنم عدد رو ثبت ميکنه
چرا امکانش هست فقط يه کم سخت ميشه که بايد امتحان کنم.اگه دوستاني که همچين چيزي که ميخوام بشه (پست چهارم)بتونن انجام بدن لطفا اينجا مطرح کنند.این مورد رو دقیق اطلاع ندارم بزار دوستانی که بلدن جواب بدن . اما فکر نکنم امکان پذیر باشه ...
از شما و بقيه ي دوستان ممنونم
درمورد بانک اطلاعاتی نمیدونم. اما میشه اون عدد رو که توی تکست باکس هست توی متغیری ذخیره کنی و بعد شرط بذاری که اگه جواب تابع، عدد ذخیره شده در اون متغیر بود، تابع یه بار دیگه اجرا بشه. در این صورت تابع هروقت عددی که قبلا در تکست باکس بوده رو تولید کرد یه بار دیگه اجرا میشه و یه عدد دیگه تولید میشه.ميخوام چک کنه ببينه اگه تو تکست باکس1 قبلا يه عددي بوده ديگه اون رو توليد نکنه،بانک اطلاعاتي که ميخوام درست کنم عدد رو ثبت ميکنه
نمیدونم بدردتون میخوره یا نه.
ممکنه سورس بزارید . ممنوندرمورد بانک اطلاعاتی نمیدونم. اما میشه اون عدد رو که توی تکست باکس هست توی متغیری ذخیره کنی و بعد شرط بذاری که اگه جواب تابع، عدد ذخیره شده در اون متغیر بود، تابع یه بار دیگه اجرا بشه. در این صورت تابع هروقت عددی که قبلا در تکست باکس بوده رو تولید کرد یه بار دیگه اجرا میشه و یه عدد دیگه تولید میشه.
نمیدونم بدردتون میخوره یا نه.
adad= text1.text
if Int(Rnd * 1999)+1= adad then
labal1.caption= Int(Rnd * 1999)+1
end if
راستش ویژوال بیسیکم نصب نیس و اگه اشتباه از نظر syntax و... داره اصلاح کنین.و بهم بگین.
adad متغیری که مقدار تکست باکسو ذخیره میکنه.بعد نوشتم که اگه جواب تابع برابر با اون عدد بود، مثلا در کپشن یه لیبلی مقدار جدید تابع نمایش داده بشه. نمیدونم این کد کار میکنه یا نه. امتحان کنید؟!
ببینید اینچیزی که دوستمون در مورد تولید نکردن عدد صفر کفتن درسته اما اصولی نیست چون یکی به عدد تولید شده اظافه میشه و اگه خود 2000 تولید بشه میشه 2001 اما فرمول درست چیه!؟
برای تولید یک عدد در یک بازه با تابع Rnd چه در VB6 و چه در C++ شما باید از این فرمول استفاده کنید:
Dim a As Integer
a = Rnd * (High - Low + 1) + Low
بطور مثال برای 1 تال 2000:
a = Rnd * (2000 - 1 + 1) + 1
اما برای سوال دومتون من برای بازیMinsweeper که نیاز داشتم 10 عدد تصادفی غیر تکراری تولید کنم از کد زیر استفاده میکردم:
Randomize Timer
p = 10
While p > 0
bomb(p) = Rnd * (81 - 1 + 1) + 1
For l = 1 To 10
If bomb(p) = bomb(l) Then
bomb(p) = Rnd * (81 - 1 + 1) + 1
End If
Next l
p = p - 1
Wend
اما شما چون نیاز ندارید اعداد تولید شده رو نگه دارید ، میتونید ساده ترش کنید و با یک شرط بگید هر موقع عدد تولید شده با عدد تو Textbox مساوی بود دوباره یک عدد دیگه تولید بشه تا زمانی که عدد تکراری نباشه...
موفق باشید.../
سلام ميشه هر دو کدي که گذاشتين رو به طور ساده توضيح بديد
وDim a As Integer
a = Rnd * (High - Low + 1) + Low
Randomize Timer
p = 10
While p > 0
bomb(p) = Rnd * (81 - 1 + 1) + 1
For l = 1 To 10
If bomb(p) = bomb(l) Then
bomb(p) = Rnd * (81 - 1 + 1) + 1
End If
Next l
p = p - 1
Wendچرا من نياز دارم که اونهارو نگه دارم و من براي ثبت فاکتور ها ميخوام تو ديتابيسم ثبت بشه براي هر فاکتوري که ثبت ميکنم.و نميخوام که همينجوري عدد توليد بشه براي کدها.ميخوام هر موقع فاکتور1 رو ثبت کردم توي کدکالا به صورت اتوماتيک بنويسه يک و براي فاکتور دوم 2 و ...اما شما چون نیاز ندارید اعداد تولید شده رو نگه دارید
ممنون
چشم ، کد اول:سلام ميشه هر دو کدي که گذاشتين رو به طور ساده توضيح بديد
برای تولید اعداد تصادفی در یک بازه خاص باید از فرمولی که گزاشتم استفاده بشه ، به طور مثال شما می خوای بین 10 تا 100 اعداد تصادفی تولید کنید ، اگه شما بنویسید Rnd *100 اونموقع اعدادی که تولید میشه ممکنه که 0 تا 100 هم جزوشن باشه پس شما نیاز دارید از فرمولی استفاده کنید که فقط بین 10 تا 100 اعداد تصادفی تولید کنه و اون فرمول اینه:
y=(High-Low+1)+low اما High و Low چین!؟ Low بازه پایین ماست یعنی 10 و High بازه نهایی ما یعنی 100 با این رابطه و با استفاده از تابع Rnd میتونید اعدادی تولید کنید که همیشه بین 10 تا 100 باشند به اینصورت:
Dim a As Integer
a = Rnd * (100 - 10 + 1) + 10
اما کد دوم :
من تو کد دوم باید اعداد تصادفی رو برای مشخص کردن Bomb ها در بازی MinSweeper تولید میکردم که هرگز تکراری نباشن چون نمیشه یک خونه دوبار توش Bomb باشه و اونموقع دیگه تعداد خونه های bomb ما 10 نیست 9 یا حتی ممکن بود کمتر باشه ،اما روش کار به چه صورت بود!؟
یک آرایه داریم به اسم bomb ، یک متغیر داریم به اسم p که تعداد اعداد تصادفی است که باید تولید بشه که اینجا 10 تاست ، یک حلقه While داریم که تا زمانی که p از 0 بزرگتر در حال انجام هست ، هر بار 1 عدد تولید میشه بعد این عدد رو تو آرایه با یک حلقه For جستجو میکنیم اگه باهاش مساوی بود پس باید یک عدد دیگه تولید بشه در اینصورت یک مقدار از P کم میشه و این مقدار در آرایه ذخیره میشه ...
اگه سوالی بود در خدمتم...
با سلام
فقط شرمنده یه سوال
Randomize Timer
یعنی چی؟
سلام دوست عزیز .
با اجازه ms2222 عزیز بنده جواب میدم .
نوشتن تابع Randomize قبل از تابع RND باعث میشه که اعداد راندوم بدست اومده در هر بار اجرای کد یکسان نباشند .
اگر از این کد استفاده نکنید ، نتیجه اجرای کد شما همیشه به صورت یکسان خواهد بود :
1و4و8و10و13و100و95و1230و....
تابع Timer هم مدت زمان بالا اومدن ویندوز رو بر حسب میلی ثانیه بر میگردونه که نوشتن و یا ننوشتن این تابع بعد از Randomize تفاوتی نداره .
موفق باشید .
مچکرم . خیلی ممنون
یک مقداریش رو متوجه شدم . اما یکمیش مونده . ممنون میشم جواب بدید تا یاد بگیرم
نوشتن تابع Randomize قبل از تابع RND باعث میشه که اعداد راندوم بدست اومده در هر بار اجرای کد یکسان نباشند .Randomize
a = Int(Rnd * 10)
Text1.Text = a
پس چرا کد بالا باز هم اعداد یکسان تولید میکنه؟
سلام .
اعداد تولید شده یکسان نیست !
شما این کد هایی کد قرار دادید رو داخل یک Button بریزید و چند بار بر روی Button کلیک کنید و اعداد تولید شده رو به خاطر بسپارید ، سپس برنامه رو ببندید و دوباره اجرا کنید و مجددا چند بار بر روی Button کلیک کنید تا متوجه بشید که اعدادی که تولید می شوند از روال قبلی پیروی نمی کنند !
موفق باشید .
دوست عزیز
اگر درست نوشته باشی اعداد بصورت تصادفی ایجاد خواهند شد
بسیار ممنونم
اقای butterfly8528 حالا منظورتون رو کامل متوجه شدم. دست همگی درد نکنه