خوب ديگه....
ببين شما راحت ميتوني هر ركورد را توي يك آرايه دو بعدي بزاري....
اولين بعد ID ركورد و دوميش هم امتياز ركورد....
بعد واسه تعيين حد عددت(عددي كه از بين يك تا اين عدد يكي راندوم انتخاب ميشه) از راه زير استفاده كن :
کد:
حاصل جمع بعد دوم ركورد ها
حالا با فرمول زير يه عدد راندوم با توجه به فرمول بالا انتخاب ميشه :
کد:
randomize
dim total,iRnd
total = حاصل جمع بعد دوم ركورد ها
iRnd = cint((total - 1) * rnd + 1)
مثال :
خوب حالا فرض را بر اين ميگيريم كه تعداد كل ركوردهات 6 تا باشه(براي راحتي كار تعداد را پايين گرفتم) و متياز ها بصورت زير براي 6 امتياز ثبت شده (عدد اول آي دي ركورد است و عدد دوم هم امتياز ركوردت از 3):
(1,3)
(2,1)
(3,3)
(4,2)
(5,1)
(6,1)
خوب با تو جه به امتياز ها ركورد اول و ركورد سوم بايد شانسشون براي انتخاب در راندوم بيشتر از بقيه ركورد ها باشند .... خوب حالا با فرمولي كه دادم شروع به محاسبه ميكنم :
کد:
randomize
dim total,iRnd
total = حاصل جمع بعد دوم ركورد ها
iRnd = cint((total - 1) * rnd + 1)
خوب حالا total ما ميشه 11
فرض ميكنيم عدد راندوم (iRnd) هم 4 در اومده...
يه توضيح ديگه :
با الگوريتمي كه من دادم اگه عدد 1 تا 3 از راندوم انتخاب بشه ركورد اول نشون داده ميشه...
اگه عدد 4 از راندوم انتخاب بشه ركورد دوم نشون داده ميشه...
اگه عدد 5 تا 7 از راندوم انتخاب بشه ركورد سوم نشون داده ميشه...
اگه عدد 8 تا 9 از راندوم انتخاب بشه ركورد چهارم نشون داده ميشه...
اگه عدد 10 از راندوم انتخاب بشه ركورد پنجم نشون داده ميشه...
اگه عدد 11 از راندوم انتخاب بشه ركورد ششم نشون داده ميشه...
پس با توجه به الگوريتمي كه من دادم بايد فرمولي باشه كه اينو ثابت كنه ... اون راهش اينه:
2 - حالا از ركورد آخر مياييم پايين در حالي كه داريم محاسبه زير را انجام ميديم :
dim test
test برابر با total كه 11 در اومد - مقدار بعد دوم آخرين ركورد( كه تو مثال ما 1 بود)
در نتيجه test مقدار 10 را مي گيره....
کد:
if test = iRnd then
response.write(ركورد را)
else
test -= مقدار بعد دوم آخرين ركوردend if
ببخشيد اگر جمله بنديم بد شد.....
موفق باشي....