المساعدة - البحث - قائمة الأعضاء - التقويم
نسخة كاملة: [عاجل وضوروي جدا] مولد الارقام العشوائية بدون تكرار Lcg لا يعمل بشكل صحيح معي
برمجة - شبكات - كمبيوتر - منتديات الفريق العربي للبرمجة > منتديات البرمجة على Microsoft .NET Platform > منتدى مبرمجي Microsoft Visual C#.NET
المظفر بالله
بســم الله الـرحمــن الرحيــم
السلام عليكــم ورحمـة الله وبركاتــه

اخباركم شباب

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

انا لدي كود هذه اخوارزمية
وهي لتوليد ارقام بين الت 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[i] != 0)
                 {
                     if (x % Prime_Numbers[i] != 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;


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



ملاحظة
اللي عنده الكود مفهوم بدون تعقيد على لغة اخرى ارجوا اعطائي اياه
System Down
ماذا تقصد "بطل ينفع"؟

هل هناك خطأ ينتج؟
هذه "نسخة - خفيفة" من محتويات الرئيسية للإستعراض الكامل مع المزيد من الصور والخيارات الرجاء إضغط هنا.
Invision Power Board © 2001-2009 Invision Power Services, Inc.