واضح آرشیو وب فارسی:سایت ریسک: t=19175">نمايش تصادفي چند نوشته ( ASP Random ) Mostafa_sh 31 شهريور 1383, 13:37سلام من چند تا آبجکت دارم : strAval : aval strAvalScore : 1 strDovom : Dovom strDovomScore : 2 strSevom : Sevom strSevomScore : 3 میخوام این ها رو جوری رندم نشون بدم که امتیازهاشون هم توی نمایششون تاثیر داشته باشه. یعنی اونی که اتیازش 3 هست ، احتمال اینکه نشون داده بشه بیشتر باشه. من نمیخوام آبجکت ها حتماً به همین صورت باشه ، من فقط یه مثال زدم که منظورم رو متوجه بشید. ممنون. mehradmoein 31 شهريور 1383, 15:33با سلام، شما بايد از آبجكت content rotator استفاده كنيد. كد زير را وارد كنيد: ----------------------------------------------- set obj = server.createobject("mswc.contentrotaor") response.write obj.choosecontent("content.txt") ------------------------------------------- بعد يك فايل به نام content.txt ايجاد كنيد . ---------------------------------------------------------- content.txt: %%#3// your text %%#2// your text ----------------------------------------------------- هر چه عدد بزرگتر باشه احتمال نمايشش زياد تر هست Mostafa_sh 31 شهريور 1383, 16:30خوب اگر ركورد هاي من روي فايل تكست نباشند چي ؟ مثلاْ روي ديتابيس باشن يا توي خود همون صفحه اي اس پي باشند ؟ AliReza 26 03 مهر 1383, 04:03مي توني بين اعداد يك تا شش يك عدد را راندوم انتخاب كني و توي يك if ساده بيايي و بگي : اگر عدد 1 - 3 - 5 بود امتياز 3 را انتخاب كنه.... اگر عدد 2 - 4 بود امتبياز 2 را انتخاب بشه..... اگر هم عدد7 بود امتياز 1 انتخاب بشه..... به اين ترتيب امكان انتخاب شدن امتاز سه از همه بيشتر و امكان انتخاب امتياز 1 از همه كمتر مي باشد..... Mostafa_sh 04 مهر 1383, 17:42بابا اين چه ايده ايه آخه ؟ من بحثم يكي دو تا نيست من دارم راجع به 500 تا ركورد حذف ميزنم كه هر كدوم يك امتيزي دارن و بايد بطور رندوم با در نظر گرفتن امتيازهاشون سه تا از اين ركورد ها بيرون كشيده بشه ( قرعه كشي ) AliReza 26 04 مهر 1383, 18:03بابا اين چه ايده ايه آخه ؟ من بحثم يكي دو تا نيست من دارم راجع به 500 تا ركورد حذف ميزنم كه هر كدوم يك امتيزي دارن و بايد بطور رندوم با در نظر گرفتن امتيازهاشون سه تا از اين ركورد ها بيرون كشيده بشه ( قرعه كشي ) خوب استاد اشاره نكردي كه ركوردهات زياده.... AliReza 26 04 مهر 1383, 18:49اول توي متغيير total كل فيلد هات را وارد كن..... بعد عدد تصادفي بين 1 و تعداد كل فيلدهات توي متغيير iRnd ذخير ميشه.... <% randomize dim total,iRnd total = 500 iRnd = cint((total - 1) * rnd + 1) %> بعد به را حتي ميتوني ID فيلدي كه مساوي متغيير iRnd است را نمايش بدي... يه را ساده براي اينكه فيلدي شانس بيشتري براي نمايش داشته باشه اين كه اون فيلد بيشتر از يك شماره شناسايي باشه (ميتوني به تعداد امتيازي كه آبجكتت داره شماره شناسايي بهش بدي).... مثلا اگه آبجكت با شماره شناسايي 259 از 3 امتياز 2 را داشت بهش شماره 501 را هم بده.... در اين صورت شانس اون فيلد براي انتخاب شدن 2 برابر بقيه فيلد ها ميشه.... نكته : منظورم از اضافه كردن يك شماره شناسايي اضافه كردن يك ركورد توي پايگاه داده ات نيست بلكه منظورم اضافه كردن اون شماره تو برنامه ات است...... Mostafa_sh 07 مهر 1383, 18:33منظور شما رو در مورد امتيازها نفهميدم ولي اگر بايد توي سورس كاري انجام بدم براي هر ركورد بايد بگم كه من نميدونم ركوردها چند تان و چند تا امتياز دارن و همه اطلاعات توي ديتابيس هست. ممنون AliReza 26 08 مهر 1383, 01:57خوب ديگه.... ببين شما راحت ميتوني هر ركورد را توي يك آرايه دو بعدي بزاري.... اولين بعد 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 ببخشيد اگر جمله بنديم بد شد..... موفق باشي.... Mostafa_sh 08 مهر 1383, 17:27مرسي شرمندم كردي AliReza 26 08 مهر 1383, 23:46قابلي نداشت....
این صفحه را در گوگل محبوب کنید
[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 291]