بعد اذن اختي طالبة علم
ماحبيت اطرح موضوع لها لشرح For Loops لوحدها
بصراحه خفت تشغلني عن موضوع الsql
ومن باب الاكمال لموضوع السي++
.............................. ...............
الجزاء الاول.
من اساسيات لغات البرمجة ولا يمكن الاستغناء عنها نهائيا ...
فأغلب خوارزميات البرمجة غالبا ماتخضع للتكرار ,,,,
عموما سنبدأ بتعريف بنية ال For loop في لغة السي والسي بلس بلس ...
وبالمناسبة صيغة ال For Loop في لغة السي والسي بلس بلس ,,, هي الاكثر مرونة على الاطلاق في جميع لغات البرمجة ... والجافا كذلك ...
وتاتي المرونة من الصيغة التي تعرف بالشكل التالي ,,,
مثال رقم 1 :
(++ for ( int x =0 ; x < 10 ; x
{
cout << "HELLO " // Our Out Put
; cout << endl
}
لاحظ الفواصل في جسم الحلقة الذي باللون الارجواني ... توجد ثلاثة مناطق لادخال قوانين الحلقة ...
الحلقة السابقة بسيطة جدا ,, وتعني الاتي ,,,
ركز في ها الوصف فهو مفتاح حل جميع مشاكل عدم فهم الحلقات ....
" يا كمبيوتر نفذ ما بين القوسين {} مادامت x < 10 ,, والشرط موجود في البرامتر الثاني....
وكل مرة تنفذ فيها الاوامر التي بين القوسين {} اذهب الى أول الحلقة وزد x بمقدار واحد " يحدد مقدار الزيادة اخر بارمتر في الحلقة " ,,
وبدأ أول x أول ماتبدا الحلقة بالقيمة صفر ,,, ويحدد البداية أول بارمتر في جسم الحلقة ,, "
وطبعا سيتم الخروج نهائيا من الحلقة اذا اختل الشرط الذي في الخانة الثانية من جسم الحلقة ...
أي سيتم كل مرة طباعةالعبارة " HELLO " في الشاشة وستتم هذه العملية 10 مرات ... كل واحدة في سطر جديد ...
الان أين المرونه في ذلك ?? ... لاأقصد التعقيد وانما فهم الهيكلية بشكل جيد سيساعدك جدا على الفهم المتناسق ,, سنأتي للمرونة بعد قليل
1) الان بهذه الصيغة يمكنك تنفيذ بعض الاوامر التي تريدها مرات عديدة اما بعدد معين تريده .. مثلا 10 مرات 20 مرة 100 مرة 100000 مرة ...
2) أو تنفيذ الاوامر مرات عديدة اذا تحققت بعض الشروط ....
توجد عدة حالات لعمليات التكرار بعدد معين كما في الحالة رفم " 1" أعلاه...
وسنتستعرضها الان ,,,
قي بعض الانواع عندما نريد التكرار لشيء ثابت لايعتمد على العدد المكرر كما في المثال التوضيحي في الاعلى " طباعة السلسلة HELLO لايعتمد على أي شيء لأنه ثايت" ... دائما يكفي ان تجعل الحلقة على صيغة المثال أعلاه ... وفقط تغيير البارمتر الثاني ليكون اصغر من العدد الذي تريده أن يتكرر ...
نوع اخر يعتمد على المتغير الذي في الحلقة بشكل أو باخر مثلا ... خذ عندك المثال التالي الذي نقوم فيه بطباعة القيم التي في مصفوفة معينة ,, مثلا نريد أن نطبع 15 قيمة من عناصر مصفوفة معينة وبالتررتيب من أول عنصر وحتى العنصر رقم 15 ...
نقرض لدينا مصفوفة int تسمى W حجمها الاقصى 200عنصر وقمنا بوضع بيانات في 90عنصر فيها وبالترتيب ... ونريد أن نطبع أول 15 عنصر على الشاشة ...
في هذه الحالة سنتستفيد من نفس المتغير الذي يعبر عن الشرط في الحلقة ليكون هو رقم العنصر المراد طباعته ... ولا داعي لأنشاء متغير جديد ليقوم بهذه العملية ...
مثال رقم 2 :
(++ for ( int x =0 ; x < 15 ; x
{
; [cout << W [x
; cout << endl
}
هنا سيتم طباعة 15 عنصر من المصفوفة كل واحد في سطر جديد ....
يمكن تنفيذ هذه العملية بشكل اخر غير عملي كالتالي ...
مثال رقم 3 :
; z = 0
(++ for ( int x =0 ; x < 15 ; x
{
; [cout << W [z
; cout << endl
; ++z
}
للحلقة أعلاه نفس عمل الحلقة التي قبلها ...
نفرض مثلا أننا نريد طباعة العناصر الفردية فقط من المصفوفة وحتى العنصر رقم 41.... عندها سنغير التالي ...
مثال رقم 4 :
( for ( int x =1; x < 42; x += 2
{
; [cout << W [x
; cout << endl
}
لاحظ أننا غيرنا البداية الى 1 والشرط الى اصغر من 41 ومقدار الزيادة الى 2 بدل من 1 ,,,
لاحظ دائما أن قيمة المتغير x في كل دورة للمصفوفة تكون قيمته قيمة فردية ...
ستكون الاعداد 1 , 3 , 5 ,7 ,9 ... وهكذا حتى اخر عدد 41 لأن ال 41 أصغر من ال 42 وهو الشرط الذي في البارمتر الثاني ....
قارن هذا المثال بالمثال رقم 2 وستتعرف أكثر على الفكرة ...
الان فلنطور المثال قليلا ولنفرض اننا نريد طباعة العناصر التي تقبل القسمة على 5 وحتى العنصر رقم 80 مثلا ...
ستكون الصيغة كالتالي ...
مثال رقم 5 :
( for ( int x =0; x < 81; x += 5
{
; [cout << W [x
; cout << endl
}
سيحل المثال أعلاه المشكلة لأن مقدار الزيادة يساوي 5 وأول عدد هو الصفر فدائما القيمة x تكون من مضاعفات الخمسة وتقبل القسمة على 5 ...
يمكن كتابة المثال أعلاه على نحو اخر كالتالي مع أن الطريقة السابقة أفضل من ناحية الاداء ....
مثال رقم 6 :
(++ for ( int x =0 ; x < 81; x
{
(if ( x % 5 == 0
{
; [cout << W [x
; cout << endl
}
}
هذا المثال يدخل شرط اختبار اضافي داخل الحلقة لاداعي له .. ومن الملاحظ أن الحلقة يمكن ان تكتب بأكثر من طريقة ويجب محاولة البحث عن الافضل من ناحية الاداء , وسهولة الفهم .... مثلا المثال السابق مقارنة بالمثال رقم 5 سيأخذ وقتا أطول في التنفيذ لأن الكمبيوتر سيقوم بعملية التكرار والاختبار 81 مرة .... اما في المثال رقم 5 سيقوم بالختبار 17 مرة فقط ...
لاحظ اننا لايمكننا كتابة الشرط (if ( x % 5 == 0 في جسم الحلقة في الخانة الثانية المخصصة للشرط ...
على الشكل التالي ...
مثال 7 :
for ( int x=0 ; x % 5 == 0 ;x ++ ) // Our Foor loop
{
; [cout << W [x
; cout << endl
}
المثال أعلاه لن يعمل لأن الشرط في الدورة الثانية سيختل وسيخرج البرنامج عن جسم الحلقة فورا ...
.............................. .............................. .......
أخيرا يمكنك التلاعب بجسم الحلقة كما تشاء يعني ....
يمكنك الاستغناء عن أحد الاجزاء الثلاثة الرأيسية الخاصة بجسم الحلقة ....
مثلا لجعل الحلقة تستمر بدون أي شرط " ولن تتوقف أبدا " يعني جعل الحلقة لانهائية يكفي أن تحذف خانة الشرط في البارمتر الثاني من جسم الحلقة لتصبح على الشكل التالي ...
(++ for ( int x =0 ; ; x
{
cout << "HELLO " ;t
; cout << endl
}
سيتم هنا طباعة العبارة " HELLO " بشكل لانهائي ولن يتوقف البرنامج عن العمل ...
يمكنك ايضا الاستغناء عن أي طرف من الاطراف ... مثلا اذا كانت القيمة الابتدائية ل x معرفة مسبقا لاداعي لوضعها مرة أخرى في البارمتر الاول ...
(++ for ( ; x < 81; x
ويمكن الاستغناء عن مقدار الزيادة ووضعه داخل جسم الحلقة على الشكل التالي ...
( ; for ( int x =0 ; x < 10
{
; ++x
}
وأخيرا يمكنك الاستغناء عن كل البرمترات الثلاثة لتكون الحلقة لانهائية بشكل مباشر " لأنه لايوجد شرط " وتكون على الشكل التالي ...
for ( ; ; ) // Our infinite Loop
الامثلة كثيرة جدا في هذا المساق لكننا سنكتفي بهذه الامثلة الابتدائية التي ستشرح المطلوب باذن الله
شكرا لكي اختي على هذه المساحه
أرق الاماني بكل جميل