فتحات العرب

AD (728x60)

Slider

بلوجر

منوعات

بالصوت وصورة

تكنلوجيا

أقسام المدونة

حصريات

الاخبار

أعلان

Blogroll 2

أعلان

أعلان

صور فلكر

Link List

تابعونا على

Video

تقارير

منوعات

الاثنين، 30 يونيو 2014

خوارزمية ترتيب الأعداد

مشاركة و تعليق كدعم كبي لنا أحبائي الكريم
السلام عليكم و رحمة الله و بركاته ،
لا تبدأ بمحاولة التفكير في هذه الخوارزمية، قبل أن يكون أمامك كأس أو فنجان، من الشاي أو القهوة، بالإضافة إلى اطلاع على المصفوفات Arrays وحلقات التكرار For.
سنستعمل في خوارزميتنا هذه مصفوفة واحدة وأربع حلقات تكرار، إليك طريقة الحل، وكل ما عليك أن تفكر:
كما في المشروع في المرفقات، تجد أن هذه الخوارزمية تعتمد على ضغط زر أوامر CommandButton، فيظهر لك مربع حوار يطلب منك إدخال عدد، وهذا المربع من النوع InputBox، سيظهر لك هذا المربع عشر مرات، في كل مرة تدخل عدداً ما، فإذا أتممت عشر المرات، ستطبع هذه الأعداد على النافذة بالترتيب من الأصغر إلى الأكبر.
والآن العمل هنا أربع خطوات:
1- عليك بتعريف مصفوفة تحوي عشرة عناصر.
2-عندما يضغط المستخدم الزر، يظهر له مربع الحوارفيضع فيه عدداً ما، ثم يضغط Ok فتحفظ قيمة العدد في المتغير الأول من المصفوفة، ثم يظهر مرة أخرى ويضع المستخدم العدد، وتحفظ القيمة في المتغير الثاني من المصفوفة،، وهكذا، حتى تظهر المربعات عشر مرات، وهذه العملية تتم باستخدام جملة For الأولى.
3-الآن ترتيب الأعداد، عليك أن تركز معي جيداً، وإن كنت أنهيت كأس أو فنجان، الشاي أو القهوة، فعليك بأخرى أو آخر.
سنفرض جدلاً أن المستخدم اختار الأعداد التالية، ونطبق المثال عليها:
3-7-10-8-1-9-5-2-4-6.
سوف نقوم أولاً بمقارنة العدد الأول بكل عدد من الأعداد الأخرى، فإن كان العدد المقارَن به أصغر من العدد الأول، نبدل مكانيهما، انظر معي الآن:

هنا تتم مقارنة العدد 3 بالـ7، وبما أن 3 أصغر من 7، فلا يحدث شيء ويكمل المقارنة، ثم يقارن بالـ10 و الـ8، إلى أن يصل إلى الـ1، وبما أن 3 أكبر من 1، فإن البرنامج يبدل مكاني العددين ليصبح الترتيب كما يلي:

ثم يكمل المقارنة، فيقارن العدد الأول الذي أصبح ال،1، بالأعداد الباقية، فيجد أن 1 في مثالنا هذا أصغر من كل الأعداد الأخرى ، لذلك سيكمل المقارنة دون أن يبدل شيئاً إلى أن يصل إلى الـ6، فيكون عندها قد أنهى مقارنة العدد الأول بالأعداد الأخرى، ثم ينتقل إلى العدد الثاني، ويبدأ المقارنة:
وما إن يصل إلى الـ3 حتى يبدل بين العددين، لأن 7 أكبر من 3، وتستمر الحلقة هكذا حتى يصل إلى العدد الأخير.
تحتاج هذه الخطوة إلى حلقتي For متداخلتين، الأولى تقارن العدد المختار بكل عدد آخر، والثانية تنتقل بك من العدد الأول بعد أن تمت مقارنته بالأعداد الأخرى إلى العدد الثاني، وتبدأ المقارنة، ثم الثالث....
وبعد أن تنتهي الحلقة ستجد أن الأعداد أصبحت مرتبة من الأصغر إلى الأكبر، وإن لم تصدق، فجرب ذلك على الورق لتجد النتيجة صحيحة.
4- الخطوة الرابعة هي طباعة الأرقام على النافذة بعد أن تم ترتيبها، وتحتاج إلى حلقة For الرابعة، لتقوم فيها بطباعة الأرقام المحفوظة في متغيرات المصفوفة واحداً تلو الآخر، ليتفاجاً المستخدم أن الأعداد أصبحت مرتبة.

الآن حاول، معك ألف محاولة، فإن لم تستطع فتعال واقرأ الحل.

الحل:
أولاً سنعرف المصفوفة، ونعرف متغيراً آخر ستعرف فائدته بعد قليل، بالإضافة إلى متغيرات العد في جمل For:

Dim Numbers(10) As Integer, i As Integer, j As Integer, B As Integer

الآن، عندما يضغط المستخدم الزر، تظهر له عشرة مربعات الواحد تلو الآخر، وهنا نستخدم حلقة For الأولى:

For i = 0 To 9
Numbers(i) = InputBox("Enter the number please")
Next


أما الآن فترتيب الأعداد، أين كأس الشاي؟!
كما قلنا، سنستخدم حلقتي For متداخلتين، انظر معي الآن:

For i = 0 To 9
For j = i To 9
If Numbers(i) > Numbers(j) Then
     B = Numbers(i)
     Numbers(i) = Numbers(j)
     Numbers(j) = B
End If
Next
Next


في الكود السابق بدأنا الحلقة الكبيرة التي عدادها هو المتغير i، وهو يمثل العدد الذي سنقارن به الأعداد الآخرى، ثم تبدأ الحلقة الثانية، ونلاحظ أننا قلنا له أن يجعل البداية التي يبدأ العد فيها هي نفسها المكان الذي وصل إليه المتغير i لكي لا تتم المقارنة بالأعداد التي قبل العدد الذي نريده، مما سيحدث خللاً في العمل، (جرب ولاحظ الخلل).
وثم نأخذ الأعداد التي سنقارن بها واحداً واحداً، فإن كان أحدها أصغر من العدد الذي نقارن به، تم التبديل، وإن لم يكن يكمل المقارنة، فإذا تمت مقارنة كل الأعداد يهذا العدد، انتهت المقارنة وخرج من الحلقة الصغيرة، وعندها ستزيد قيمة المتغير i مرة واحدة، أي إنه سينتقل إلى العدد الثاني ويبدأ المقارنة من جديد بالأرقام التي تليه، ويكرر هذه العملية حتى يصل المتغير i إلى 9، وعندها سيكون الترتيب قد تم، ويبقى طباعة الأرقام على النافذة.
حاول إكتشاف فائدة المتغير B.
أما الحلقة الأخيرة فتقوم بطباعة الأرقام على النافذة:

For i = 0 To 9
Print Numbers(i)
Next


حاول فهم الكود جيداً وقراءته عدة مرات، أعلم أنه قد يكون معقداً قليلاً عليك كمبتدئ، ولكن يجب أن تحاول فهمه وتجريب عمله أكثر من مرة، ثم حاول أن تطوره.
ماذا؟ تريده بالـC++ إليك الكود التالي مع اختلافات بسيطة:

int A[10],B;
 for (int y=0;y<10;y++)
 {
  cout<<"Write the numbers before sorting\t";
  cin>>A[y];
 }
 for (int i=0;i<10;i++)
 {
   for (int j=i;j<10;j++)
   {
    if (A[j]<A[i])
    {
B=A[i];
A[i]=A[j];
A[j]=B;
    }
  }
  cout<<endl<<"Here are the numbers after sorted\t"<<A[i]<<endl;
 }


هذا إن كنت تعرف استخدام C++ أما إن كنت لا تعرف فأغمض عينيك ولا تنظر.
نلتقي، بإذن الله تعالى، مع الخوارزمية التالية.

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

صممت بواسطة :

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

0 التعليقات:

إرسال تعليق

Find Us On Facebook

تابعنا على فيس بوك
اضغط على اعجبني - like ليصلك كل ما هو جديد

 
كل الحقوق محفوظة © محترفين البرمجة

تعريب وتطوير S i R - D o O o M