الأهداف
For ان يستعمل المتدرب حلقة
التكرار
While ان يستعمل المتدرب حلقة التكرار
Do....while ان يستعمل المتدرب حلقة التكرار
أن يقارن المتدرب بين جمل حلقات التكرار
أن يخرج المتدرب من حلقة التكرار
أن يتعرف المتدرب على كيفية تسمية حلقات
التكرار
العرض
أهلا ومرحبا بكم جميعا ونواصل
مسيرتنا ـ بعون الله ـ مع الجافا
مرحبا
بك استاذنا وكل عام وأنت بخير بمناسبة
بدء العام الخامس من عمر موقعكم ـ المدرس
العربي ـ وندعو الله تعالى أن يجعله في
ميزان حسناتكم
شكرا جزيلا وأرحب بك صديقي
العزيز
ما
عنوان درسنا اليوم ؟
نتعرف اليوم على كيفية تكرار
عمل بواسطة حلقات التكرار ولهذا عنوان
درسنا اليوم هو حلقات التكرار
ما
المقصود بحلقات التكرار ؟
ببساطة حلقة التكرار جملة أو
مجموعة من الجمل تتكرر ضمن البرنامج
ويمكن التحكم فيها بحيث تتكرر عدة مرات
أو تتكرر بلا نهاية وجملة حلقة التكرار
تجعل الحاسب يعود الى نفس الموقع أكثر من
مرة
ما
الفائدة من حلقات التكرار ؟
في برامج الجافا وبريمجاتها
سوف تجد نفسك محتاجا لحلقات التكرار في
كثيرا من الأمور منها
الانتظار حتى تحدث استجابة من المستخدم
مثل نقر المستخدم على زر
يمكنك توظيفها لجعل الحاسب ينتظر فترة
دون عمل شئ كما في برامج تحريك الرسوم
تكرار عرض نص متحرك في بريمج
تكرار عرض مسمع موسيقي في بريمج
ما هي
الجمل التي تستعمل كحلقات تكرار ؟
في لغة الجافا يوجد ثلاث جمل
تستعمل حلقات تكرار وهي
for
while
do....while
وهل
تقوم هذه الجمل الثلاث بنفس العمل ؟
نعم تقوم بنفس العمل حيث يمكن
اعداد أي منها لتقوم بعمل الأخرى ويعتمد
اختيار جملة حلقة التكرارعلى تفضيلك
الشخصي ونحن سوف نتدرب على عمل الجمل
الثلاث ونترك لك اختيار ما يناسبك
for
شكرا أستاذي العزيز ولنبدأ مثلا الآن
بحلقة التكرار فور
حلقة التكرار فور التي اخترت
أن نبدأ بها هي الحلقة الأكثرتعقيدا
وتستعمل عندما نريد أن نكرر مقطع من
البرنامج عدد معين من المرات وأيضا يمكن
استعمالها اذا كان عدد المرات التي ستكرر
فيها الحلقة متغيرا
من
فضلك استاذي الكريم أريد مثالا يبسط
الموضوع ؟
لا عليك صديقي العزيز ولم
أقصد بقولي عن حلقة التكرار فور بأنها
أكثر تعقيدا أن أعقدك ولكن سيتضح لك
المقصود بعد أن نتعرف على الجمل الثلاث
ــــ ولنبدأ الآن المثال المقصود
for ( int number = 0; number < 1000; number++) {
if ( number % 14 == 0)
system.out.println("#:" + number);
}
من
فضلك أريد التفسير لهذا المثال وليكن
مفصلا نوعا ما ؟
لك ما تريد ولله الحمد والمنة
أولا الغرض من حلقة التكرار ـــ عرض كل
الأعداد الواقعة بين 0 و 999 والتي تقبل
القسمة على 14 بدون باقي
ثانيا ـ المتغير نمبر يسمى بالعداد حيث
تحتوي كل حلقة تكرار فور على متغير
يستعمل لتحديد متى تبدأ حلقة التكرار
ومتى تنتهي
ثالثا ـ تتكون جملة حلقة التكرار فور من
ثلاث أجزاء هي
جزء التمهيد ــ وفيه يتم تحديد قيمة
أولية للمتغير نمبر تساوي صفرا ويمكنك في
هذا الجزء إعداد المتغير العداد الذي
ترغب في استعماله ضمن الجملة فور وأود أن
أوضح أنك يمكنك إنشاء المتغير ضمن الجملة
فور كما في المثال أو إنشاء المتغير في
موضع سابق من برنامجك ولكن في كلتا
الحالتين يجب تحديد قيمة أولية للمتغير
في هذا الجزء من الجملة فور وبحيث تكون
هذه القيمة هي قيمة المتغير عندما تبدأ
حلقة التكرار
if الجزء المشروط ــ في هذا الجزء
يوجد اختبار مشروط موجود في الجملة
true ونلاحظ أن الشرط يجب أن يبقى صحيحا
وذلك حتى تستمر حلقة التكرار حيث أن حلقة
التكرار تتوقف عندما يصبح الشرط خطأ وفي
المثال الذي نتناوله الآن تتوقف حلقة
التكرار عندما تصبح قيمة المتغير نمبر
أكبر من 1000 ـــــ
جزء التغيير ــ هذا الجزء عبارة عن
جملة وظيفتها تغيير قيمة المتغير نمبر
باستعمال مؤثر الزيادة بواحد ويتم تنفيذ
هذه الجملة في كل عملية تكرار لحلقة
التكرار وهنا أود التأكيد على ضرورة
تغيير العداد وإلا فلن تتوقف حلقة
التكرار وفي المثال يزداد المتغير نمبر
بواحد باستعمال معامل الزيادة بواحد ++
واذا لم يتغير المتغير نمبر فانه سيظل
عند القيمة الأولية 0 ويبقى الشرط صحيحا
عفوا
أستاذي الكريم ما الذي يتم تنفيذه من هذا
المثال في كل عملية تكرار ؟
في كل عملية تكرار لحلقة
التكرار تنفذ الجمل الموجودة ضمن
الحاصرتين { } اذا المنطقة المحددة
بالحاصرتين يتم فيها العمل الرئيسي
لحلقة التكرار وفي مثالنا توجد جملتين
ضمن الحاصرتين
{
if ( number % 14 == 0)
system.out.println("#:" + number);
}
ونلاحظ أن هذه الجملة سوف
تنفذ 1000 مرة حيث تبدأ حلقة التكرار بجعل
المتغير نمبر مساويا للصفر ثم تضيف بعد
ذلك 1 في كل مرة من مرات التكرار وتتوقف
عندما لا تكون قيمة المتغير أصغر من 1000
وكلما كان العدد قابلا للقسمة على 14 بدون
باق يعرض هذا العدد بجانب النص :#
ولكن متى يكون من الضروري وضع
الحاصرات ؟
يكون من الضروري وضع الحاصرات
اذا كانت الحلقة فور تحتوي على أكثر من
جملة ولكن اذا كانت تحتوي على جملة واحدة
فان الأمر متروك لك حيث يمكنك استخدامها
أو تركها ولكن يستحسن استعمالها لتسهيل
فهم البرنامج
for (int q = 0; q < 66; q++)
system.out.println("لن أفعل
هذا مرة أخرى ");
تعرض هذه الحلقة المكونة من
جملة واحدة بدون حاصرات النص ــ لن أفعل
هذا مرة أخرى ـ 66 مرة وهذا يذكرنا بعقاب
المدرسين الأوائل للتلاميذ في المرحلة
الابتدائية حيث يطلب المعلم من التلميذ
أن يكرر هذه الجملة 66 مرة لعقابه على خطأ
ارتكبه
طيب يا
أستاذ اذا أردنا اعداد أكثر من متغير
خلال جزء التمهيد فماذا نعمل ؟
اذا اردت إعداد أكثر من متغير
في جزء التمهيد فعليك التفريق بينها
بالفواصل ونلاحظ أن كل جزء من الحلقة فور
يفصل عن الاجزاء الأخرى بفاصلة منقوطة
ولكن هل يمكن أن تكون أقسام
حلقة التكرار فارغة ؟
نعم يمكن أن تكون أقسام حلقة
التكرار فارغة وهذا عندما تكون القيمة
الأولية للمتغير العداد قد تحددت في جزء
سابق من البرنامج
وقفة هنا أستاذي الكريم حيث
اتذكر الآن الخطأ المنطقي والذي يدعوني
الى ذلك هو الفاصلة المنقوطة فحيث أن
العديد من جمل الجافا تنتهي بفاصلة
منقوطة اذا يمكن وضع فاصلة منقوطة عند
نهاية الجملة فور فماذا يحدث ؟
كلامك صحيح فوضع الفاصلة
المنقوطة عند نهاية جملة فور يضع الجملة
التي بعدها خارج نطاق حلقة التكرار وبسبب
ذلك لن يحدث شيء عند تنفيذ حلقة التكرار
وعند ترجمة البرنامج لن تحدث أخطاء وفي
نفس الوقت لن نحصل على النتائج المطلوبة
هل
باقي حلقات التكرار تتكون من ثلاثة أجزاء
؟
while لا حلقة
التكرار التي سوف نتناولها الآن لا تحتوي
على أقسام وحلقة التكرار هذه هي
while
حلقات التكرار
في هذه الحلقة لا يوجد عدة
أجزاء ولكن يجب أن يكون هناك شرط محدد
وعندما يصل البرنامج الى جملة حلقة
التكرار للمرة الأولى يقوم باختبار
الشرط المحدد فإذا كان غير صحيح فانه
يتجاهل الجمل الموجودة داخل حلقة
التكرارأما اذا كان الشرط صحيحا فإن
البرنامج يقوم بتنفيذ جمل حلقة التكرار
ثم يعاود البرنامج اختبار الشرط فإذا لم
يتغير الشرط موضع الإختبار داخل حلقة
التكرار فإن الحلقة تواصل التكرار الى ما
لا نهاية وهكذا
do....while
عملية بسيطة وماذا عن حلقة التكرار
do.......while
حلقات التكرار
لكي ندرك الفرق بين الحلقتين
اليك هذا المثال
لنفرض مثلا أن الآنسة أروى تريد الذهاب
الى الكوافير فان أمامها طريقتان
الأولى أن تذهب الى الكوافير ثم تخبر
والدتها
الثانية أن تستأذن أولا من والدنها قبل
أن تذهب الى الكوافير
do...while الطريقة الأولى تشبه حلقة التكرار
بمعنى أنه سوف يتم تحقق الشرط لمرة واحدة
قبل أن يختبر يعني أن الآنسة أروى سوف
تذهب لمرة واحدة الى الكوافير سواء وافقت
والدتها أم لم توافق ومن هنا يتضح لنا أنه
في حلقة التكرار دو ....هويل يتم تنفيذ
الشرط أولا قبل التحقق من صحة الشرط موضع
الاختبار فعندما يصل البرنامج خلال عمله
للمرة الأولى الى حلقة التكرار دو فانه
ينفذ الجمل الموجودة بين الجملة دو
والجملة هويل بشكل تلقائي ثم يجري بعد
ذلك التحقق من صحة شرط الجملة هويل فاذا
كان صحيحا فن البرنامج يعاود تكرار حلقة
التكرار مرة أخرى أما اذا كان الشرط غير
صحيح فان حلقة التكرار سوف تتوقف
ولكن
يا أستاذي كيف يمكنني الخروج من حلقة
التكرار ؟
للخروج من حلقة تكرار قلنا
سابقا أن الشرط موضع الاختبار اذا كان
غير صحيح فان هذا يوقف حلقة التكرار
طيب
اذا أردت أن أوقف حلقة التكرار مباشرة
والشرط المختبر صحيحا فماذا أفعل ؟
يمكنك
إيقاف حلقة التكرار مباشرة حتى لو كان
الشرط موضع الإختبار صحيحا باستعمال
الجملة بريك
while
(index <= 100)
index = index +3;
if (index ==40)
break;
system.out.println("the index is"+ index);
تواصل
الحلقة التكرار الى أن تصبح قيمة المتغير
اندكس أكبر من 100 ولكن اذا كانت قيمة
المتغير مساوية 40 فإن حلقة التكرار سوف
تتوقف مباشرة
هل
توجد جملة خاصة أخرى ؟
نعم
توجد حالة خاصة أخرى
while
(index <= 100)
index = index +3;
if (index ==40)
continue;
system.out.println("the index is"+ index);
في
حلقة التكرار هذه سوف يتم تنفيذ الجمل
الا اذا صارت قيمة المتغير مساوية 40
وعندها تجعلالجملة كونتينيو حلقة
التكرار تعيد تنفيذ الجملة هويل
هل
يمكن وضع حلقات التكرار داخل بعضها البعض
؟
نعم
يمكن وضع حلقات التكرار داخل بعضها البعض
كما في المثال الآتي
while (
totalprise < 1000 ){
for( int prise=0; prise <100; prise++){
totalprise = totalprise + prise;
if ( totalprise > 2000 )
brak;
}
}
ما فعل
الجملة بريك في هذه الحالة؟
فعل
الجملة بريك في هذه الحالة هو ايقاف حلقة
التكرار ـ فور ـ عندما تساوي قيمة
المتغير 2000 أو أكثر
ولكن
يا صديقي العزيز هناك حالات أرغب في
ايقاف حلقتي التكرار معا فكيف الطريق الى
ذلك ؟
في هذه
الحالة يجب أن تمنح الحلقة الخارجية اسما
هذا الاسم يكتب في السطر السابق حلقة
التكرار متبوعا بنقطتين : ثم استخدم هذا
الاسم بعد الجملة بريك أو كونتينو
والآن جاء موعدنا مع تمرين
هذا الدرس وهو برنامج المسبح