السلام عليكم ورحمة الله وبركاته ............
البارحة سالني احد الاصدقاء كيف اقوم بفرز مصفوفة , لا اخفي عليكم سرا لقد كنت دائما اسال نفسي هذا السؤال
عندما كنت حديث العهد بالبرمجة فقلت لماذا لا اقوم بانزال هذا الموضوع في المنتدى !!!!!!!!!!!!!!!!!!!
اولا وباذئ ذي بدء يجب ان تعرف ان اول عنصر في المصفوفة هو العنصر صفر والعنصر الثاني هو العنصر رقم واحد
............................................................... وهكذا .
بسم الله نبدأ ............
المعطيات :
مصفوفة بطول 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