PDA

View Full Version : سوال: انتخاب اعداد تصادفی غیر تکراری



amir9372
سه شنبه 05 دی 1391, 14:10 عصر
سلام :
من میخوام یک برنامه بنویسم که 30 تا کلمه بهش بدیم و سیستم 6 تا رو به صورت رندوم چاپ کنه
و مکان چاپشون هم رندوم انتخاب بشه (داخل کادر)
برای اینکه تو کلمه های انتخاب شده تکراری نداشته باشه چی کار باید بکنم ؟؟؟؟

mehdi.mousavi
سه شنبه 05 دی 1391, 15:54 عصر
سلام : من میخوام یک برنامه بنویسم که 30 تا کلمه بهش بدیم و سیستم 6 تا رو به صورت رندوم چاپ کنه و مکان چاپشون هم رندوم انتخاب بشه (داخل کادر) برای اینکه تو کلمه های انتخاب شده تکراری نداشته باشه چی کار باید بکنم ؟؟؟؟

سلام.
برای انتخاب اعداد تصادفی غیر تکراری می تونید از الگوریتم Fisher-Yates (http://en.wikipedia.org/wiki/Fisher-Yates_shuffle) استفاده کنید.
توضیحات کامل در مورد این الگوریتم به زبان ساده + دیگر روش های انجام این کار رو می تونید
در این آدرس (http://stackoverflow.com/questions/196017/unique-random-numbers-in-o1) مطالعه کنید.

موفق باشید.

amir9372
چهارشنبه 06 دی 1391, 00:07 صبح
من محیطی که باید این برنامه رو توش بنویسم c++ هستش این الگوریتم اینجا کار میکنه ؟؟؟؟
برای تایمر فکر کنم باید از delay استفاده کنم اگه بخوام که تایمر تو صفحه چاپ بشه از چی استفاده کنم ؟؟؟؟

Arashdn
چهارشنبه 06 دی 1391, 18:22 عصر
من محیطی که باید این برنامه رو توش بنویسم هستش این الگوریتم اینجا کار میکنه ؟؟؟؟
برای تایمر فکر کنم باید از delay استفاده کنم اگه بخوام که تایمر تو صفحه چاپ بشه از چی استفاده کنم ؟؟؟؟
به جای 30 زمان مورد نظر تون رو بر حسب ثانیه بنویسید
#include <windows.h>
for(int i=0; i<31 ;i++)
{
cout<<"\r"<<i;
Sleep(1000);
}

amir9372
چهارشنبه 06 دی 1391, 21:35 عصر
این تو C++‎ کار میکنه
delay برای ایجاد تاخیر تو برنامه هستش الآن من میخوام برای گرفتن یک کلمه از کاربر 5 ثانیه زمان بذارم که تو این زمان کاربر تایپش کنه .
و یک قسمت هم تایمر رو نشون بده که داره معکوس میشمره .

me.enik
چهارشنبه 06 دی 1391, 22:11 عصر
دستور delay در سی پلاس پلاس ساده است :
delay(1000);
فکر کنم یک همچین چیزی باشه, اگر نبود با یک سرچ به زبان انگلیسی خیلی راحت به نتیجه میرسید.

درباره تایمر هم باید بگم که تایمر یک متغییر هست که هر دفعه به علاوه میشه, پس میتوانید با اضافه کردن مقدار یک متغییر, یا کم کردن مقدار آن, یک تایمر بسازید.
چندان نکته خاصی نداره.

amir9372
پنج شنبه 07 دی 1391, 11:47 صبح
میشه همین چیزی که میگین بنویسید :
من از متغیر که استفاده میکنم همه مقادیر از 0 تا 5 پشت سر هم چاپ میکنه بعدشم نمیشه از clrscr(); استفاده کرد کل چیزایی که تو صفحه هست پاک میشه .
از دستور sleep() هم که استفاده میکنم مثل تایمر میشمره فقط یه مشکل داره که بعد شمارشش بقیه برنامه رو اجرا میکنه م میخوام همزمان با تایپ کاربر شروع بشه.
اینا هم متن برنامه ای هستن که باید بنویسم .