رمز فتح مرحلة هذا الدرس في تطبيق طورني : FEZ

تَعلُمُ البرمجةِ للمبتدئينَ كلياً بواسطةِ #C –  الحلقة التكرارية While

السلام عليكم و رحمة الله و بركاته ، و أهلاً و سهلاً بكم في درس جديد من دروس سلسلة تعلم البرمجة للمبتدئين كلياً بواسطة السي شارب .

في درس اليوم بنتكلم عن الحلقة التكرارية While Loop

تأتي أهمية هذه الحلقة عندما لا يكون لديك حد معين لتنتهي دورات هذه الحلقة

أي أن دورها يكمن في تنفيذ أسطر معينة عدداً يمكن أن يكون غير معروف في البداية

 

نبدأ كما في العادة بإنشاء مشروع جديد بلغة سي شارب و اختيار Console App

كما تكلمنا عن المكان المخصص لكتابة الأسطر بين قوسي الدالة void Main  ،  و تكلمنا أيضاً عن إمكانية انشاء دوال خاصة ، و هذا الدرس سيكون ان شاء الله تركيزاً على استخدام الدوال لتنفيذ أسطر برمجية معينة

الآن في البداية سأقوم بكتابة كود ، يمكنكم اللحاق بي .

سأقوم باستدعاء هذه الدالة بكتابة اسمها و فتح و اغلاق أقواسها ، و وضع الفاصلة المنقوطة .

نشغل التطبيق … يقوم بطباعة جميع الخيارات الموجودة في لبرنامج و يطلب مني رقم من الأرقام الموجودة في البرنامج

لاحظوا أنني إن أدخلت أي رقم من الأرقام الثلاثة ، فإنه سوف يخرج من البرنامج .

و أنا لا اريد ذلك ، أريده أن يستمر في البرنامج إلى أن يقوم المستخدم بإدخال الرقم 3

لذلك سنقوم باستعمال الحلقة While  ليستمر في اظهار هذه الـ options ، إلى أن يقوم بكتابة الرقم 3

هنا سأقوم بتعريف متغير جديد من النوع bool ، و هو متغير جديد يحتوي على قيمتين إما True أو False

قمنا هنا بعملية إسناد للمتغير في نفس السطر .

اذا سأبدأ هنا بكتابة جملة While ، ماذا يحدث هنا

القيمة الأولية للمتغير displayMenu هي True

فهو يسأل في هذه الحلقة كالتالي :

طالما القيمة True سيقوم بتنفيذ الحلقة إلى ما لا نهاية ، و عندما يقوم بكسر الشرط سيخرج من الحلقة .

بتشغيل البرنامج و كتابة أي قيمة سيبقى ضمن البرنامج و يطبع الخيارات ذاتها .

بما أن الحلقة ستبقى تتكرر إلى أن تصبح القيمة خاطئة ، سأقوم بوضع شرط إذا قام بوضع رقم 3 ستصبح القيمة خاطئة و بالتالي سيخرج من الحلقة

لاحظو الدالة mainMenu من النوع void  أي أنها لا ترجع أي قيمة إلى مكان استدعائها

الآن سنقوم بتغييرها من void إلى bool ، فنلاحظ ظهور خط أحمر ، و الخطأ يقول:
“not all code paths return a value”
لأنه طالما أن هذه الدالة ليست void ، فيجب أن تقوم بإرجاع قيمة

فأنا هنا مبدئيا سأقوم بجعل البرنامج برجع قيمة False إذا قام بإدخال الرقم 3

و أيضاً سأقوم بتعبئة باقي الأماكن بإرجاع قيمة True إذا قام بإدخال باقي الأرقام

إذاً إذا ضغط الرقم 3 سيقوم بإرجاع False  ، هذا الـ False  هو القيمة الراجعة من الـ mainMenu أريد اسنادها للمتغير displayMenu

إذاً أي قيمة راجعة من الـ mainMenu سيقوم بإسنادها للمتغير displayMenu

و إذا كانت False  سيكون الشرط غير محقق و سيخرج من البرنامج

و عند تشغيل البرنامج ، و الضغط على أي قيمة غير الرقم 3 سيستمر البرنامج ، أما في حال ادخال الرقم 3  سيخرج من البرنامج

لاحظوا أن الموجود بين القوسين هنا while (displayMenu == true) هو Expression ، أي أنَّ القيمة النهائية هي True of False

و طالما أن هذا المتغير الموجود هنا يمكن أن يكون True or False  فلا داعي لكتابة == true

إذاً هنا نفذ القسم الثالث ، لذا سنكمل القسمين الأول و الثاني

سنقوم بكتابة Method  جديدة ، و لاحظوا أننا نقوم بكتابة الـ Methods في منطقة ما بين أقواس الـ Class ؛ و سنتكلم عن الـ Class لاحقاً إن شاء الله

هنا قمنا باستخدام شيء جديد و هو تحويل المتغير ، فقد تكلمنا سابقاً أن القيمة الراجعة من الدالة ReadLine  هي string

و إذا قمنا بتعريف متغير من النوع int فلا يمكن تحويل مدخلات الدالة ReadLine  إلى int لذلك قمنا باستعمال هذه الدالة لتقوم بعملية التحويل من string  إلى  int

بعد أن قمنا بتعريف متغير جديد ضمن الدالة الجديدة ، تطلب من المستخدم إدخال الرقم ، و تقوم بعد ذلك بعملية طباعة الأرقام من 1 إلى الرقم الذي قام المستخدم بإدخاله

نقوم باستدعاء الدالة التي قمنا بكتابتها إلى داخل جملة الشرط رقم 1

عند تشغيل التطبيق و ادخال 2 ، سيطلب من المستخدم إدخال رقم ثم يقوم بطباعة الأرقام كما ذكرنا

 

سنقوم الآن بكتابة Method جديدة للـ Guessing Game

في هذه الـ Method سأطلب من التطبيق إعطائي رقم عشوائي ، ثم أطلب من المستخدم القيام بتخمين الرقم الذي قام البرنامج باختياره

سنقوم بتعريف متغير جديد من النوع Random ، و سنعرف متغير جديد آخر من النوع int و سأطلب منه اختيار رقم عشوائي بين 1 و 7 مثلاً

و سأقوم بتعريف متغير من النوع bool باسم incorrect  و نسند إليه القيمة true

سأقوم بوضعه ضمن حلقة ، لكن سنتعرف هنا على نوع آخر من أنواع While Loop

 

الشكل الثاني للحلقة While Loop

في الـ  Methods  السابقة رأينا أن الحلقة تقوم بالتحقق من الشرط و إذا لم تتحقق فلا يتم تنفيذ الأسطر و يخرج مباشرة

هناك نوع آخر من أنواع While Loop و هو يقوم بتنفيذ الحلقة مرة واحدة على الأقل ثم يقوم بالتحقق من الشرط

الشكل الآخر يكتب كالتالي :

نكتب الكلمة do و نفتح قوس و ننتهي بقوس آخر من النوع {    }

و بعد القوس الأخير نكتب كلمة while و نكتب الشرط بين قوسين (      )

فنلاحظ أن الشكل الأول للحلقة يتم بكتابة while ثم نفتح قوساً و ننتهي بقوس ، أما الشكل الثاني فيتم كتابة كلمة do في  البداية و نكتب كلمة while  ثم الشرط بعد القوس الأخير

فبالتالي في  الشكل الأول يقوم بالتحقق من الشرط أولا ، أما في الشكل الثاني يتم التنفيذ لمرة واحدة ثم يتم التحقق من الشرط ، و بالتالي إن تحقق الشرط سيقوم بتنفيذ الحلقة مرة أخرى ، أما إن لم يتحقق فإننا بهذه الحال تأكدنا من تنفيذ الشر مرة واحدة على الأقل

نتابع كتابة الدالة ، فبعد أن يقوم بتلقي المعلومات من المستخدم نضع شرطاً إذا كانت القيمة المدخلة result مساوية لـ randomNumber

و نلاحظ هنا أنني سأقوم بعملية تحويل القيمة التي من النوع int  إلى text .

كيف يتم ذلك ؟

بعد كتابة أي دالة إذا قمت بكتابة نقطة سيكون لدينا ToString و هي الدالة التي تقوم بالتحويل من int  إلى string

نعود إلى الشرط الذي قمنا بكتابته فإن كانت القيمة محققة و النتيجة True سيقوم بإسناد قيمة False للخروج من الحلقة

أما إن لم تكن محققة ، فسيتم الاحتفاظ بالقيمة true  ليبقى في الحلقة و يقوم بتنفيذها مرة أخرى ، كما سيتم طباعة جملة Wrong !

و نلاحظ أنه لا داعي لإسناد قيمة True لأن المتغير incorrect في الأصل تم إسناد القيمة true  إليه كقيمة ابتدائية

و بهذه الحلقة سيبقى يسأل عن الرقم حتى يتسطيع المستخدم الوصول إلى التخمين الصحيح للرقم

نقوم الآن بعملية استدعاء للدالة في الأعلى و مباشرة نقوم بتشغيل البرنامج

ندخل الرقم 2 للدخول إلى لعبة التخمين
يطلب مني ادخال رقم بين 1 و 7

نجرب الإدخال ، و في حال إدخال رقم غير مساوي للرقم المطلوب سيتم عرض “Wrong ! ”

و عند ادخال الرقم الصحيح سيعود إلى القيمة الرئيسية بسبب أرجاع قيمة False  كما ذكرنا بالنسبة للحلقة

 

يمكننا أن نعطي للمستخدم إمكانية معرفة عدد  المرات التي قام بتجريبها قبل الوصول للإجابة الصحيحة

 

سنقوم بتعريف متغير جديد في الدالة باسم Guesses  من النوع int   و نعطيه القيمة 0 كقيمة ابتدائية و كل مرة يقوم بإعادة تنفيذ الحلقة سيقوم بزيادة 1 للتغير

في النهاية سنقوم بطباعة المتغير بعد تحقق الشرط و الخروج من الحلقة

لنتأكد من ذلك

نعم تم عرض عدد المرات و الرقم هو 4

الآن في كل مرة يقوم البرنامج بتكرار السؤال!

ماذا لو اردنا أن تكون الطباعة على صفحة جديدة ، أي يقوم بمسح المعلومات السابقة

لذلك لدينا الدالة :

;()Console.Clear

تقوم هذه الدالة بمسح المعلومات السابقة و بناء صفحة جديدة

لذلك كل مرة نقوم باختيار رقم سيقوم بعمل حذف للسابق

نستخدم الدالة في أكثر من مكان حسب الحاجة

و بتشغيل التطبيق نلاحظ أنه يقوم بحذف المعلومات السابقة و يبدأ بصفحة جديدة

نقوم بتجربة لعبة التخمين فنصل للرقم الصحيح و لكن لا نرى النتيجة … لماذا ؟
لأنه قام بعمل مسح للصفحة بشكل سريع

لذلك يمكن أن نقوم بإضافة الدالة ReadLine لنتمكن من مشاهدة التائج

بإمكاننا أن نقوم بعمليات لترتيب التطبيق مثل إضافة أسطر و إلى ما هنالك ، و هي أمور فنية و تجميلية

هذه كانت فكرة الـ While Loop و كيف نقوم باستخدامها عدد مرات غير معروف في البداية

 

ملخص الدرس :

السلامُ عليكم ورحمةُ اللهِ وبركاته، وأهلاً بكمْ في الدرسِ الخامس عشر من دروسِ سلسلةِ، تَعلُمِ البرمجةِ للمبتدئينَ كلياً بواسطةِ السي شارب، في هذا الدرس سنتعرف على كيف أنه يمكننا تنفيذ حلقة تكرارية من الأسطر البرمجية مجهولة العدد، بحيث تنتهي وتخرج من وسطها بمجرد تحقيق شرط معين

الحلقة التكرارية While Loop :

تختلف هذه الحلقة عن For Loop في أنها قد تكون مجهولة عدد التكرارات في البداية، ففي مثالنا في هذا الدرس، سنجعل الحاسوب يقوم بأخذ رقم عشوائي، ونطلب من المستخدم تخمينه، وسنبقى نعطيه فرصه إلى أن يجده، بالتالي نحنا لا نعلم من أي مرة سيجده، وهنا تأتي فائدة الحلقة التكرارية While Loop .

مصطلحات الدرس :

WHILE Loop :

bool :

Class :

Guessing Game :

Random :

incorrect :

ToString :

Console.Clear :

2 thoughts on “#15 الحلقة التكرارية While – البرمجة بواسطة #C

  1. السلام عليكم
    صح خلص الكورس بس تطيبق طورني ما نزل عندي بدو شي مواصفات خاصة ؟

    • وعليكم السلام، التطبيق يحتاج مواصفات متوسطة للعمل، هل هناك أي مشكلة أو أي رسالة تظهر؟ شاركها معنا.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *