نمايش تصادفي چند نوشته ( ASP Random )

سلام
من چند تا آبجکت دارم :
strAval : aval
strAvalScore : 1

strDovom : Dovom
strDovomScore : 2

strSevom : Sevom
strSevomScore : 3

میخوام این ها رو جوری رندم نشون بدم که امتیازهاشون هم توی نمایششون تاثیر داشته باشه.
یعنی اونی که اتیازش 3 هست ، احتمال اینکه نشون داده بشه بیشتر باشه.
من نمیخوام آبجکت ها حتماً به همین صورت باشه ، من فقط یه مثال زدم که منظورم رو متوجه بشید.
ممنون.
 

mehradmoein

Member
با سلام،
شما بايد از آبجكت content rotator استفاده كنيد.
كد زير را وارد كنيد:
-----------------------------------------------
set obj = server.createobject("mswc.contentrotaor")

response.write obj.choosecontent("content.txt")
-------------------------------------------
بعد يك فايل به نام content.txt ايجاد كنيد .
----------------------------------------------------------
content.txt:
%%#3//
your text
%%#2//
your text
-----------------------------------------------------
هر چه عدد بزرگتر باشه احتمال نمايشش زياد تر هست
 
خوب اگر ركورد هاي من روي فايل تكست نباشند چي ؟
مثلاْ روي ديتابيس باشن يا توي خود همون صفحه اي اس پي باشند ؟
 

AliReza26

Active Member
مي توني بين اعداد يك تا شش يك عدد را راندوم انتخاب كني و توي يك if ساده بيايي و بگي :

اگر عدد 1 - 3 - 5 بود امتياز 3 را انتخاب كنه....
اگر عدد 2 - 4 بود امتبياز 2 را انتخاب بشه.....
اگر هم عدد7 بود امتياز 1 انتخاب بشه.....

به اين ترتيب امكان انتخاب شدن امتاز سه از همه بيشتر و امكان انتخاب امتياز 1 از همه كمتر مي باشد.....
 
بابا اين چه ايده ايه آخه ؟
من بحثم يكي دو تا نيست من دارم راجع به 500 تا ركورد حذف ميزنم كه هر كدوم يك امتيزي دارن و بايد بطور رندوم با در نظر گرفتن امتيازهاشون سه تا از اين ركورد ها بيرون كشيده بشه ( قرعه كشي )
 

AliReza26

Active Member
Mostafa_sh گفت:
بابا اين چه ايده ايه آخه ؟
من بحثم يكي دو تا نيست من دارم راجع به 500 تا ركورد حذف ميزنم كه هر كدوم يك امتيزي دارن و بايد بطور رندوم با در نظر گرفتن امتيازهاشون سه تا از اين ركورد ها بيرون كشيده بشه ( قرعه كشي )

خوب استاد اشاره نكردي كه ركوردهات زياده....
 

AliReza26

Active Member
اول توي متغيير total كل فيلد هات را وارد كن.....
بعد عدد تصادفي بين 1 و تعداد كل فيلدهات توي متغيير iRnd ذخير ميشه....

کد:
<%
randomize
dim total,iRnd
total = 500

iRnd =  cint((total - 1) * rnd + 1)

%>

بعد به را حتي ميتوني ID فيلدي كه مساوي متغيير iRnd است را نمايش بدي...



يه را ساده براي اينكه فيلدي شانس بيشتري براي نمايش داشته باشه اين كه اون فيلد بيشتر از يك شماره شناسايي باشه (ميتوني به تعداد امتيازي كه آبجكتت داره شماره شناسايي بهش بدي)....

مثلا اگه آبجكت با شماره شناسايي 259 از 3 امتياز 2 را داشت بهش شماره 501 را هم بده....

در اين صورت شانس اون فيلد براي انتخاب شدن 2 برابر بقيه فيلد ها ميشه....

نكته : منظورم از اضافه كردن يك شماره شناسايي اضافه كردن يك ركورد توي پايگاه داده ات نيست بلكه منظورم اضافه كردن اون شماره تو برنامه ات است......
 
منظور شما رو در مورد امتيازها نفهميدم
ولي اگر بايد توي سورس كاري انجام بدم براي هر ركورد بايد بگم كه من نميدونم ركوردها چند تان و چند تا امتياز دارن و همه اطلاعات توي ديتابيس هست.
ممنون
 

AliReza26

Active Member
خوب ديگه....

ببين شما راحت ميتوني هر ركورد را توي يك آرايه دو بعدي بزاري....

اولين بعد 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


ببخشيد اگر جمله بنديم بد شد.....
موفق باشي....
 

جدیدترین ارسال ها

بالا