random الفئة ...لتوليد أرقام عشوائية و عمل برامج القرعة




لنفرض أننا نريد تصميم برنامج اختبر معلوماتك يقوم بعرض الأسئلة بطريقة عشوائية جذابة و جميلة أو نريد تصميم برنامج قرعة يقوم باختيار اسم عشوائي من بين مجموعة أسماء كالذي نراه في البرامج التلفزيونية أو نريد تصميم لعبة بسيطة باستخدام لغة الفيجوال بيسك ...
الحل هو استخدام الفئة  random  في الفيجوال بيسك دوت نت

ماهي random class : هي فئة  تستخدم في توليد أعداد بطريقة عشوائية  

فلنفرض مثلا أن احدى  شركات الحج جاءت الينا تشكو كثرة عدد الحجاج لديها و عدم وجود أماكن لكثير من المتقدمين لديها لأداء مناسك الحج  و تطلب منا حلا يرضي الجميع  و لا يظلم أحدا ...
فنقول لها الحل بسيط تعطينا أسماء المتقدمين و نحن نختار سعيدي النصيب عشوائيا فلا ندع مجالا لأن يشك أحد أنه ظلم أو أنه لو كان لديه واسطة لكان منهم أو... وسيعود في العام القادم ليعيد الكرة مرة أخرى وهذا هو النظام الذي تتبعه جمهورية مصر العربية فمع كثرة المتقدمين لأداء مناسك الحج لديها يتم عمل قرعة بينهم باستخدام الكمبيوتر ليختار أسماء عشوائية ...

بعد كل هذا الكلام ...نذهب الى برنامج الفيجوال بيسك و نقوم بفتج مشروع جديد لنبدأ العمل:

لننشأ نسخة من نفس الفئة نستعمل الطريقة المعروفة في إنشاء الفئات باستخدام الأمر  New  كما يلي :


   Dim TheRandom As New Random
                       
حيث TheRandom اسم المتغير يمكن استبداله بأي اسم آخر 


أهم الـــوسائل methds الخاصة بالأداة 

(1)next :


قم باضافة  button1 و textbox1  الى النموذجform   واكتب الكود الثالي في الحدت الخاص بـالــbutton_click


 Dim TheRandom As New Random
        TextBox1.Text = TheRandom.Next
()

 و نقوم بتشغيل البرنامج فنلاحظ عن الضغط على الزر يظهر في مربع النص أرقام عشوائية بالملايين و الآلاف فمرة يظهر الرقم مليون و بعديه مباشرة يظهر الرقم خمسة و هكذا ...


اذا الوسيلة next نقوم بجلب أرقام عشوائية صحيحة موجبة   وهذه الأرقام تنحصر بين 0 و 2,147,483,647  
أي أنه مرة يطلع الرقم 2,147,483,647  و المرة التالية يطلع الرقم صفر 


 ولكن اذا كنا نصمم برنامج لمدرسة مثلا عدد طلابها 350 طالب فقط فلا حاجة لنا بهذه الأرقام المهولة ((لا نحتاج الى الرقم2,147,483,647  )) فلا يوجد طالب رقمه 1542874 


ولذلك هناك تعديل بسيط جدا في الكود السابق كالتالي 


   Dim TheRandom As New Random
        TextBox1.Text = TheRandom.Next(350)


نرى أننا بين القوسين ()و ضعنا أقصى قيمة للأرقام العشوائة لا تزيد عليها فعند تشغيل البرنامج سوف تكون أقصى قيمة هي  349 لأن الترقيم يبدأ من صفر وليس من واحد




ولكن أيضا هناك مشكلة أخى تواجهنا هنا و هي لو أنه لدينأ  أرقام جلوس  للطلاب تبدأ من 360 الى 840 و نريد توزيعهم بطريقة عشوائية على الفصول فعندئذن نحتاج الى تحديد أقل قيمة و أقصى قيمة فيكون الكود بعد التعديل كالتالي :
Dim TheRandom As New Random     
  TextBox1.Text = TheRandom.Next(360, 840)   


فتكون الصورة العامة
TextBox1.Text = TheRandom.Next()      :code
          TextBox1.Text = TheRandom.Next(maxValue)   :code

   TextBox1.Text = TheRandom.Next(minValue,maxValue)   :code



 (2)NextDouble : 
تستخدم هذه الخاصية في توليد أرقام عشوائية تنحصر بين 0,0  و 1,0  بحيث تكون هذا الأرقام أكبر من أو تساوي 0,0  وأصغر من 1


و لترى أرقام عجيبة نتصر بين 0 و 1 قم بكتابة الكود التالي :
Dim TheRandom As New Random
    TextBox1.Text = TheRandom.NextDouble()    :code





  و تعد هاتين أشهر وسيلتين و أكثرهما استخداما خاصة الأولى 



ملحوظة : عند كتابة الكود التالي 
TextBox1.Text = TheRandom.Next(1, 3)    code

فان الأرقام المتولدة سوف تكون 1 و 2 فقط أما ثلاثة فلا تدخل ضمن نطاق الكود






مثال :
قم بثصميم نموذج يحتوي button1 , textbox1,listbox1 كما في الصورة 








حيث عند الضغط على button1((اختيار اسم عشوائي من القائمة)) يتم اختيار اسم عشوائي من القائمة و اضهاره في الــtextbox 


الكود بسيط جدا كما يلي :


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e AsHandles Button1.Click
        Dim TheRandom As New Random
        TextBox1.Text = ListBox1.Items(TheRandom.Next(ListBox1.Items.Count))
    End Sub






و لي معكم لقاء مفصل في كيفية تصيم برنامج اختبر معلوناتك و لقاء آخر لتصميم لعبة بسيطة وكلاهما يعتمدان على هذا الدرس و السلام عليكم و رحمة الله

هناك 9 تعليقات:

  1. رائع بارك الله فيك

    ردحذف
  2. بارك الله بك لقد استفدت كثيرا

    ردحذف
  3. رائع جدا
    معي استفسار بسيط
    هل من الممكن عدم تكرار الرقم العشوائي

    ردحذف
  4. جزاك الله خيراً .. هل في طريقة اقدر بواسطتها اخلي الارقام اللي تتكرر تظهر أمامي مباشرة على TextBox

    ردحذف
  5. الله يوفقك يا معلم على هالدرس الرائع

    ردحذف