6-_Programming_with_C__while_loop__do_while_loop__
بسم الله والحمد لله والصلاة والسلام على رسول الله صلى الله عليه وسلم. أهلاً وسهلاً بحضراتكم جميعاً في اللقاء السادس ضمن السلسلة التعليمية programming basics for beginners أو أساسيات البرمجة للمبتدئين. لو تذكروا حضراتكم إحنا بدأنا في المحاضرتين السابقتين نتكلم عن ما يسمى بالـ control statement
Control statements زي ما قلنا اللي هي مجموعة الجمل اللي بستخدمها عشان أغير مسار تنفيذ البرنامج. إحنا اتفقنا إن المسار الطبيعي لتنفيذ البرنامج اللي هو الـ sequential، معناها إن البرنامج بيتنفذ خطوة بعد التانية بنفس الترتيب اللي اتكتبت بيه الجمل دي. لكن اتفقنا مع بعض إن أنا ممكن أحيانا أحتاج أغير مسار تنفيذ البرنامج.
فـ هنلجأ لما يسمى بالـ control statements. ولو تذكروا إحنا قسمناها نوعين، قلنا في control statements تستخدم for selection، selection معناها إيه؟ إن أنا بستخدمها عشان أختار المسار اللي هيمشي فيه الـ program. في الجزئية دي اتكلمنا عن الـ if بمشتقاتها بقى الـ if else والـ if else if.
ثم تكلمنا عن ما يسمى بالـ switch.بعد كده هنتكلم اليوم عن الـ repetition statements. Repetition statements اللي هي إيه؟ اللي هي الـ control statements اللي بستخدمها في تكرار جمل معينة أو actions معينة عندي
أكثر من مرة. يبقى أنا أثناء البرنامج ممكن يكون عندي مجموعة من الجمل أو مجموعة من الـ actions عاوز أكررها أكثر من مرة. فبلجأ في الحكاية دي للـ repetition statements أو بيطلق عليها الـ loops طيب خلينا نتكلم بشيء من.
التفصيل. بيقول sometimes we need to repeat a specific course of actions يعني أحيانا بنبقى محتاجين نعمل تكرار لبعض الـ actions اللي عندنا أو بعض الـ statements أو بعض الجمل اللي موجودة عندنا في البرنامج. either a specified number of times .
or until a particular condition is being satisfied يعني إيه بقى الكلام الصعب ده؟ ولا صعب ولا حاجة. بيقول إن أنا ممكن التكرار ده يكون معلوم عدد مراته، يعني أنا بكون عارف أنا عاوز أكرر الجمل دي كام مرة، عشر مرات، خمس مرات، مية مرة، فببقى عارف
أنا عاوز أكرر الجمل دي كام مرة. أو until a particular condition is being satisfied أو عاوز أكرر الجمل دي لحد ما شرط معين يتحقق خدت بالك؟ يبقى انت في موضوع التكرار ممكن تكون في موقفين. موقف أكون عارف أنا عاوز أكرر الكلام ده كام مرة.
مسبقا ببقى عارف. أو إن أنا هقعد أكرر في الجمل دي لحد ما شرط معين يتحقق، أول ما الشرط ده يتحقق أنا هتوقف عن التكرار خدت بالك؟ طيب خلينا ناخد مثال يقرب الفكرة دي. يعني مثلا to calculate the average grade for 10 student.
عشان تحسب متوسط الدرجات بتاع عشر طلاب. مثال زي ده هو هنا قالي عشر طلاب يعني حدد الـ إيه؟ حدد العدد صح؟ يبقى أنا هكرر السؤال عن درجات الطالب وجمعها
وحساب الـ average بتاعها كام مرة؟ عشر مرات، لإنه هو الراجل هنا حدد لي عدد المرات عشر مرات.مثلا سؤال زي ده to calculate the bonus for 10 employees. الـ bonus اللي هي الزيادة أو الحوافز اللي بياخدها الموظفين. أحسب الـ bonus بتاع عشر موظفين. هنا هو حدد لي عدد المرات عشرة، ممكن يكون خمسة ممكن يكون خمسين، بس هنا اللي أقصده إيه؟
إن هو حدد لي العدد بتاع عدد مرات التكرار، أنا هكرر كام مرة؟ 10 مرات، 20 مرة، 30 مرة. طيب، شوف المثال التالت ده: To sum the input numbers from the user as long as he or she enters positive numbers يعني إيه؟ أجمع.
الأرقام اللي الـ User بيعملها Input طالما بيدخل Positive numbers. في الحالة دي أنا هكرر موضوع الجمع لحد إمتى؟ آه، لحد ما يدخل رقم Negative. يبقى إذن التكرار بتاعي مرتبط بحدوث شرط معين أو تحقق شرط معين، إيه هو الشرط في حالتنا دي؟ إن هو يدخل رقم غير Positive رقم Negative رقم سالب.
يبقى إذن طول ما هو شغال على الـ Keyboard يدخل 10، 5، 100، 1000، لحد.. أنا هفضل أجمع الأرقام دي لحد ما يدخل إيه؟ -1 مثلاً، -10. يبقى إذن تكراري مرتبط بإيه؟ بحدوث شرط معين. خلاص فهمنا بقى الفكرة؟ آدي الموضوع كله. طيب، أنا عشان أنفذ الجزء ده
بستخدم عدة أدوات أو عدة جمل متعارف عليها في كل لغات البرمجة. كل لغات البرمجة تقريباً بتستخدم.. مش تقريباً، يعني تأكيداً بقى، بتستخدم هذه التلات أنواع من الجمل: في حاجة اسمها While statement وفي حاجة اسمها Do-while statement
وفي حاجة اسمها For statement. دول يا جماعة التلات جمل الرئيسية أو الأساسية في عملية الـ Repetition أو عملية التكرار، ودول اللي موجودين في كل لغات البرمجة. واضح؟ هنبدأ بقى من اللحظة دي ناخد كل جملة ونشوف الـ Syntax بتاعها
ونشوف نقدر نستخدمها إزاي في البرنامج بتاعنا. تمام؟ خلينا نبدأ. الجملة الأولى عندنا يا شباب هي الـ While loop. لكن خليني قبل ما أبدأ في الـ While loop أتكلم عن حاجة مهمة جداً جداً جداً. والكلام عنها مفيد في كل الجمل اللي بتستخدم في التكرار، يعني كل الـ Loops اللي هنستخدمها الكلام اللي هقوله ده بينطبق عليها. إيه هو؟
إحنا اتفقنا إن أنا ممكن أستخدم الـ Loops أو الـ Repetition statements في إني أكرر مجموعة معينة من الـ Actions أو مجموعة معينة من الجمل عدد معلوم من المرات. يعني إيه عدد معلوم؟ عدد معلوم يعني أنا عارف مسبقاً أنا هكرر الكلام ده كام مرة.
صح ولا لأ؟ زي ما إحنا قلنا في المثال ده، أما هنا بنطلب درجات 10 طلاب، عاوزين نحسب الـ Bonus لـ 10 موظفين، وهكذا. في الحالة دي أنا بكرر وأنا عارف كام مرة أنا المفروض أكرر الـ Code ده أو الجمل دي، صح؟ طيب، في الحالة دي يا جماعه أنا بحتاج شيء
يعد لي كام مرة أنا كررت الجمل، صح؟ يعني أنا دلوقتي وصلت في التكرار بتاعي للمرة الكام؟ هل أنا وصلت دلوقتي كررت مرتين، تلاتة، أربعة، عشرة؟ كام مرة أنا وصلت دلوقتي في التكرار؟ آه، في الحالة دي بقى بستخدم ما يسمى بالـ Counter. الـ Counter اللي هو إيه؟ برافو عليك بالعربي يعني العداد، صح.
العداد يعني عبارة عن إيه بقي؟ أي Numeric . Numeric variable يعني إيه نقصد بيه؟ يعني يكون Integer يكون Float يكون Double أي حاجة Numeric رقم رقمية. الـ Numeric variable ده هستخدمه عشان يعد عليا كام مرة تم تكرار الكود.
بستخدمه إزاي؟ مبدئياً بديله Initial value. Initial value يعني إيه؟ يعني قيمة ابتدائية. يعني كأنك بتقول إيه بصفر العداد، أنا العداد ده أما هستخدمه عشان يعد عليا، هو كانت قيمة اللي استخدمته عندها كانت كام؟ أنا ممكن أقول عاوزه يبدأ من صفر
أو عاوزه يبدأ من واحد، عاوزه يبدأ من 10، وهكذا. يبقى لازم تديله إيه؟ قيمة ابتدائية. ثم كل ما تكرر مرة المفروض تزود العداد ده بواحد، صح؟ زي ما إنت راكب سيارة والأول صفرت العداد بتاعك.
كل ما تمشي كيلو العداد بيزيد كيلو. نفس الكلام، عشان أعرف أنا وصلت كام مرة، يبقى كل ما آجي أكرر الكود بتاعي مرة، في نهاية التكرار أروح مزود الـ Counter ده بكام؟ بواحد، وهكذا. واضح ولا مش واضح؟ آه، ده المفهوم ده يا جماعة بيتكرر في كل الجمل أو كل الـ Loops اللي هنتكلم عليها دلوقتي.
يبقى آدي مفهوم الـ Counter. طيب خليني بقى أتكلم بالتفصيل أكثر عن الـ While loop. الـ While loop الـ Syntax العام بتاعها هو اللي حضرتك شايفه على الشمال ده، بكتب كلمة While ثم بين القوسين بكتب Condition.
وبفتح قوسين مجموعة وبكتب الجمل المراد تكرارها. ده الشكل العام للـ While loop. معناها إيه الـ While loop؟ الـ While تقريباً يعني في الإنجليزي معناها إيه؟ طالما، بينما. فلو أنا عاوز أقول معنى الـ While هقول إيه
طالما كان الـ Condition ده صحيح، كرر هذه الجمل. ده المعنى المختصر كده أو المعنى العربي للـ While loop. يبقى أنا الفكرة إيه؟ أنا بقول أنا عاوز أكرر الجمل دي طالما كان الـ Condition ده صحيح.
ده شرط الاستمرار في الـ Loop عشان كده بيسموه إيه؟ Continuation condition. Continuation اللي هي جاية من Continue. Continue يعني إيه؟ كمل أو استمر. فيبقى طول ما الشرط ده صحيح، صحيح يعني إيه؟ يعني الشرط ده متحقق يعني قيمته بـ True إذن نفذ هذه الجمل.
طيب افرض أنا عاوز أستخدم الـ While loop عشان أكرر مجموعة من الجمل أو مجموعة من الـ Actions عدد معلوم من المرات، زي ما إحنا كنا بنتكلم دلوقتي، إذن هستخدم إيه؟ برافو عليك هستخدم الـ Counter صح؟ الـ Counter اللي هو كان إيه؟ برافو عليك اللي هو Numeric variable.
فأنا في حالة استخدام الـ Counter هعمل كده، أول حاجة هعمل Initialize للـ Loop counter. يعني إيه؟ هعمل أعرف الـ Counter أعرف أي Variable على إنه Counter وأديله Initial value. ثم أكتب كلمة While وبين الأقواس دي بقى بشيك على إيه؟ بعمل Test للـ Counter هو وصل لكام؟
صح؟ أول ما يوصل للرقم اللي المفروض أنا محدده أخرج من الـ Loop. طيب افرض هو موصلش للرقم اللي أنا محدده؟ يبقى إذن هستمر في تكرار هذه الجمل. صح ولا لأ؟ عشان نفهم الموضوع ده كويس خلينا نبص على.
الرسمة دي عبارة عن إيه؟ رسمة بتوضح لي مسار تنفيذ الـ While Loop. أول خطوة أنا بعمل Initialize Initialize لمين؟ للـ Counter برافو عليك العداد اللي أنا هستخدمه عشان يعد عليا عدد مرات التكرار، بديله Initial Value زي ما أنا حابب بقى، أديله صفر
صفر، Initial Value واحد، القيمة الابتدائية 10، 100، زي ما أنا عاوز. ثم بخش على أعمل Test للـ Condition اللي هو الـ Condition بتاع الـ While. مش إنت هنا بعد الـ While كتبت Condition اللي هو شرط الاستمرار في الـ Loop؟ آه، بخش أعمل Test عليه. الـ Test ده هينتج عنه حاجتين، إما True أو False إما الشرط ده متحقق
يعني قيمته بـ True أو أصبح غير متحقق فيبقى قيمته بـ False. طيب الشرط طلع متحقق هتعمل إيه؟ برافو عليك، هتوجه للـ Body of loop. الـ Body of loop اللي هو مين نقصده؟ اللي هي الجمل دي المراد تنفيذها المراد تكرارها. هنفذ الـ Body of loop وأعمل Increment. Increment يعني إيه بقى؟ يعني أزود الـ Counter أزود العداد بتاعي. مش العداد بتاعي أنا داخل بقيمة ابتدائية؟ طيب أنا
نفذت مرة أو كررت مرة فأروح مزود العداد بواحد، نفذت مرتين أزود العداد بواحد كمان، تلاتة أزود العداد ليه؟ عشان أعد كام مرة أنا كررت الـ Loop صح؟ طيب، الكلام ده بعد ما أزوده هروح تاني أ test على الشرط. الشرط Valid يبقى أخش أنفذ الـ Body تاني.
الشرط Invalid أو قيمته False يبقى هخرج من الـ Loop. عشان كده الشرط ده بيسموه إيه؟ شرط الاستمرار في الـ Loop. طول ما الشرط ده Valid أو قيمته بـ True أصبح هقدر أكرر الجمل دي مرة واتنين وتلاتة وعشرة، أول ما الشرط ده قيمته تبقى بـ False يبقى إذن هخرج منين من الـ
الشرط ده ممكن يكون إيه؟ ممكن يكون كده الشكل ده، يكون Relational. عارف الـ Relational Expression؟ زي ما أقول مثلاً While الـ i أصغر من أو يساوي الـ 10. معناها إيه؟ يعني طالما إن قيمة الـ i أصغر من أو يساوي الـ 10 خش كرر الجمل دي.
ممكن يكون Logical Expression اللي هو إيه Logical Expression لو فاكر؟ إحنا قلنا الكلام ده في المحاضرتين اللي قبل كده، إن أنا عندي شرطين، While الـ i أكبر من أو يساوي الـ 10 And ال J أصغر من أو يساوي 15. ده ممكن شكل من أشكال الـ While. ممكن يكون Integer Constant زي كده، While وأكتب 3.
ممكن أقول While وأكتب بين القوسين Arithmetic Expression زي ده كده 3 + 5. يبقى الـ Expression ده أشكاله متنوعة زي الأشكال اللي قدام حضرتك دي. الفكرة إيه بقى؟ إن أنا كل مرة ب test عليه، هل هو Still valid لسه الشرط ده متحقق قيمته بـ True؟ لو الإجابة Yes يبقى أنا هخش وأكمل تاني وأنفذ تاني.
الإجابة False يبقى هخرج من الـ Loop . خلاص واضح يا جماعة؟ تمام؟ طيب خلينا ناخد مثال تتضح بيه الفكرة دي كلها. المثال ده عبارة عن إيه؟ بيقول Write a program that calculates and prints out the average grade for six students يعني
عاوزين ناخد من الـ User ست درجات لست طلاب ونحسب الـ Average بتاعت الدرجات دي ونطبعه على الشاشة. خلينا نحلل البرنامج واحدة واحدة، مبدئياً هل أنا عارف عدد مرات التكرار ولا لأ؟ آه عارف، لأنه قالي ست درجات، ست طلاب.
يبقى إذن أنا هستخدم إيه؟ برافو عليك Counter ليه بقى Counter؟ عشان يعد عليا عدد مرات التكرار، صح؟ فده اللي أنا عملته في البرنامج أول ما بدأت عملت Variable سميته أنا Counter نوعه Integer واديتله Initial value بواحد. إحنا اتفقنا إنه مش لازم يكون اسمه Counter ممكن تسميه x, i, z زي ما إنت عاوز.
لكن أنا بحاول أسمي اسم Readable اسم مفهوم بحيث اللي يبص على الكود بتاعي يفهم على طول أنا كان قصدي إيه. فآنا عملت الـ Counter واديتله Initial value بواحد. طيب وبعدين؟ واحدة واحدة، إنت عشان تطلب درجة من المستخدم أو من الـ User هتقول له إيه؟ هتقول له cout << Enter grade
وتستقبل منه الدرجة إزاي؟ بالـ cin برافو عليك، صح؟ طيب، الكلام ده اللي إنت قلت عليه حضرتك دلوقتي، تقدر تكرره 6 مرات؟ آه آخده Copy و Paste. يا راجل! ده إنت لسه بتدرس الـ Loop وهتاخد Copy و Paste 6 مرات؟ لأ استخدم الـ While loop. طيب، يبقى أنا هعمل إيه؟ هكتب While
وأفتح قوسين وأحدد الشرط بتاع الاستمرارية. شرط الاستمرار في البرنامج ده هو إيه؟ أو في التكرار هو إيه؟ شرط الاستمرار إن يكون الـ Counter ده قيمته أقل من أو تساوي الـ 6. بمعنى إنه طول ما الـ Counter قيمته بـ 1 أو 2 أو 3 أو 4 أو 5 أو 6، OK كرر الكلام ده.
أول ما الـ Counter قيمته تزيد عن الـ 6 عاوز أوقف، صح ولا لأ؟ طيب، فأنا كتبت While Counter <= 6 . طبعت الجملة اللي إنت قلت لي عليها cout <<Enter grade وقابلت اللي الـ User دخله لي بالـ cin.
وحطيته في Variable اسمه grade. ماشي؟ طيب، طبعاً أنا دلوقتي الـ User أداني درجة فعاوز أجمعها على الدرجات السابقة، فعملت Variable اسمه sum جمعت عليه فقلت الـ sum += grade. طبعاً إنت الشكل ده إنت درسته قبل كده معايا، لو مش فاكره ارجع للمحاضرات اللي قبل كده. sum += grade يعني إيه؟ الـ sum = sum + grade يبقى أنا
القيمة اللي خدتها جمعتها على الـ sum. الخطوة المهمة جداً والخطيرة بقى إن أنا قلت الـ Counter++ دي معناها إيه؟ إن أنا زودت الـ Counter بتاعي زودت العداد. مش إحنا اتفقنا أنا عملت العداد كل ما أكرر مرة هزود العداد؟ فأنا قلت الـ Counter++ فبدل ما كان بادئ بـ 1 دلوقتي بقى بـ 2
الـ While loop هتفضل تتكرر كل الكود ده هيفضل يتكرر لحد ما الـ Counter ده قيمته تبقى إيه؟ 7. أما توصل 7 يبقى الشرط ده هيبقى في الحالة دي بـ False. في الحالة دي أخرج من الـ While loop. تعال نجربه كده، أهو أنا دلوقتي هعمل Counter أهو
وهديله قيمة ابتدائية بـ 1. صح كده؟ طيب وبعدين؟ أنا عاوز أعمل While loop فأقول While الـ Counter طول ما الـ Counter ده قيمته أصغر من أو تساوي الـ 6
صح؟ طيب أعمل إيه؟ عاوز أنفذ الجمل دي، أنا عاوز أطبع لل user
 cout << Enter student grade
طيب، الـ User هيكتب على الشاشة، هيكتب أسف على الـ Keyboard فآنا هستقبل منه بالـ cin فأقوله cin حط لي الكلام ده في Variable يبقى أنا لازم أكون محضر Variable عشان أستقبل فيه الـ Input. الكلام ده بقى إحنا قلناه من زمان صح؟ فآنا هقول integer grade أو مش لازم أعمل Variable أعمل سطر جديد أنا ممكن هنا
أقول الـ grade دي مثلاً بتساوي صفر كـ Initial value. فآنا هقول cin في grade يبقى إذاً الـ User دلوقتي أداني الدرجة. أنا عاوز أعمل إيه عشان أحسب الـ Average؟ الـ Average عبارة عن الـ sum على الـ Count صح؟ يبقى أنا لازم يكون عندي Variable أجمع فيه، فآنا هاجي هنا وأزود Variable كمان اسمه sum أقول إنه هو بيبدأ بصفر.
وأقول هنا الـ sum طبعاً أنا ممكن أقول الـ sum = sum + grade صح؟ بس طبعاً أنا مبحبش أكتب كده، أنا بحب أكتب بقى بالمختصر اللي إحنا قلنا عليه، فآنا أقول sum += grade طيب، الخطوة المهمة والضرورية إن أنا لازم أزود الـ Counter خليه الـ Counter++. إنت عارف لو معملناش كده
لو معملناش الخطوة دي، يبقى دخلنا في ما يسمى بالـ Infinite loop. يعني إيه Infinite loop؟ Infinite يعني ما لا نهاية، يبقى الـ Loop دي مش هتنتهي أبداً. ليه؟ ما هو إنت داخل للـ Counter بواحد، معملتش هنا خطوة تزود الواحد ده صح؟ يبقى إنت لازم الـ Counter أدام
أدام بتستخدم الـ While loop عشان تعد بيها يبقى لازم متنساش الخطوة بتاعة إيه؟ زيادة العداد دي، إن أنا أزود الـ Counter. ماشي كده؟ طيب، فآنا قلتله الـ Counter++. طيب بعد ما بيخلص الـ While loop عاوز أعمل إيه؟ عاوز أطبع بقى الـ Average فأقول cout
أهو، الـ Average grade تساوي أهو، تساوي الـ sum اللي أنا جمعت فيه المجموع بتاع الدرجات على عددهم اللي هو كم مرة؟ 6 مرات. واضح يا جماعة؟ ماشي؟
آه، طيب وبعدين؟ في الآخر أنا ممكن برضه أحب أسيب سطر عشان تبقى التنسيق شكله لطيف وأكمل. طيب بص، تعال نجرب كده Control F5 أهو، هنا بيقولي Enter student grade
فآنا هدخل مثلاً 10. الطالب التاني أقول مثلاً 20، الطالب التالت 30، الطالب الرابع مثلاً 40، الطالب الخامس 50، الطالب السادس 60. شوف بعد كده مكررش ليه؟ لأن العدد وصل خلاص
خلاص أصغر من أو يساوي الـ 6 خلاص. بعد كده الـ Loop خرج منها وراح نفذ الجملة اللي تحت اللي هو إيه طبع الـ Average grade كذا. فالـ Average grade بتاعتنا كام؟ 35. واضح؟ ماشي؟ آدي الموضوع بمنتهى البساطة. يبقى إنت كل الفكرة أدام إنت عارف عدد مرات التكرار هتعمل Counter تديله قيمة ابتدائية وتحط الشرط
إن الـ Counter ميزيدش عن العدد المعلوم اللي إنت محدده مسبقاً، ثم تكتب الجمل اللي إنت حابب إن هي تتكرر، ومتنساش أبداً أبداً إنك إنت تيجي هنا وتعمل إيه؟ برافو عليك لازم تحط تزود العداد هنا. طيب خلينا نعمل خطوة لو إحنا مزودناش العداد.
بص أنا هعمل comment هنا وأشوف لو مزودناش العداد ده هيحصل إيه. شايف؟ بص بقى، هاجي أدخل دلوقتى مثلاً 1، 2، 3، كذا، كذا، كذا. شوف كام مرة؟ هانفضل شغالين كدة  infinite infinite loop إلى ما لا نهاية. ليه؟ ما هو أنت اللي عملت فينا كدة.
ليه بقى؟ لأنك أنت الـ counter ده ما أديتوش ما زودتوش. إذاً الشرط ده هيفضل على طول true لأن على طول الواحد أصغر من أو يساوي الستة. لكن لما بدّي الـ counter زيادة فبيوصل إن الشرط ده في وقت من الأوقات بيتحقق قصدي بيبقى false فنخرج من الـ loop.
ماشي، فهمت؟ عرفت فايدة دي؟ طيب، تعال نشوف مثال كمان. هنا write a program to print out عشان يطبع the sum of the numbers entered from the user as long as he or she enters positive numbers. يعني إيه؟
عاوزين نكتب برنامج يجمع كل الأرقام اللي الـ user بيدخلها طالما بيدخل أرقام موجبة. يبقى أنا هخرج إمتى؟ أو هبطّل أجمع إمتى؟ أول ما يدخل أرقام سالبة. صح؟ طيب، تيجي نكتب البرنامج أنا وأنت؟ تعال بالراحة نكتبه. أنا هنا هكتبلك البرنامج بطريقة مختلفة.
خلينا نتناقش أنا وأنت وإحنا بنكتب البرنامج. أولاً، أنا عاوز أطلب من الـ user يدخل رقم موجب، فهقوله cout enter . أنا عاوزك تشتغمل كدة على فكرة، وتسمّع نفسك كدة positive number عشان كل ما بتسمّع نفسك الكلام اللي أنت بتقوله ده بتلاقي المعلومة تثبت في مخك. فأنا عاوز أدخل رقم موجب.
الـ user هيدخله على الـ keyboard فانا هستقبله بالـ cin. يبقى أنا لازم أكون محضر variable. برافو عليك، variable أنا هسميه number عشان أستقبل فيه اللي الـ user هيدخله، وهديله initial value بصفر. طيب، cin حط لي القيمة اللي الـ user دخلها في الـ variable اللي اسمه number. وبعدين؟ عاوزين نجمعها، يبقى إحنا محتاجين variable نجمع فيه.
صح ولا لأ؟ زي ما إحنا قلنا المرة اللي فاتت. يبقى أنا هعمل variable اسمه sum وهديله برضه initial value بصفر. هاجي هنا أقوله خلي الـ sum += number. طبعاً إحنا اتفقنا += دي أنا برضه عشان لو أنت يعني صعبان عليا إنك تبقى قاعد ومش فاهم، بصsum += number دي هي هي إن أنا أقول كدة sum = sum .
زائد ال number هي هي ماشي ، بس أنا بكتبها بالشكل المختصر ده. خلاص؟ أدي فهمت بقى؟ طيب، خلاص، يبقى أنا دلوقتي طلبت منه رقم موجب، وبعدين الراجل دخلهولي فجمعته على الـ sum. السؤال الجمل دي هتتكرر كام مرة؟
ها، عارف؟ 10 ولا 20 ولا 30؟ ما تعرفش. يبقى إذاً الـ while loop هنا اللي أنت هتستخدمها عشان التكرار هيحكمها شرط. إيه الشرط؟ الشرط قال لي في البرنامج طالما بيدخل أرقام موجبة. يعني كأني بقول while الـ number اللي أنت دخلتهولي ده.
أكبر من أو يساوي الصفر. أكبر من أو يساوي الصفر دي معناها إنه رقم إيه؟ موجب. صح؟ ما هو الأرقام الموجبة اللي هي أكبر من الصفر، الأرقام السالبة اللي هي أقل من الصفر، صح؟ فكأني بقى هحط الجمل دي في الـ while loop عشان أنفذها. يبقى هنا.طب تقول لي إيه ده؟ مفيش counter؟ أيوة، هو هحط counter ليه؟ هو أنا عارف العدد كام؟ أنا معرفش، مش يمكن يدخل 100 رقم، 1000 رقم، 20 ؟ قلنا الـ counter إمتى؟ لما أكون عارف عدد مرات التكرار.
تكرار هنا أنا مش عارف، فعشان كدة حطيت شرط. صح؟ يبقى أنا اللي هعمله إيه؟ الـ User هيدخلي رقم، والله الرقم ده كان أكبر من أو يساوي الصفر هكمل، أكبر من أو يساوي الصفر هكمل، أكبر من أو يساوي الصفر هكمل، أول ما يدخل رقم سالب هخرج من الـ loop. وفي الآخر هنا أنا عاوز أعمل cout.
فهقوله the sum of positive numbers يساوي أهو، وهعمل هنا أطبع الـ sum وأحط هنا slash n بس عشان يبقى السطر شكله.طبعاً الكلام ده يا جماعة الشكل ده إحنا عرفناه قبل كدة، شكل كتابة الـ sum ده إحنا عرفناه
طيب، ثم بعد كدة لو جيت نفذت قلت Control F5، بص كدة بقى، هدخل مثلاً 5، ده رقم positive، 77، 3، مش عارف إيه، تمام، كله أدام بدخل أرقام موجبة مش هيعترض، أول ما أدخل رقم سالب
ولمثلاً  سالب 2، خرج من الـ loop وراح طبعلي الجملة اللي بعديها. شفت بقى؟ خدت بالك؟ يبقى أنت هنا الـ loop بتاعتك توقف تكرارها بناءً على الشرط ده. وعشان كدة هنا مستعملتش أنا counter. ماشي؟ أدي مثال تاني جميل. يبقى أنت ممكن تفكر إزاي في البرنامج؟ أنت بتكتب اللي أنت بتكتبه عادي كأنك هتنفذه مرة واحدة
ثم بتحط عليه الـ loop بالشرط أو بالـ counter اللي أنت هتستخدمه لو العدد معلوم بالنسبة لك. واضح؟ أدي مثال تاني بسيط يسر لنا الفكرة شوية.طيب خلينا ناخد مثال كمان الـ while loop تكون فيها أكثر من شرط. طبعاً أنا أقدر أجمع بين أكثر من شرط باستخدام الـ logical operators اللي هو الـ and والـ or. خدناهم إحنا ودرسناها أما كنا بنتكلم عن الـ if stat.
مثال زي ده مثلاً، هنا بيقول write a program to calculate and prints out the average grade for five students. عندي خمس طلاب، or ends the program by سالب entering 1. يعني إيه؟ يعني هو عاوز يطلب من الـ User خمس درجات، طب افرض الـ User عنده درجتين بس وعاوز ينهي البرنامج؟ يدوس سالب 1.
إزاي نعمل ده؟ أنا هنا معايا نسخة من البرنامج القديم. بمنتهى البساطة البرنامج كان عبارة عن إيه؟ إن أنا عندي counter بادئة قيمته بـ 1، وعندي مجموعة من الجمل عاوز أكررها خمس مرات. الجمل دي كانت إيه؟ إن أنا بطلب من الـ User الـ grade.
فبيدهالي، فأنا بستقبلها منه وأخزنها في الـ variable اللي اسمه grade، ثم بجمع القيمة ديت على الـ variable اللي اسمه sum وكل مرة بزود الـ counter بتاعي بكام؟ بـ 1. الواقع بقى إن الـ loop دي كانت بتتكرر كام مرة؟ خمس مرات. صح كدة؟ طيب، دلوقتي في مستجد
إن الـ loop دي ممكن تتكرر خمس مرات أو إن الـ User يدوس سالب 1 وينهي الـ loop. صح؟ يبقى سالب 1 or to end . أنا كدة عرفت الـ User أهو. يبقى أنت ممكن تدخل خمس درجات أو تدخل سالب 1 وتنهي. طيب، بالراحة بقى، شرط الاستمرارية دلوقتي في الـ loop بقى إيه؟
بأن الـ counter أصغر من أو يساوي 5، وكمان إن الـ grade اللي الـ User بيدخلها دي لا تساوي  سالب 1. شفت بقى؟ يبقى أصبح الاستمرار في الـ loop بدل ما كان متوقف على شرط واحد، لأ، أصبح متوقف على شرطين الشرط الأولاني إن الـ counter يكون أقل من أو يساوي 5
يبقى طول ما الـ counter واحد أو 2 أو 3 أو 4 أو 5 ok. والشرط التاني إنه لازم الـ grades الـ user بيدخلها ميكونش فيها إيه؟  سالب 1. صح؟ تعال نجرب كدة، هدوس Control F5 أهو، أدي الكود اللي قدامي، هو هنا مثلاً هدخل
أدي الدرجة الأولى 10، 20، 30، 40، 50. آه دي مفيهاش مشكلة، ليه؟ برافو عليك، لأن هو هنا دخل خمس مرات فخرجت بعد خمس مرات. طيب، هنفترض كدة بقى Control F5.
أهو، بص بقى أنا عملت إيه؟ دخلت مثلاً درجة واتنين وبعدين رحت دايس سالب 1. أما دوس سالب 1 عمل إيه؟ خرج برضه من الـ loop لأن الشرطين دلوقتي في منهم واحد بـ false. هنا قايله لازم يكون الـ grade لا تساوي  سالب 1. أصبحت دلوقتي الـ grade بتساوي  سالب 1 فأصبح بـ false. طبعاً أنت عارف الـ and.
أما بستخدمها في الجمع بين شرطين، لازم عشان القيمة اللي بين الأقواس دي كلها تبقى بـ true لازم يكون الشرطين بـ true. دلوقتي أحد الشرطين بـ false يبقى إذاً المحصلة بتاعت اللي بين الأقواس بـ false عشان كدة خرج من الـ while loop. خلاص واضح؟ أدي بمنتهى البساطة لو أنت عاوز
تجمع بين أكثر من شرط في الـ while loop. ماشي؟ ننتقل بعد كدة يا جماعة للكلام عن الشكل التاني من أشكال الجمل اللي بتستخدم في عملية التكرار وهو الـ do while loop. الـdo while    loop كفكرة نفس فكرة الـ while loop.
بمعنى إن أنا بستخدمها لتكرار course of actions أو مجموعة من ال actions أو مجموعة من الـ statement أكثر من مرة. الـ syntax بتاعها مختلف. إزاي؟ هنا أنا بكتب كلمة do ثم بفتح قوسين وبحط الجمل المراد تكرارها.
ثم بعد الجمل بذكر الشرط بتاع الاستمرار في الـ loop. خلي بالك شوف الشكل مختلف إزاي؟ آه، ده عكس الـ while loop. صح؟ الـ while loop كانت إزاي؟ كانت كدة بكتب الـ while ثم بحدد شرط الاستمرار في الـ loop ثم بحدد الجمل المراد تكرارها.
طيب، يا ترى الشكل المختلف ده بقى هيفرق في إيه؟ هيفرق في حاجات كتير. أهم شيء هيفرق فيه إن هنا الجمل دي يا جماعة هتتنفذ ولو على الأقل مرة واحدة حتى لو الشرط ده كان خطأ أو الشرط ده كان بـ false.
إزاي؟ شوف، لو أنا ببدأ أنفذ أنا هنفذ الجملة دي ثم الجملة دي ثم الجملة دي ثم الجملة دي، وبعد ما أنفذ الجمل دي كلها هعمل check على الشرط. هنفترض إن الشرط ده طلع بـ false، خلاص هخرج من الـ loop، أينعم أنا هخرج من الـ loop بس هكون نفذت الكلام ده ولو على الأقل مرة واحدة.
لكن هنا في الـ while لأن الشرط قبل الجمل إذاً أنا ممكن قبل ما آجي أخش الـ loop أعمل check على الـ condition فيطلع الـ condition بـ false فيبقى منفذش الجمل دي ولا مرة. خدت بالك؟ يبقى إذاً أنا هستخدم الـ do while إمتى؟ هستخدمها في حالة أما يكون عندي جمل عاوز أنفذها على الأقل ولو مرة واحدة.
إنما الـ while loop اللي إحنا اتعودنا عليها، لأ، أنا بستخدمها في الحالات اللي أنا مش عاوز الجمل بتاعتي تتنفذ إلا لو الشرط كان إيه؟ كان صحيح. ماشي كدة؟ خلاص؟ طيب. الرسمة دي هتوضحلك برضه مسار تنفيذ الـ do while loop. بمنتهى البساطة أنا برضه لو عندي counter بعمله initialize زي ما إحنا قلنا.
ثم بخش على الـ body of loop بنفذ الجمل بتاعت الـ loop، وبعد كدة برضه بزود الـ counter بعمل increment. وهنا بقى بتيجي مرحلة الـ test للـ condition بتاعي أو شرط الاستمرار في الـ loop. لو الشرط بتاع الاستمرار ده أو الـ continuation condition ده طلع بـ true هنعمل إيه؟ هنرجع تاني وننفذ الـ body بتاع الـ loop مرة تانية وتالتة ورابعة لحد ما الشرط يبقى بـ false.
طيب الشرط طلع بـ false يبقى أنا هخرج برة إيه؟ هخرج برة الـ loop. خلاص؟ يبقى الهدف أو الفرق الجوهري بين الـ do while والـ while loop إن الجمل اللي في الـ do while loop هتنفذ ولو على الأقل مرة واحدة حتى لو الشرط كان خطأ. طبعاً الـ condition ده بينطبق عليه نفس اللي انطبق على الـ condition بتاع الـ while loop إن دي الأشكال المسموح بيها ممكن تكون relational expression ممكن يكون logical expression.
يجمع بين أكثر من شرط، ممكن يكون integer constant، ممكن يكون arithmetic expression. زي ما إحنا قلنا بالظبط في الـ while loop. طيب، خلينا ناخد مثال، نفس المثال تعال نجربه تاني بس بالـ do while المثال اللي إحنا خدنا فيه ست درجات من الطلاب وحسبنا الـ average وطبعناه. لو أنا رجعت أنا وأنت
للكود، أدي الكود اللي إحنا كنا كاتبينه، نفس المثال. إيه اللي أنا هعمله زيادة؟ كل اللي هعمله إن أشيل الـ while condition ده من هنا أهو، وأحطه تحت الـ body بتاع الـ loop. وأحط semicolon. ومكان الـ while فوق هكتب do. شوف، نفس كل حاجة أهو.
لو دوست Control F5 جرب كدة، أهو enter grades فأنا هقول والله مثلاً الـ grade 10، والـ grade التانية 20، وبعدين مثلاً 30، وبعدين 40 هنفترض، وبعدين 50، وبعدين 60. يبقى أهو، معنديش مشكلة، صح؟ يبقى اتنفذت ست مرات.
طيب، خليني بقى أوريلك الخطورة بتاعة الـ do while. شوف هنا أنا لو الـ counter ده بـ 8. المفروض يخش الـ loop دي ولا ميخشش؟ حسب الشرط اللي هنا الـ counter المفروض تكون قيمته أصغر من أو يساوي الـ 6.
لكن بالرغم من كدة هيخش الـ loop. ليه بقى؟ هي دي بقى الفكرة من الـ do while بينفذ الكود الأول ثم يعمل test على الـ condition. تعال نجرب كدة، أهو Control + F5، أهو هتلاقيه فعلاً دخل الـ loop وبدأ يسألني على الـ grade. فأنا هدخل مثلاً grade 20، فتلاقيني دخلت grade واحدة وخرج.
ليه؟ لأنه بعد ما نفذ الكود ده، راح عمل test على الـ condition. فلقى إن الـ counter قيمته بـ 8. 8 يعني أصغر من أو يساوي الـ 6؟ لا طبعاً. يبقى إذاً الـ condition بـ false فخرج من الـ loop. آه، يبقى هو خرج من الـ loop أينعم، لكن على الأقل نفذ الكود إيه؟ مرة واحدة. خلاص واضح يا جماعة؟ أدي الفرق البسيط أو يعني الواضح أوي بين الـ do while والـ while loop.
ماشي؟ تمام.