الحلقات التكرارية

في هذا الدرس سوف نتعلم كيفية إستخدام الحلقات التكرارية في لغة c#
وهي أيضا تعتبر من أهم الأمور والتي لا غنى لنا عنها عند كتابة أي برنامج تقريبا.
وهنالك عد طرق لاستخدام الحلقات التكرارية فدعونا نتعرف عليها واحدة بواحدة
التكرار باستخدام خاصية for
وتعتبر خاصية for هي من أكثر الأمور المستخدمة عند التعامل مع حلقات التكرار
وطريقة كتابتها هي, بعد كتابة for نقوم بكتابة القيم المراد تكرارها بين قوسين هلاليين (). كما نكتب الأوامر المراد تنفيذها أثناء عملية التكرار بين قوسين مزخرفين آلآ {}
وفي ما يلي إليكم هذا النموذج
static void Main(string[] args)
{
for(int i = 1;i <= 5;i++){
Console.Write(i+" ");
}
Console.WriteLine();
}
وبعد تنفيذ هذه السطور نحصل على النتيجة التالية
1 2 3 4 5
أولا نقوم بتعيين متغير رقمي وفي هذه الحالة سميناه بحرف i
ثم قمنا بتعيين قيمة هذا المتغير وعلى سبيل المثال جعلناها 1
وهذه القيمة يمكن تغييرها كما نشاء وهي تعتبر نقطة بداية عملية التكرار
وبعد تعيين نقطة بداية التكرار نقوم بتعيين نقطة نهاية التكرار وفي هذا المثال وفي هذه الحالة جعلناها 5 أي بمعنى يتم التكرار طالما قيمة المتغير i تساوي 5 أو أصغر من 5
وقبل قفل القوس الهلالي قمنا بكتابة المتغير i متبوعا بعلامتي ++ وهذا يعني زيادة 1 في كل مرة من عمليات التكرار إلى قيمة بداية التكرار
وفي هذا المثال نقوم بالتكرار من 1 مضافا إليه 1 في كل مرة حتى رقم 5 وعندها يتم الخروج من الحلقة التكرارية.
وعند إستخدام علامة الزائد + مرتين يعني هذا زيادة1 في كل مرة أي بمعنى نقوم بالعد في شكل تصاعدي
وفي المقابل وبنفس الكيفية يمكننا إستخدام علامة الناقص - مرتين للدلالة على العد التنازلي أي بنقص 1 في كل مرة
وبالإضافة للتكرار التصاعدي أو التنازلي هنالك العديد من طرق الإستخدام لخاصية for وفي ما يلي إليكم هذه النماذج
1 for(int i = 0 ; i < 5 ; i++) 0 1 2 3 4 يتم زيادة 1 إلى قيمة البداية وسوف يتم الخروج من الحقة عند الرقم 5, وفي هذه الحالة لا يتم حساب الرقم 5 لأننا كتبنا إذا كان الرقم أصغر من 5 وليس يساويها
2 for(int i = -2 ; i <= 2 ; i++) -2 -1 0 1 2 وفي هذه الحالة نقوم بزيادة 1 إلى الرقم -2 وسوف يتم الخروج من الحلقة بعد حساب الرقم 2
3 for(int i = 0 ; i < 10 ; i+=2) 0 2 4 8 وفي هذه الحالة نقوم بزيادة 2 في كل مرة بدلا عن الرقم 1, كما يمكننا تغيير الرقم 2 إلى أي رقم آخر بنفس الطريقة
4 for(int i = 5 ; i >= 1 ; i--) 5 4 3 2 1 وفي هذه الحالة يتم نقص قيمة المتغير 1 في كل مرة, وكما نلاحظ عند عملية التكرار التنازلي تكون قيمة البداية هي القيمة الكبرى
5 for(int i = 2 ; i >= -2 ; i--) 2 1 0 -1 -2 وفي هذه الحالة يتم نقص 1 من الرقم 2 حتى الرقم -2
6 for(int i = 12 ; i > 0 ; i-=3) 12 9 6 3 وفي هذه الحالة نقوم بنقص الرقم 3 من قيمة المتغير وسوف يتم الخروج من الحلقة عند الرقم 0
التكرار باستخدام خاصية while
بالإضافة لاستخدام خاصية for يمكننا إجرا عمليات التكرار باستخدام خاصية while مع إختلاف صغير في طريقة الكتابة
وفي ما يلي إليكم هذا المثال التوضيحي
static void Main(string[] args)
{
int i = 0;
while(i <= 5){
Console.Write(i+" ");
i++;
}
Console.WriteLine();
}
1 2 3 4 5
وبعد تنفيذ هذه السطور نحصل على نتيجة مشابهة للمثال السابق
لكن إذا نظرنا إلى طريقة كتابتها نجد إختلافا بينا
أولا لا نقوم بتعيين المتغير الرقمي بين القوسين الهلاليين كما هو مع خاصية for وأيضا لا نكتب القيمة المراد تكرارها من زيادة أو نقصان بين القوسين الهلاليين وإنما نكتبها بعد كتابة الأوامر المراد تنفيذها كما هو مبين أعلاه
وهنالك طريقة ثالثة لإجراء عمليات التكرار وهي إستخدام خاصية do مع خاصية while وطريقة كتابتها تكون على النحو التالي
static void Main(string[] args)
{
int i = 0;
do{
Console.Write(i+" ");
i++;
}while(i <= 5);
Console.WriteLine();
}
وبعد تنفيذ هذه السطور نحصل على نفس النتيجة السابقة وهي
1 2 3 4 5
وكما نرى عند إستخدام خاصية do مع خاصية while نقوم بالتحقق من شرط التكرار في الآخر فقط. وهي تؤدي نفس وظيفة خاصية while, لكن يجب علينا الإنتباه لأنه يجب كتابة علامة ; بعد كتابة خاصية while
وقد يسأل أحدكم ما الفرق بين إستخدام خاصية while وحدها وبين إستخدام خاصية do مع خاصية while, هنالك فرق كبير وجوهري وحيد وللتعرف عليه الرجاء تنفيذ السطور التالية
static void Main(string[] args)
{
int i,num;
num = 1;
// إستخدام خاصية while وحدها
Console.Write("التنفيذ باستخدام خاصية while:");
i = 1;
while(i < num){
Console.Write("*");
i++;
}
Console.WriteLine();
// إستخدام خاصية do مع خاصية while
Console.Write("التنفيذ باستخدام خاصية do مع خاصية while:");
i = 1;
do{
Console.WriteLine("*");
i++;
}while(i < num);
}
وعند التنفيذ وفي الجزئية الخاصة بخاصية while لا يتم إظهار أي نتائج, ولكن عند إستخدام خاصية do مع خاصية while يتم إظهار نتيجة واحدة فقط, وذلك بسبب عدم تحقق الشرط مع خاصية while لذا لا يتم تنفي ما بين القوسين المزخرفين.
لكن في حالة إستخدام خاصية do مع خاصية while يتم تنفيذ الأوامر بين القوسين المزخرفين قبل التحقق من وجود الشرط, وفي هذه الحالة يتم إظهار النتيجة الأولى قبل التحقق من توفر الشرط من عدمه.
وأخيرا إليكم نموذج لإستخدام الحلقات التكرارية اللانهائية
static void Main(string[] args)
{
// إعلان رقم عشوائي
Random rnd = new Random();
Console.WriteLine("يتم التكرار بصورة مستمرة ولا يتم الخروج من الحلقة التكرارية إلا عند الرقم 6");
// حلقة لا نهائية
while(true){
int dice = rnd.Next(1, 7); // إنشاء رقم عشوائي بيى الواحد والسبعة أي من 1 إلى 6
Console.WriteLine(dice);
if(dice == 6){
break; // يتم الخروج من الحلقة
}
}
Console.WriteLine("الخروج");
}
عند تنفيذ هذه السطور تظهر لنا رسالة محتواها سيتم الخروج عند الرقم 6
كما يظهر في الشاشة أرقام عشوائية بين 1 و 6 ولا يتم الخروج من الحلقة والبرنامج إلا عند ظهور الرقم 6
وعند كتابة while(true) يتم تكرار ما بين القوسين المزخرفين بصورة لا نهائية.
وللخروج من كافة الحلقات التكرارية عند تحقق شرط ما نقوم باستخدام أمر break وهذا الأمر يستخدم مع كافة عمليات التكرار السابقة أيضا.
ملحوظة إذا لم نقم بالخروج من الحلقة التكرارية اللانهائية باستخدام أمر break فسوف يتم إيقاف البرنامج ولا يمكن فعل أي شيء آخر غير غلق البرنامج بصورة إجبارية