رمز فتح مرحلة هذا الدرس في تطبيق طورني : 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 :
السلام عليكم
صح خلص الكورس بس تطيبق طورني ما نزل عندي بدو شي مواصفات خاصة ؟
وعليكم السلام، التطبيق يحتاج مواصفات متوسطة للعمل، هل هناك أي مشكلة أو أي رسالة تظهر؟ شاركها معنا.