امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
تولید اعداد راندوم غیر تکراری
نویسنده پیام
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #1
تولید اعداد راندوم غیر تکراری
با سلام به دوستان مخصوصآ ممد خان عزیز که هوای ما رو خیلی داره

من این کد رو برای تولید اعداد راندوم بین 1 تا 8 که می خواستم پیدا و
دستکاری کردم ولی مشکی که هست اینه که نمی خواهم توش عدد
تکراری باشه
آیا کسی روشی سراغ داره ؟
کد:
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    srand((unsigned)time(0));
    int random_integer;
    int lowest=1, highest=8;
    int range=(highest-lowest)+1;
    for(int index=0; index<8; index++)
    {
        random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
        cout << random_integer << endl;
    }
}

با تشکر
(آخرین ویرایش در این ارسال: ۱۰-خرداد-۱۳۸۵, ۱۱:۵۲:۱۸، توسط Iron_Fist.)
۱۰-خرداد-۱۳۸۵, ۱۱:۴۴:۳۷
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #2
RE: تولید اعداد راندوم غیر تکراری
سلام
کد زیر چطوره !!؟؟

کد:
[align=right]#include <iostream>
#include <ctime>
#include <cstdlib>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> nums(8);

int main()
{
srand((unsigned)time(0));
int random_integer;
int lowest=1, highest=8;
int range=(highest-lowest)+1;




int cnt=0;
while(cnt<8)
{
    random_integer = lowest+(int)(range*rand()/(RAND_MAX + 1.0));
    
    if (find( nums.begin(), nums.end(),random_integer) == nums.end())
    {
        cnt++;
        nums.push_back(random_integer);
        cout << random_integer << endl;
        
    }



}



}[/align]

گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
۱۰-خرداد-۱۳۸۵, ۲۱:۰۲:۰۴
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #3
RE: تولید اعداد راندوم غیر تکراری
ممد جان دستت درد نکنه
یه مقدار ممکنه درمورد برنامه
و هدر های برنامه توضیح بدی !
۱۰-خرداد-۱۳۸۵, ۲۱:۳۶:۰۳
ارسال‌ها
پاسخ
Mamad2003 آفلاین
کاربر با تجربه
****

ارسال‌ها: 1,150
موضوع‌ها: 18
تاریخ عضویت: آذر ۱۳۸۲

تشکرها : 9
( 388 تشکر در 232 ارسال )
ارسال: #4
Wink  RE: تولید اعداد راندوم غیر تکراری
سلام

برنامه پیچیده ای نیست !

(vector<int> nums(8  شی با نام nums از کلاس vector میسازه با ظرفیت 8 تا ! توضیح بدم که vector دقیقا مثل آرایه میمونه با این تفاوت که خیلی کارایی بیشتری نسبت به آرایه داره . مثلا میتونی خیلی راحت و سریع مرتبش کنی یا اندازه اش رو در زمان اجرا تغییر بدی و یا توش جستجو کنی یا خیلی چیزهای دیگه ...!

(find( nums.begin(), nums.end(),random_integer) == nums.end  این تابع که از الگوریتم های STL هست ، میاد و سر و ته vector رو میگیره بعلاوه چیزی که باید جستجو کنه و اگر چیزی رو پیدا نکرد اندازه آخر vector رو بر میگردونه .

من اومدم و یه vector تعریف کردم . میام یه عدد تصادفی که تولید شد رو با خط بالا توی vector چک می کنم . اگه نبود با تابع push_back موجود در شی vector به انتهای vector اضافه اش می کنم و اگر قبلا وجود داشت حلقه رو آنقدر تکرار می کنم تا یک عضو پیدا بشه که توی vector نباشه یا ظرفیت 8 تایی من تکمیل بشه . تکمیل ظرفیت vector  هم توی شرط خود حلقه چک می کنم با متغیر  cnt . پس زمانی که 8 تا عدد تصادفی ایجاد شد حلقه خاتمه پیدا می کنه و برنامه تموم میشه !

اون دوتا هدر فایل ها هم هدر فایل های کتابخونه STL یا Standard Template Library هستن که کتابخونه استاندارد زبان ++C هست . چیزهایی مثل vector یا همون توابع find و sort و ..... توش تعریف شدن .

اولین بار زبان ++C در سال 1996 در انجمن ANSI استاندارد سازی شد و بعد از اون سال هم وظفیه استاندارد سازیش به عهده این انجمن هست . STL اولین کتابخونه استاندارد زبان و محصول ارائه شده از این انجمن هست و توسط کامپایلر ها باید ساپورت بشه !
توی کتاب ها بیشتر در رابطه توابع و کلاس های موجود توی این کتابخونه نوشته شده . کلاسها و الگوریتم های این کتابخونه خیلی گسترده و مفید هستش . همچنین در طراحی این کتابخونه از خاصیت Template کردن توابع و کلاس ها که یکی از امکاناته زبانه ، استفاده شده و برای همین Standard Template Library نام داره .




گويند بهشت و حور و کوثر باشد  ..  جوي می و شير و شهد و شکر باشد
پر کن قدح باده و بر دستم نه      ..   نقدي ز هزار نسيه خوشتر باشد  
(آخرین ویرایش در این ارسال: ۱۱-خرداد-۱۳۸۵, ۰۲:۳۶:۰۷، توسط Mamad2003.)
۱۱-خرداد-۱۳۸۵, ۰۲:۳۵:۰۹
ارسال‌ها
پاسخ
Iron_Fist غایب
مدیر بازنشسته
*****

ارسال‌ها: 1,456
موضوع‌ها: 70
تاریخ عضویت: آبان ۱۳۸۴

تشکرها : 109
( 456 تشکر در 134 ارسال )
ارسال: #5
RE: تولید اعداد راندوم غیر تکراری
ممد جان ایول دمت گرم
خیلی چیز یاد گرفتم

ممد جان چند تا سوال برام پیش اومده که خوشحال می شم جواب بدی
1.این هدر ctime دقیقآ اینجا چه کار می کنه
2.
کد:
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
یه مقدار ممکنه توضیح بدی
3.این srand چیکار می کنه
4.
کد:
srand((unsigned)time(0));
چرا در این خط از نوع unsigned استفاده شده

متشکرم
۱۱-خرداد-۱۳۸۵, ۰۳:۰۵:۰۷
ارسال‌ها
پاسخ
Programmer آفلاین
كاربر دو ستاره
**

ارسال‌ها: 79
موضوع‌ها: 4
تاریخ عضویت: تير ۱۳۸۵

تشکرها : 2
( 23 تشکر در 9 ارسال )
ارسال: #6
RE: تولید اعداد راندوم غیر تکراری
srand در واقع همان Randomize است که در QB برای درست کردن seed برای تولید اعداد شبهه تصادفی استفاده میشود و توسط rand به کار می رود.
time یک عدد بر می گرداند برابر با تعداد ثانیه های گذشته از آغاز روز
برای استفاده درست از آن باید به unsigned قالب ریزی شود و این کار ها همه برای این است که در اجرا های مختلف برنامه تصادفی بودن اعداد تضمین شود.
در غیر این صورت rand اعداد یکسانی در اجرا های مختلف تولید میکند.
۲۶-مرداد-۱۳۸۵, ۲۳:۱۷:۲۱
وب سایت ارسال‌ها
پاسخ


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  طراحي اگوريتم (ضرب اعداد بزرگ) جواب ميخوام arazinqizi 4 8,706 ۰۳-آذر-۱۳۹۱, ۱۷:۰۸:۲۱
آخرین ارسال: akramn
  اعداد مرکب بین دو بازه snoopboy 2 3,654 ۱۳-مرداد-۱۳۹۱, ۲۲:۴۸:۳۷
آخرین ارسال: babyy
  فاکتوریل اعداد aleas 2 5,090 ۱۷-اردیبهشت-۱۳۹۱, ۱۴:۵۲:۵۵
آخرین ارسال: mhpc2009
Exclamation نوشتن اعداد در 7 ستون یه مشکل خیلی ساده در C St4r-S4t 2 4,434 ۱۷-اردیبهشت-۱۳۹۱, ۱۰:۵۴:۰۶
آخرین ارسال: sjh
Question [سوال] مشکل با چاپ اعداد متقارن چهار رقمی ؟ saeedvir 2 3,600 ۰۷-آبان-۱۳۹۰, ۰۱:۳۹:۱۵
آخرین ارسال: mhpc2009
  کلاس اعداد مختلط وبارگزاری اضافه اپراتورهای جمع وتفريق adameh_bahal 9 17,822 ۱۵-خرداد-۱۳۸۸, ۲۰:۳۷:۴۴
آخرین ارسال: محمد حسینی
Question تعداد اعداد فاقد رقم صفر ! dunker 2 2,940 ۰۹-خرداد-۱۳۸۸, ۰۱:۰۹:۳۶
آخرین ارسال: محمد حسینی

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS