الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

[سؤال] توليد عدد عشوائي كسري باستخدام Rand ؟

بدأه Abdullah.Alshammeri في 8 أكتوبر 2009 · 2 رد · 530 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

كيف يمكن توليد عدد عشوائي كسري باستخدام الدالة القياسية rand

وجدت هذه الطريقة ، المشكلة أن القيم لا تتغير بالشكل المطلوب .. أي أن الناتج في الغالب يكون متساوي وان اختلف فيكون في كسور بسيطة .

float Random::generateFloat(float minValue,float maxValue)
{
		//TODO :  Do I need assert here ?


		if(minValue>maxValue)
		{
			float temp = minValue;
			minValue = maxValue;
			maxValue = temp;
		}
		srand(seed);
		float result = (rand() / (static_cast<float>(RAND_MAX) + 1.0))* (maxValue - minValue) + minValue;
		return (result);
}

//Main   --- Test Random ---

	float maxFloat = -1000;
	float minFloat   = 1000;

	Random random; 

	for(int i=0;i<10;i++) 
	{ 
		random.setSeed(time(0) + i);
		float floatValue = random.generateFloat(11.5f,23.7f);
		maxFloat = (floatValue > maxFloat? floatValue:maxFloat);
		minFloat = (floatValue < minFloat? floatValue:minFloat);
		std::cout <<  floatValue << "  ,  ";
		if(i%2 != 0)
		std::cout << std::endl;

	}//for

	  std::cout << "maxFloat " << maxFloat << "\nminFloat " << minFloat;
	std::cout << std::endl;

تم تعديل هذه المشاركة بواسطة الشمري في 8 أكتوبر 2009 في 14:37

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

#2

السلام عليكم ...

أخي الشمري ضع الـ seed خارج الحلقة, لأن سرعة تنفيذ الحلقة أكبر بكثير جداً من أن تتغير القيمة العائدة من الدالة time.

//Main   --- Test Random ---

	float maxFloat = -1000;
	float minFloat   = 1000;

	Random random;
		random.setSeed(time(0) + i);

	for(int i=0;i<10;i++)
	{

		float floatValue = random.generateFloat(11.5f,23.7f);
		maxFloat = (floatValue > maxFloat? floatValue:maxFloat);
		minFloat = (floatValue < minFloat? floatValue:minFloat);
		std::cout <<  floatValue << "  ,  ";
		if(i%2 != 0)
		std::cout << std::endl;

	}//for

	  std::cout << "maxFloat " << maxFloat << "\nminFloat " << minFloat;
	std::cout << std::endl;

تحياتي,,

#3

امم .. فعلا تولّدت أعداد متنوعة الان .. شكرا لك أخوي .

	for(int i=0;i<10;i++) 
	{ 
		random.setSeed( GetTickCount());
		// include windows.h	
		Sleep(2000);

كنت أغيّر seed بواحد .. لكن لاتتغير القيمة العشوائية بشكل جيد ... هذا لايكفي ؟؟

logo1.png تطبيق طمأنينة ، نسخة بيتا على أندرويد

عبدالله الشمّري - Al-Shammari

CodingAlone.com

twitter @abshammeri

abshammeri AT gmail.com

github : abshammeri

مواضيع مشابهة