Unconfigured Ad Widget

تقليص

إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

الاختيار العشوائي باليونيتي

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • الاختيار العشوائي باليونيتي

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

    عندي سؤال يا اعذاء المنتدى عن كود استطيع من خلاله اني اعمل اختيار عشوائي بين ارقام معينه مثلا بالجافا سكريبت

    مثلا انا محدد ثلاث ارقام هم (1,2,3) و بعد ما يتنفذ الكود يعطيني رقم منهم بشكل عشوائي



    وشكرا...

  • #2
    في الجافا سكربت تستخدم الدالة Math.random() التي تعطيك كسر بين الصفر والواحد ولكي تحول هذا العدد الى عدد بين min و max استخدم هذه الطريقة:

    كود:
    Math.floor( Math.random() * (max - min + 1) + min )
    حيث min هي أصغر قيمة و max هي أكبر قيمة العدد سيكون بينهما او واحد منهما

    تعليق


    • #3
      اخي هل ممكن انك توضع اكثر لاني ما فهمت كويس؟

      تعليق


      • #4
        انظر أخي الدالة Math.random() تعطيك رقم(كسر) عشوائي بين 0 و 1 يعني أكبر من أو يساوي صفر وأضغر من واحد
        أما الدالة Math.floor() فتقوم بحذف كسر من الرقم مثلا لو كان الرقم 1.5 يصبح 1 وهكذا
        المثال الأول: لنفرض في البداية انك تريد الرقم أقل من 10 فقط وأكبر من 0 فنستدعي الدالة Math.random() ونضربها في هذا العدد هكذا:
        كود:
        Math.floor(Math.random() * 10)
        لاحظ اننا استخدمنا Math.floor() حتى نتخلص من الكسر لانه الرقم ممكن يكون 9.1 ونحن لا نريد الكسر

        المثال الثاني: الآن افرض انك تريد الرقم أقل من او يساوي 10 او بمعنى آخر أقل من 11 فستضرب في 11 هكذا:
        كود:
        Math.floor(Math.random() * 11)
        نرجع للمطلوب وهو رقم أقل من أو يساوي 10 وأكبر من أو يساوي 5 فنقوم بتكرار نفس الأمر الفائت وهذا سيعطينا رقم بين ال 0 وال 10 ولكن بتعديل بسيط هو:
        اولا لكي يكون الرقم أكبر من او يساوي 5 (وليس 0) نضيف للرقم الناتج بعد الضرب 5 هكذا
        كود:
        Math.floor(Math.random() * 11 + 5)
        تذكر أولوية العمليات

        الآن افرض أن ناتج الرقم العشوائي كان 10 فلو أضفت له 5 سيصبح 15 ويتعدى الحد الذي هو 10 فيكون الحل اننا نجعل الحد الأقصى أقل ب 5 الكود يشرح أفضل هكذا:
        كود:
        Math.floor(Math.random() * (11 - 5) + 5)
        أرجو تكون الفكرة وضحت وتبقى لك انك تخزن الناتج في متغير وتبدل الأرقام 11 (10+1) الى 4 (3+1) و 5 الى 1

        تعليق


        • #5
          اوك شكرا لك اخي على الشرح المفصل الان تقريبا فهمت و بجرب الكود ان شاء الله

          تعليق


          • #6
            اخي اريد ان اعطيك طريقة أوضح لكنها بالسي شارب لا ادري كيف تكتب في الجافا :

            اول شيء انك تنشأ مصفوفة من النوع الذي تريده مثلا اذا اردت احداث اختيار عشوائي بين ارقام عشرية تنشأ float[] و اذا كنت تريد اختيار عشوائي بين كلمات تنشأ string[]

            الان تضع جميع قيمك في تلك المصفوفة ، في السي شارب يمكن عمل التالي :
            كود:
            float[] RandomValues = new float[5]{0f , 0.19999f , 20f , 199f , 1000f}
            تلك كانت طريقة تعيين قيم مصفوفة في سطر واحد

            الان طريقة اختيار عشوائي ، في السي شارب الشيء الذي يعطيك قيمة بين 0 و 1 هو الدالة Random.value ، اما في الجافاسكربت اعتقد هو Math.random ، انا سأكتبها بالسي شارب و انت عوضها عندك بالدالة الموافقة في الجافا

            كود:
            int index = Mathf.RoundToInt(Random.value * RandomValues.Length) - 1;
            والامر يشتغل مع اي نوع من المصفوفة مهما كان حجمها ، انبه انه في السي شارب هناك طريقة اختيار عشوائي بين و بين يعني انت تحدد قيمة دنيا و صغرى و هي دالة جاهزة تعمل كالتالي :

            كود:
            int index = Random.Range(minimumValue , maximumValue);

            بعد ذلك يكفي انك تضع index كمؤشر للمصفوفة هكذا :

            كود:
            float selectedValue = RandomValues[index];
            الطريقة اعتقد معقدة لو كنت مبتدأ في البرمجة لكنها افضل حل للتعامل مع اي نوع من القيم و مهما كان عدد الاحتمالات

            تعليق


            • #7
              ^^^^
              طريقتك صحيحة بس يفضل استخدامها في حالة ان الاختيار يكون من بيانات غير الأرقام أو أرقام غير متسلسلة أما في حالة الأرقام المتسلسة يفضل استخدام الطريقة التي ذكرتها سابقا ... وعندي ملاحظة على كودك

              كود:
              int index = Mathf.RoundToInt(Random.value * RandomValues.Length) - 1;
              اعتقد انك لازم تطرح قبل ما تضرب لأن الناتج لو كان 0 وطرحت منه 1 يصبح -1 فتكون كالآتي:
              كود:
              int index = Mathf.RoundToInt(Random.value * (RandomValues.Length - 1))
              ملاحظة اخرى هي استخدام الدالة RoundToInt أغلب الناس بيستخدموا FloorToInt في اللغات التي تعاملت معها (لا أعلم بالنسبة للسي شارب) امكن بالنسبة للسي شارب الأمر يختلف لانه حتى القيمة العشوائية التي تنتجها الدالة Random.value تختلف عن المعهود لانه في أغلب اللغات القيمة العشوائية دائما تعطيك قيمة أكبر من او تساوي 0 وأصغر من 1 بينما في السي شارب أكبر من أو يساوي 0 وأصغر من أو يساوي 1 !

              تعليق


              • #8
                اخي BLackx واجهتني مشكلة بالكود كما بالصورة التالية...
                اضغط على الصورة لعرض أكبر. 

الإسم:	التقاط.GIF 
مشاهدات:	1 
الحجم:	69.2 كيلوبايت 
الهوية:	3289027

                اخي oussama23 شكرا لردك معي و بصراحة المصفوفة هي انسب لي من الكود السابق بحاول اطبقة عالجافا سكريبت

                تعليق


                • #9
                  بدل Math اكتب Mathf

                  تعليق


                  • #10
                    اخي BLackx طلعلي مشكلة بالكود ممكن تحولي الكود الخاص بالأخ oussama23 الى كود جافا سكربت؟؟

                    تعليق


                    • #11
                      أخ أحمد أنا لا أستخدم الجافا اسكربت لكن انظر للكود سهل يتفهم وتقدر بسهولة تحوله الى الجافا سكربت اعتقد حتى نفس الدوال موجودة لكن لست متأكد آسف

                      بالنسبة للمشكلة التي طلعتلك ممكن تورينا ما هي امكن اقدر اساعدك

                      تعليق


                      • #12
                        ليه كل هذا التعقيد هناك حل بسيط انا استخدمه لكن بالسي شارب لا اعرف اذا كان راح يشتغل بالجافا سكربت لكني مجربه اكثر من مرة عرف متغير وخلي نوعه int بس متحددش قيمة وفي اي function اكتب ان المتغير ده يساوي الدالة random.range هتلاقيه طلعلك عدد بشكل عشوائي وحدد القيمة الاصغر والاكبر

                        تعليق


                        • #13
                          المشاركة الأصلية بواسطة khaledemad مشاهدة المشاركة
                          ليه كل هذا التعقيد هناك حل بسيط انا استخدمه لكن بالسي شارب لا اعرف اذا كان راح يشتغل بالجافا سكربت لكني مجربه اكثر من مرة عرف متغير وخلي نوعه int بس متحددش قيمة وفي اي function اكتب ان المتغير ده يساوي الدالة random.range هتلاقيه طلعلك عدد بشكل عشوائي وحدد القيمة الاصغر والاكبر
                          هنا ستحتاج الى تحديد قيمة دنيا و قصوى ، و الامر يصبح غير ديناميكي
                          وحتى لو وجدت لها حل ، فان تلك الدالة غالبا ما تعطيني مشاكل ، اي انها تعطيك 90% من المرات تقريبا القيم الموجودة في المنتصف ، اما القيمة الصغرى و الكبرى فتعطى مرة كل 1.000 ، يمكنك ان تجرب بنفسك و سترى لاني استخدمها من زمان تلك الدالة و لم ارتاح لها ابدا

                          تعليق


                          • #14
                            وعليكم السلام ورحمة الله وبركاته...

                            الطريقة الافضل هي كما ذكر الأخ khaledemad,,
                            وببعض التوضيح :

                            لدينا المُتغيّر NumRan من نوع Integer, ونريد أن نُسند له قيمة عشوائية, من الـ 0 إلى الـ 5,,

                            سنستخدم الدالة Random.Range لهذه العمليّة..
                            هذه الدالة تأخذ عاملان, الأول يُمثل رقم الحد الأدنى من الخيارات, والثاني رقم الحد الأعلى..

                            بشرح عملي (c#) :
                            كود:
                            int NumRan = Random.Range (0, 6);
                            ملاحظة :
                            قمنا بكتابة الرقم 6 كحد أعلى للخيارات,
                            لكن النتيجة ستكون إحدى الأرقام التالية : (0.1.2.3.4.5) دون أن يدخل الرقم 6 فيها !
                            ومن ثم يمكنك استخدام هذا المُتغيّر كما تريد داخل الكود لديك...

                            أعتقد أنه من السهل جدا لك أن تحوله إلى الجافا سكربت...
                            بالتوفيق لك صديقي.....

                            =================================

                            صديقي oussama23...
                            قم بنسخ هذا الكود من نوع c#, جربه وشاهد النتائج :

                            كود:
                            	void Update ()
                            	{
                            		if (Input.GetKeyDown(KeyCode.Z))
                            			for (int x=0 ; x<500 ; x++)
                            			{
                            				int Num = Random.Range (0, 40);
                            				print (Num);
                            			}
                            	}
                            اضغط الزر Z, من لوحة المفاتيح لتكرار التنفيذ,,
                            وطبعا لا تنسى أن تقوم بتفعيل الخيار (Collapse) في نافذة Console, لتسهيل قراءة الأرقام,,,

                            بالتوفيق لكم...


                            تعليق


                            • #15
                              شكرا جزيلا لك اخي rhhs الامر طلع بسيط جدا ما اعرف ليش كان فيه شوية تعقيد بأول ردود و شكرا لك..
                              بجرب الكود اول ما تيجيني فرصة لانو الجهاز خربان حاليا..

                              تعليق

                              يعمل...
                              X