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

[عاجل وضوروي جدا] مولد الارقام العشوائية بدون تكرار Lcg لا يعمل بشكل صحيح معي

بدأه المظفر بالله في 8 نوفمبر 2008 · 1 رد · 633 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

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

اخباركم شباب

ممكن مساعدة يا اخوان

انا لدي كود هذه اخوارزمية

وهي لتوليد ارقام بين الت 0 , الى n بدون تكرار , يعني اولد كل مرة رقم عشوائي ضمن هذا المجال اذا طلبت n رقم سيعطيني كل مرة رقم يستحيل تكراره

وطبعا اعتمادا على البذرة seed بحيث استطيع استرجاع نفس التسلسل في كل مرة

انا سويته وجربته لكن المشكلة كان يشتغل وما شاء الله عليه , فجأة بطل ينفع !!!!!!!

لمعلومات اكثر

http://en.wikipedia.org/wiki/Linear_congruential_generator

الكود هو

	class LCG
	 {

		 public int C;
		 public int A;

		 int Generator = 0;
		 //*******************************************************
		 public int[] Prime_Numbers = new int[301];

		 //*******************************************************
		 private bool Prime(int x)
		 {
			 int i;

			 for (i = x - 1; i >= 2; --i)
			 {
				 if (x % i == 0)
				 {
					 break;
				 }
			 }
			 if (i < 2)
			 {
				 return true;
			 }
			 else
			 {
				 return false;
			 }

		 }

		 //*******************************************************
		 public int Find_Constant(int n)
		 {
			 int i;
			 for (i = n; i >= 2; --i)
			 {
				 if (n % i != 0)
				 {

					 break;
				 }
			 }
			 return i;
		 }

		 //*******************************************************
		 private bool IsMultiple(int x)
		 {
			 int i;
			 bool Multiple = true;
			 for (i = 0; i < 300; i++)
			 {
				 if (Prime_Numbers != 0)
				 {
					 if (x % Prime_Numbers != 0)
					 {
						 Multiple = false;
						 break;
					 }
				 }
			 }
			 return Multiple;
		 }

		 //*******************************************************
		 public int Find_A(int n)
		 {
			 int i;

			 for (i = 1; i <= 10000; i++)
			 {
				 if (IsMultiple(i))
				 {
					 if (n % 4 == 0)
					 {
						 if (i % 4 == 0)
						 {
							 break;
						 }
					 }
					 else
					 {
						 break;
					 }
				 }
			 }

			 return i + 1;

		 }

		 //*******************************************************
		 private void Find_Prime_Numbers(int n)
		 {
			 int i;
			 int j;
			 j = 1;
			 for (i = n; i >= 1; i--)
			 {
				 if ((Prime(i)) && (n % i == 0))
				 {
					 Prime_Numbers[j] = i;

					 j = j + 1;
				 }
			 }
		 }

		 //*******************************************************
		 public int flag = 0;
		 public int NC;
		 public int NA;
		 public int Random_LCG(int n, int Seed)
		 {
			 if (Generator == 0)
			 {
				 C = Find_Constant(n);
				 Find_Prime_Numbers(n);
				 A = Find_A(n);
				 Generator = 1;
			 }


			 if (flag == 0)
			 {
				 NC = C;
				 NA = A;
				 flag = 1;
			 }
			 return (A * Seed + C) % n;
		 }


		 //*******************************************************
	 }
 }

لاستخدامه مثلا

ادرج صندوقين كتابة textbox1 هو الـ seed

و textBox2 هو اللي تحط فيه اكبر رقم ممكن يعني n وطبعا هذا الكود يدرج في الليست الارقام ,

وضع هذا الكود :

 listBox1.Items.Clear();
			 int Seed = int.Parse(textBox1.Text.ToString());
			 LCG RD = new LCG();
			 int Temp = int.Parse(textBox2.Text.ToString());

			 while (Temp >= 1)
			 {

				 Seed = RD.Random_LCG(Temp, Seed);
				 listBox1.Items.Add(Seed);
				 Temp--;
			 }

			 RD.flag = 0;

ما الحل اسعفوني

الامر يتعلق بشيء يخص مشروع تخرج مش مزحه

ملاحظة

اللي عنده الكود مفهوم بدون تعقيد على لغة اخرى ارجوا اعطائي اياه

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…