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

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

تمرين : ضمان عدم التكرار عند ادخال القيم للمصفوفات

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

  • #16
    المشاركة الأصلية بواسطة المـهاجر مشاهدة المشاركة
    أ
    طبق الكود الخاص بك بعد رفع الحد من 6 إلى 100000 "مائة ألف"
    سيستغرق الكود أكثر من 11 ثانية للتنفيذ
    بنهاية التمرين سترى أن التنفيذ لا يفترض ان يستغرق أكثر من ربع ثانية فى نفس الظروف
    ترى ما الزمن المستغرق لهكذا كود
    كود PHP:
    local function yes(GX)
    for 
    i=1,#G do
    if G[i] == X then 
    return true
    end
    end
    return false
    end
    local G 
    = {}
    for 
    ,6  do
    =  math.random(1,6);
    if 
    not yes(GXthen
    Table
    .Insert(G1,X);
    end
    end
    result 
    Table.Concat(G"-"1TABLE_ALL);
    Dialog.Message("Notice",result); 

    هي محاولات ... لكن من الجيد أنها كلها أعطت النتائج الصحيحة لكن يبقى الحكم بصحتها أو عدمها
    حق مشروع لطارح التساؤل موفقين

    تعليق


    • #17
      بداية شكرا للمحاولة الجميلة

      المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
      ترى ما الزمن المستغرق لهكذا كود
      لا أعرف
      يمكنك تجربة
      كود PHP:
      local function yes(GX)
      for 
      i=1,#G do
      if G[i] == X then 
      return true
      end
      end
      return false
      end
      local G 
      = {}
      t1 os.clock()
      for 
      ,500000  do
      =  math.random(1,60);
      if 
      not yes(GXthen
      Table
      .Insert(G1,X);
      end
      end
      t2 
      os.clock()
      t3 t2 t1
      tco 
      Table.Count(G);
      Dialog.Message("Notice",tco.."  "..t3); 
      و لاحظ النتيجة

      يمكنك تغيير رقم 60 ب 6000
      كود PHP:
      =  math.random(1,6000); 
      هل هناك نتيجة ؟

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

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

      لا اعتقد ان الحكم بأن هذا هو حل التمرين سيفيدك لو كنت تبحث عن السرعة

      واصل و لا تيأس

      تعليق


      • #18
        جيد إذن الان مشكل سرعة كود لدوران رفع إلى 500000
        ------------
        بالوصول إلى هاته المقاربة يمكنك طرح كود الحل
        في حال عدم توفر بوادر للحل أو المحاولات المرتقبة
        - لأنها ستكون بالنسبة لي مسألة مقارنة بين كفاءة أكواد -
        موفق

        تعليق


        • #19
          المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
          ترى ما الزمن المستغرق لهكذا كود
          كود PHP:
          local function yes(GX)
          for 
          i=1,#G do
          if G[i] == X then 
          return true
          end
          end
          return false
          end
          local G 
          = {}
          for 
          ,6  do
          =  math.random(1,6);
          if 
          not yes(GXthen
          Table
          .Insert(G1,X);
          end
          end
          result 
          Table.Concat(G"-"1TABLE_ALL);
          Dialog.Message("Notice",result); 

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

          تعليق


          • #20
            المشاركة الأصلية بواسطة ثامر أبو بلقيس مشاهدة المشاركة
            جيد إذن الان مشكل سرعة كود لدوران رفع إلى 500000
            طبعا لا
            التمرين الأصلى يتعامل مع 6 عناصر و ليس 500000 عنصر
            لكن كيف سنختبر قوة دالة دون ان نضعها فى ظروف قاسية ؟

            تلميح
            دالتك تعانى من استهلاك شديد للذاكرة - تحتاج للترشيد

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

            تعليق


            • #21
              المشاركة الأصلية بواسطة فرح صالحي مشاهدة المشاركة
              استغرق عندي انا 12 ثانية و 12 جزء من الثانية
              وهذه مواصفات جهازي
              ليست لهذه الدرجة استاذ فرح
              استبدل آخر سطرين فى الكود الذى اقتبسته ب
              كود PHP:
              tco Table.Count(G);
              Dialog.Message("Notice",tco); 
              لأن الأوتوبلاى بها Bug فى إظهار الرسائل المحتوية على تلك العلامة " - "
              لاحظ اننى فى الملف المفتوح للتمرين الأصلى تعمدت وضع ليست بوكس لتفادى الاظهار برسالة عموما

              تعليق


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

                1- كل الحلول التى طرحت فى هذا الموضوع اعتمدت تكرار بحلقة (خطأ فادح)

                2- هذه المشاركة فى موضوع أخر مشابه و سنجد به تكرار مرة اخرى
                http://sites.ienajah.com/vb2/showpost.p...45&postcount=7
                لاحظوا جيدا ردى عليها
                http://sites.ienajah.com/vb2/showpost.p...47&postcount=8

                3- أيضا هنا
                المشاركة الأصلية بواسطة عبود عبود مشاهدة المشاركة
                لكن أعتقد أنى سوف أعتمد على دالة تكرارية بعدد عناصر المصفوفة ومن ثم مقارنة المدخل معهم عن طريق الشرط إف
                للمرة الثالثة التكرار و الحلقة
                كل ما سبق يشترك فى نفس الموروث الشائع

                التلميح
                لن نستخدم التكرار للكشف

                تعليق


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

                  موعدنا الآن مع الحل الصحيح للتمرين
                  بداية كافة الحلول التى طرحت اعتمدت حلقة للكشف

                  لكن ما لا تعلمونه ان البحث بداخل المصفوفات لو احتوى على حلقة تكرارية فهذا خطا جسيم
                  لماذا ؟
                  لأن سطر الشرط هو نفسه حلقة
                  فلو أحطناه بحلقة فنحن بذلك نرفع التكرار للأس 2

                  طبعا كلامى غير واضح حتى الآن
                  نأتى للكود
                  راقب جيدا هذه الفانكشن
                  كود PHP:
                  -- Mohager Prevent Table Duplicate--
                  function 
                  Add_Unique(TableName,Element)
                  if  
                  TableName[Element]== nil then 
                    TableName
                  [Element] =  Element
                  end
                  end 
                  هل ترون اى تكرار ؟؟
                  سيرد الغالبية بالنفى
                  لكن فى واقع الأمر هذا السطر تكرار بحد ذاته
                  كود PHP:
                  if  TableName[Element]== nil then 
                  لا يهمنى ان كنتم لا ترون كلمة for او repeat أو while
                  لكنها تبقى تكرار حتى دون وجود ملامح الحلقة
                  هنا الشرط اف سيكرر نفسه و سيراجع كافة عناصر المصفوفة و لا يحتاج لوجود اى حلقة
                  بل على العكس
                  فلو احطناه بأي حلقة فسيكون عدد التكرار يساوى عدد عناصر المصفوفة مضروبا فى نفسه
                  فلو كان عدد العناصر = 10000 عنصر و قمنا بإنشاء حلقة
                  تكون النتيجة هى الدوران و التكرار 100000000مرة (مائة مليون مرة)

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

                  أعلم تماما ان هذا الكلام سيخالف اغلب الشروحات التى قد تكونون قد قرأتموها سابقا
                  لكن ماذا يهم ؟؟ المهم هو التوصل للطريقة الصحيحه .. أليس كذلك ؟؟

                  الكود كاملا
                  كود PHP:
                  -- Mohager Prevent Table Duplicate--
                  function 
                  Add_Unique(TableName,Element)
                  if  
                  TableName[Element]== nil then 
                    TableName
                  [Element] =  Element
                  end
                  end

                  MyTable 
                  = {}
                  ListBox.DeleteItem("ListBox1", -1);

                  for 
                  1,do
                  rnd Math.Random(16);
                  Add_Unique(MyTable,rnd)
                  end

                  for a,z in pairs(MyTable) do
                  ListBox.AddItem("ListBox1"z"");
                  end 
                  و ان اردتم وضع الكود فى ظروف قاسية و معرفة الزمن الذى سيستغرقه يمكنكم تجربة
                  كود PHP:
                  -- Mohager Prevent Table Duplicate--
                  function 
                  Add_Unique(TableName,Element)
                  if  
                  TableName[Element]== nil then 
                    TableName
                  [Element] =  Element
                  end
                  end

                  MyTable 
                  = {}
                  t1 os.clock()
                  for 
                  1,50000 do
                  rnd Math.Random(110000);
                  Add_Unique(MyTable,rnd)
                  end
                  t2 
                  os.clock()
                  t3 t2 t1
                  tco 
                  Table.Count(MyTable);
                   
                  Dialog.Message("Notice"tco.. "    "..t3); 
                  الملف المفتوح الخاص بالحل مرفق
                  الى اللقاء مع تمرين آخر


                  الملفات المرفقة

                  تعليق


                  • #24
                    لم استطع قياس سرعة استجابة الكود
                    اضغط على الزر فتقع استجابة فورية
                    شـكــ وبارك الله فيك ـــرا لك ... لك مني أجمل تحية .
                    ************************************************** *******
                    هذا كود الظروف القاسية لا حظ كيف خرج عن السكة ولم يستعمل اليست بوكس

                    وهذا الكود النهائي لاحظ كيف كان منضبطا واتبع المسار الصحيح


                    فهل من تفسير اخي المهاجر لهذا الاختلاف
                    ملاحظة : بالنسبة لسرعة الاستجابة بين الكودين فهي متقاربة جدا جدا ولا تكاد تذكر

                    تعليق


                    • #25
                      الإنشغال هو سبب عدم المتابعة آسف جدا جدا ولكن لى تعقيب إن شاء الله على هذا الحل من طرفكم

                      عذرا على الإنشغال قليلا وعدم صفاء الذهن حاليا

                      تعليق


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

                        عذرا للتأخير مرة أخرى " بالنسبة للحل من طرفى " يكون كالتالى :

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


                        الملف المفتوح فى المرفقات


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

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

                        طبعا تعليقى هو عن إستخدامك هذا الكود بهذا الشكل :

                        كود:
                        for i = 1,6 do 
                        rnd = Math.Random(1, 6); 
                        Add_Unique(MyTable,rnd) 
                        end

                        تحياتى " أرجو أن أكون قد فهمت كودك صح " وطبعا مع تقديرى الكامل للحل من طرفكم " أخى المهاجر "
                        الملفات المرفقة

                        تعليق


                        • #27
                          السلام عليكم ورحمة الله وبركاته
                          مرحبا بمشاركتك و الحل المقدم من طرفك اخى عبود حتى و ان جاء متأخرا و لك العذر فى انشغالك

                          المشاركة الأصلية بواسطة عبود عبود مشاهدة المشاركة
                          أما إن كان موجودا تظهر رسالة تفيد بأن الرقم الذى تم توليدة هو كذا و موجود مسبقا فعليك إذن توليد رقم آخر من خلال المحاولة مرة أخرى والضغط على الزر للإستكمال حتى يتم إدخال جميع الأرقام المراد تخزينها دون تكرار داخل المصفوفة
                          التمرين لم يطلب اظهار اى رسالة للمستخدم و لا نريد ذلك لعدم مقاطعة سير البرنامج للسبب الآتى
                          المشاركة الأصلية بواسطة المـهاجر مشاهدة المشاركة
                          لأن التمرين يفترض ان يتعامل مع مصفوفة تتغير عناصرها
                          لتناسب عمليات ال Permutation (التباديل أو العشوائية)
                          التى قد تنتج عناصر مكررة بكثافة كبيرة
                          لاحظ أيضا
                          المشاركة الأصلية بواسطة المـهاجر مشاهدة المشاركة
                          المطلوب
                          كتابة برنامج
                          يرمى زهر (نرد) الطاولة اى يؤلف رقم عشوائى من 1 الى 6
                          و لستة مرات فقط
                          يقوم البرنامج بتسجيل القيم الغير متكررة الناتجة من هذه العملية فى مصفوفة ثم يعرضها فى ليست
                          ثم يعرض البرنامج رسالة تبين طول المصفوفة
                          فى الحل المقدم من طرفكم
                          يقوم المستخدم برمى الزهر يدويا بالضغط على الزر كل مرة ثم يرد على رسالة
                          لا يتفق ذلك مع متطلبات التمرين
                          بل يفترض ان تتم العملية آليا
                          يمكنك تعديل ملفك المفتوح ليتلائم مع فكرة التمرين و ابراز وجهة نظرك

                          و أعدك بالرد على كافة النقاط التى أثرتها بالتفصيل
                          تحياتى

                          تعليق


                          • #28
                            المشاركة الأصلية بواسطة المـهاجر مشاهدة المشاركة
                            السلام عليكم ورحمة الله وبركاته
                            مرحبا بمشاركتك و الحل المقدم من طرفك اخى عبود حتى و ان جاء متأخرا و لك العذر فى انشغالك



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


                            لاحظ أيضا


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

                            و أعدك بالرد على كافة النقاط التى أثرتها بالتفصيل
                            تحياتى
                            الرسالة مجرد توضيح للعثور على نفس العنصر المراد إدخالة إلى المصفوفة " طبعا يمكن إلغاؤها بعلامة -- قبلها فقط " ليست هى المشكلة التى يتكلم عنها مبرمج مخضرم مثلك أخى العزيز فهى مجرد توضيح للعملية فقط لا غير وللمبتدئين ولمن يريد التأكد من صحة أو عدم صحة سير العملية لباقى الزملاء الأعزاء

                            لا تعديل على الملف المفتوح سوى إلغاء سطر الرسالة فقط لا غير

                            تعليق


                            • #29
                              المشاركة الأصلية بواسطة عبود عبود مشاهدة المشاركة
                              الرسالة مجرد توضيح للعثور على نفس العنصر المراد إدخالة إلى المصفوفة " طبعا يمكن إلغاؤها بعلامة -- قبلها فقط " ليست هى المشكلة التى يتكلم عنها مبرمج مخضرم مثلك أخى العزيز فهى مجرد توضيح للعملية فقط لا غير وللمبتدئين ولمن يريد التأكد من صحة أو عدم صحة سير العملية لباقى الزملاء الأعزاء

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

                              فهل هناك ما يمنع من استخدامه ؟
                              خالص تحياتى

                              تعليق


                              • #30
                                هههههه يعنى إنت عايز التوليد للرقم العشوائى يتم بإستمرار حتى يتم إدخال كافة الأرقام داخل المصفوفة بدون تكرار ؟

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

                                تعليق

                                مواضيع تهمك

                                تقليص

                                المنتدى: القسم العام نشرت بواسطة: Reem2Rabeh الوقت: 04-23-2025 الساعة 04:27 PM
                                المنتدى: ضبط وتوكيد الجودة نشرت بواسطة: HeaD Master الوقت: 04-15-2025 الساعة 09:30 AM
                                المنتدى: التصنيع والانتاج نشرت بواسطة: HeaD Master الوقت: 04-11-2025 الساعة 01:08 PM
                                المنتدى: القسم العام نشرت بواسطة: نوال الخطيب الوقت: 03-19-2025 الساعة 03:07 AM
                                المنتدى: الكمبيوتر والإنترنت نشرت بواسطة: عوض السوداني الوقت: 03-18-2025 الساعة 07:22 AM
                                يعمل...
                                X