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

درس : كيف تفرز مصفوفة

مغلق
بدأه Dr.Pain في 21 سبتمبر 2005 · 4 رد · 712 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

البارحة سالني احد الاصدقاء كيف اقوم بفرز مصفوفة , لا اخفي عليكم سرا لقد كنت دائما اسال نفسي هذا السؤال

عندما كنت حديث العهد بالبرمجة فقلت لماذا لا اقوم بانزال هذا الموضوع في المنتدى !!!!!!!!!!!!!!!!!!!

اولا وباذئ ذي بدء يجب ان تعرف ان اول عنصر في المصفوفة هو العنصر صفر والعنصر الثاني هو العنصر رقم واحد

............................................................... وهكذا .

بسم الله نبدأ ............

المعطيات :

مصفوفة بطول 5 عناصر .

المطلوب :

فرز المصفوفة تصاعديا .

الحل :

بكل بساطة سوف نقوم باخذ قيمة عنصر العنصر الاول في المصفوفة وسوف نقوم بمقارنتها مع بقية قيم عناصر

المصفوفة فان كانت هناك قيمة اصغر منها فاننا سوف نقوم بابدال مواقع القيم اي اننا سوف نضع القيمة الصغرى

الجديدة في اول المصفوفة ومن ثم سناخذ القيمة التي في اول المصفوفة وسنضعها في موقع القيمة الصغرى

الجديدة ومن ثم ناخذ القيمة الصغرى الجديدة ونتابع عملية المقارنه حتى نصل الى النهاية فان لم نجد قيمة اصغر منها

تكون هي القيمة الصغرى لذا سنضعها في اول المصفوفة .

الا سوف ناخذ القيمة الموجودة في العنصر الثاني ونكرر العملية .

من الكلام نرى انه لدينا حلقتين من التكرار ( حلقة داخل حلقة ) !!!!!!!

الحلقة الاولى :

تبدا من الصفر حتى طول المصفوفة ناقص واحد ( لانه من البديهي ان عملية المقارنه سوف تنتهي

عندما ننهي مقارنة العنصر قبل الاخير بما بعده اي انه لا جدوى من اخذ العنصر الاخير للمقارنه لانه لا توجد عناصر

بعده كي نقارنه بها )

الحلقة الثانية ( جسم هذه الحلقة يكون داخل الحلقة الاولى ) :

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

الاول في المصفوفة .

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

الثاني .

الان دعني اسال سؤالا بسيطا !!!!!!

لو اخذنا القيمة الموجودة في الموقع صفر من اجل عملية المقارنه ووجدنا ان القيمة الموجودة في الموقع ثلاثة

اصغر منها فاننا حسب الكلام السابق سوف نقوم بوضع القيمة الموجودة في الموقع ثلاثة مكان القيمة الموجودة في

الموقع صفر ومن ثم سناخذ القيمة الموجودة في الموقع صفر وسنضعها مكان القيمة الموجودة في الموقع ثلاثة

ومن ثم سنكمل عملية المقارنه وذلك بمقارنة القيمة الجديدة الموجودة في الموقع صفر مع بقية القيم الموجودة

بعد الموقع ثلاثة .

من اجل هذا الغرض سوف نقوم بوضع قيمة الموقع صفر داخل متغير ومن ثم سوف نقوم بمقارنة قيمة هذا المتغير

مع القيم فلو فرضنا ان القيمة الموجودة في الموقع ثلاثة اصغر من القيمة التي يحتويها المتغير ( والتي هي بالاصل

قيمة الموقع صفر ) فاننا سوف نجعل قيمة الموقع صفر تساوي قيمة الموقع ثلاثة ومن ثم سنجعل قيمة الموقع ثلاثة

تساوي قيمة المتغير ومن ثم نجعل المتغير يساوي قيمة الموقع صفر من اجل اكمال عملية المقارنه .

الان دعنا نقوم بصياغة الكلام السابق برمجيا :

اذا كنا نريد مصفوفة بطول خمسة عناصر فاننا نعلن عن المصفوفة بالشكل التالي :

Dim Arr(4) As Integer

على اعتبار ان اول عنصر هو العنصر الموجود في الموقع رقم صفر واخر عنصر هو العنصر الموجود في الموقع رقم اربعه

لذا ينتج لنا خمسة عناصر .

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

Arr.Length = 5

إذن الموقع قبل الاخير = Arr.Length - 2 .

الموقع الاخير = Arr.Length - 1 .

        Dim Arr(4) As Integer

//////// الاعلان عن المصفوفة

 Dim Temp As Integer

///////// المتغير الذي سيتم تخزين القيمة التي ستتم على اساسها المقارنه .

  Dim I As Integer

/////// متغير الحلقة الاولى

 Dim J As Integer

///////// متغير الحلقة الثانيه

  Arr(0) = 9
        Arr(1) = 3
        Arr(2) = -8
        Arr(3) = 12
        Arr(4)

= 0

/////// تعبئة المصفوفة بالقيم .

 For I = 0 To Arr.Length - 2

/////// الحلقو الاولى تبدا من صفر وتنتهي عند الموقع قبل الاخير

     Temp = Arr(I)

اسناد القيمة التي ستتم على اساسها المقارنه الى المتغير Temp .

      For J = I + 1 To Arr.Length - 1

////////// جعل الحلقة الثانية تبدا من العنصر الذي يلي العنصر الذي ستتم المقارنه على اساسه فان كان عنصر

المقارنة هو العنصر صفر اي ان قيمة I تساوي صفر فان قيمة J ستكون هي واحد اي I + 1 وإن كانت قيمة

I تساوي واحد فان قيمة J سوف تساوي 2 ........... وهكذا .

       If Arr(J) < Temp Then

الان دعنا نفترض اننا عند اول مقارنه اي اننا نقارن القيمة الموجودة في الموقع صفر مع بقية القيم .

اذن سنقول اذا كانت قيمة العنصر الحالي الموجود في المصفوفة Arr اصغر من قيمة المتغير Temp

(والتي هي بالاساس قيمة الموقع صفر ) فقم بجعل القيمة الموجودة في الموقع صفر تساوي القيمة الحالية

واجعل القيمة الحالية تساوي القيمةالتي كانت موجودة في الموقع رقم صفر ومن ثم اسند قيمة الموقع رقم صفر

الى المتغير Temp كي تتم نستكمل عملية المقارنه على اساسها .

                    Arr(I) = Arr(J)
                    Arr(J) = Temp
                    Temp = Arr(I)
                End If

            Next J

        Next I

 For I = 0 To Arr.Length - 1
            ListBox1.Items.Add(Arr(I))
Next I

وهذا هو الكود السابق بدون تعليقات :rolleyes: :rolleyes: B) :

     Dim Arr(4) As Integer
        Dim Temp As Integer
        Dim I As Integer
        Dim J As Integer
       

        Arr(0) = 9
        Arr(1) = 3
        Arr(2) = -8
        Arr(3) = 12
        Arr(4) = 0


        For I = 0 To Arr.Length - 2

            Temp = Arr(I)

            For J = I + 1 To Arr.Length - 1

                If Arr(J) < Temp Then
                    Arr(I) = Arr(J)
                    Arr(J) = Temp
                    Temp = Arr(I)
                End If

            Next J


        Next I


        For I = 0 To Arr.Length - 1
            ListBox1.Items.Add(Arr(I))
        Next

اخوكم Dr.Pain

تم تعديل هذه المشاركة بواسطة crazy-man في 22 سبتمبر 2005 في 15:21

#2

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

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

اخي الحبيب Dr.Pain لو تعلم كم سرني ان اراك على صفحات هذا المنتدى الرائع ( لا اخفيك اني اشتاقك كثيرا اخي الحبيب ) و كم هو رائع الموضوع الذي طرحته.

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

انني استخدمت متغير مؤقت Temp للتبديل بين القيم فلو كان لدي متغييرين a و b و اريد ان ابدل بين قيمهم فإن الطبيعي هو استخدام متغير ثالث temp لحفظ القيم مؤقتا لتبدليها بالشكل التالي:

Temp = a
a = b
b = Temp

وسؤاله كان هو ... كيف نقوم بالتبديل بدون المتغير الثالث يعني بدون اي متغير وسيط في عملية التبديل ... اتذكر ان السؤال راقني كثيرا حينها و الاجابة المقترحة هي:

a = a + b
b = a - b
a = a - b

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

Dim Arr(10) As Integer

Arr.Sort

هذا بفرض ان المصفوفة ملئية بالارقام.

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

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

مواضيع برمجية تقنية جديدة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال خدمة الـ RSS في برامجنا ومواقعنا ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج للبحث في الملفات ومحتواياتها (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• فئة للتراسل بين برنامجين في جهاز واحد ! (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

مواضيع برمجية تقنية قديمة

----------------------------------------------------------------------------------------------------------------------------------------------

• إستغلال رسائل البالونات Balloons في الوينذوز أكس بي(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• مقالة : لماذا يجب ان نعتني بشفرات برامجنا !؟- (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• لمطوري البرامج و مواقع الويب - برنامج تركيب ألوان - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : بسيط للتحكم بالنظام, عن طريق الريجستري - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• برنامج : لتقييد و منع تشغيل البرامج الاخرى - (VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• النوافذ المنبثقة و طريقة لإستغلالها في برامجنا -(VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• تقنية الإستدعاء الذاتي - (VB.NET , VB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• مصفوفات الأدوات Control Arrays افكار وتلميحات ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

• أفكار و تلميحات[ المعنى الحقيقي للـ True و False ] - أمثلة (VB.NETVB6.0)

----------------------------------------------------------------------------------------------------------------------------------------------

• دوال الـ APIs و مايقابلها في الدوت نت ! - (VB.NET)

----------------------------------------------------------------------------------------------------------------------------------------------

#3

الف شكر أخي العزيز Dr.Pain على هذا الدرس الجميل

و مرحبا و أهلا بأخي و أستاذي العزيز رغيد كيف حالك ان شاء الله بخير :)

#4

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

اود في البدء ان اشكرك اخي على هذا الجهد المبذول

والله روعة في الابداع وافكار نتمنى ان نجد المزيد منها

واقول لاخي رغيد ان الكود الذي استخدمه لتبديل القيم باستخدام متغيرين فيه كان ايضا روعة في الابداع

والف الف شكر لكم اخواني

اخوكم المحب mamrya

(h) (h) (h) (h)

#5

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

اخي وصديقي ومعلمي رغيد والله رووووووووووووووووووووووووووعه

والكبير كبير :rolleyes: :) :rolleyes: :)

اسال الله العلي العظيم ان يوفقك يا رغيد فانت كنت ولا زلت خير الاخ والصديق والمعلم لي :lol: :lol:

ربنا يوفقك يا رغيد والله اقولها من قلبي :rolleyes: :rolleyes:

اخوك Dr.Pain

هذا الموضوع مغلق.

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