تولید عدد تصادفی غیر تکراری در ++C - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

تولید عدد تصادفی غیر تکراری در ++C

+2 امتیاز
من می خوام  اعداد کاملا تصادفی داشته باشم ولی با srand , rand استفاده کردم ولی اعداد اون جوری که میخوام نیستن

راهی داره که توی ++C عدد کاملا تصادفی داشته باشیم ؟
سوال شده فروردین 10, 1393  بوسیله ی رضا قربانی (امتیاز 33)   2 2 3
البته برای تولید اعداد تصادفی با توزیع دلخواه در c++11 می تونید از random_engine استفاده کنید .
http://goo.gl/He3ZVv

2 پاسخ

+2 امتیاز

اگه میخواید از ()rand و ()srand استفاده کنید باید چندتا نکته رو بدونید .

اینکه ()rand وابستگی شدیدی نسبت به ()srand داره .

یعنی نسبت به عدد داده شده ی srand که به اصلاح seed گفته میشه عمل میکنه و از یک الگوی خاصی استفاده میکنه .

شاید به نظر اعداد تولید شده ی ()rand تصادفی باشند ولی اینطور نیست .

شما اگه مقدار ()srand رو یک عدد ثابت بدید خواهید دید که هر بار که برنامه رو اجرا میکنید همون عداد تصادفی قبلی رو بهتون میده.

و این خیلی بده . حالا بره اینکه این اتفاق نیوفته عددی که به ()srand میدید یا همون Seed باید در هربار تغییر کنه تا ()rand هم نتیجه ی متغییری به شما بده .

 

برای همین یکی از راه کار هایی که خیلی استفاده میشه اینه که Seed رو معمولا با زمان مقدار دهی میکنند . چون زمان همیشه در حال تغییره و از همین تغییر پذیری میشه برای ()srand استفاده کرد .

 

این کدو بیین و اجراش کن و بعدش خطی که داخلش ()srans صدا زده رو پاک کن و دوباره اجرا کن متوجه میشی .

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <unistd.h>

int main ()
{
	srand(time(NULL));

	for(int i = 0;i < 20;i++)
	{
		printf("%u\n",rand() % 100);
		sleep(1);
	}

	return 0;
}

 

پاسخ داده شده فروردین 10, 1393 بوسیله ی Ali Rahbar (امتیاز 4,240)   6 16 46
0 امتیاز
const int n = 200;
std::vector<int> indexs(n);
std::iota(indexs.begion(),indexs.end(),0);
std::random_shuffle(indexs.begin(),indexs.end());

 

پاسخ داده شده مهر 18, 1396 بوسیله ی farnoosh (امتیاز 8,362)   20 44 59
...