طيب بسم الله الرحمن الرحيم اليوم إن شاء الله يا
جماعة هنكمل في موضوع ال loops يعني احنا في كل
محاضرة بنتدرج و بناخد أمثلة متقدمة أكثر وشوفنا
المحاضرة الماضية موضوع nested loops يعني لما يكون
في عندي loop داخل loop ثاني طبعا قلنا كمان أن
nested loops بتلزمني بشكل عام لما يكون أنا بلزمني
أعمل iteration على مجموعة عناصر وداخل كل iteration
بلزمني أعمل iterations أخرى لكل عنصر من العناصر
هذه زي مثلا أنا أبدأ أعمل iteration عشان أجيب مثلا
مجموعة من الطلبة معلومات مجموعة من الطلبة أنا أبدأ
أعمل iteration أو loop على أساس أجيب أسماء أو أرقام
الطلبة وبعدين لما أجيب كل رقم طالب بلزمني أعمل
loop ثاني عشان أجيب مثلا المواد اللي ماخدها
الطالب فالآن أنا بدي عندي loop برا الهدف منها أني
أعمل .. ألف على الطلاب وبعدين لكل طالب أنا بجيبه
وبدي ألف على بياناته عشان أجيب مثلا المواد اللي
هو مسجلها تمام؟ هذا مثال على nested loops و طرحنا
بعض الأمثلة على نفس ال loops المحاضرة الماضية شوفنا
مثلا لما يكون أنا عندي مجموعة نصوص بأطلب من
المستخدم يدخلي خمس نصوص وكل نص بدي أطبع حروف
مفرقة صح ولا لأ مش أخدنا المثال هذا عملنا loop
لإدخال البيانات وكل string أنا بدخله بعمل داخل
ال loop بتاعة الإدخال loop ثانية أنها تلف على
الحروف وتطبع ليهم مفصلين عن بعض أخدنا مثال ثاني
إنما نجيب مضروب الأعداد من واحد لعشرة طبعا في مثال
زي كده لما أقول لك مضروب الأعداد من واحد لعشرة حاول
ده من اتجزء المشكلة لمشاكل صغيرة إيش أنا مضروب
الأعداد من واحد لعشرة يعني بدي أمر على الأعداد من
واحد لعشرة وكل .. لأ كل عدد بمر عليه قاعد أنا بقول
مضروب الأعداد من واحد لعشرة إيش أنا مضروب الأعداد
من واحد لعشرة يعني بدي أروح للواحد وأحسب مضروبه و
بدي أروح للاتنين وأحسب مضروبه و الثلاثه وأحسب
مضروبه وهكذا لما أوصل للعشرة هذا معناه أنه في
الأول لازم أعمل loop تمر على الأعداد من واحد لعشرة
وبعد أن كل عدد أنا بمر عليه بدي أحسب مضروبه حساب
المضروب نفسه لكل عدد بلزمه loop صح ولا لأ يعني لما
أكون أقيم ثلاثه بدي أعمل loop من واحد لثلاثه عشان
أضرب الأعداد من واحد لثلاثة لما أكون أنا عند
السبعة بدي أعمل لوب من واحد لسبعة تمام؟ يعني في
عندي two loops ال outer loop اللي برا بتلوف على
الأرقام الأساسية اللي هي من واحد لعشرة ال loop اللي
جواها لكل رقم من واحد لعشرة بعمل loop من واحد
للرقم نفسه عشان أحسب مضروبه هذا المثال اللي حليناه
المحاضرة الماضية أنهينا المحاضرة عطيناكم تمرينين
وقلنا بنتشاركونا في حل التمرينين هدول اللي هم
فيه شكل بنرسمه كيف
كان؟ ببدأ خمس نجوم ولا؟ هاي خمس نجوم و
بعدين أربعة و
بعدين ثلاثة وبعدين اثنين
وبعدين واحد طيب مين حل التمرين هذا؟
مين حل التمرين يا جماعة؟ طيب
عندك فكرة حاولت تحله؟ طيب إيش الفكرة؟
طب ليش بدك two loops؟
ليش؟ ليش بيلزم two loops؟ ليش الأولى وليش الثانية؟
في loop برا وفي loop جوا صح ولا .. ولا كل واحدة
مالهاش علاقة في الثانية؟ طيب ال loop اللي برا ليش و
ال loop اللي جوه ليش؟ ال loop اللي برا بتكون ال loop
اللي جوه أيوه
أنت اه قول ال loop اللي برا بتطرح واحد اثنين اثنين
ال loop اللي جوه بتزاود على الصفوف يعني
أنا بالزمن ال loop برا أول حاجة تمر على الصفوف صح أو
لا؟ في loop لو عندي أنا خمس صفوف بلزمني أعمل عداد
مثلا من صفر إلى أقل من خمسة عشان أمر على الأسطر
لأن جوا ال loop هذه في عندي loop ثاني اللي بتطبع نجوم
المحاضرة الماضية حلينا مثال احنا نطبع نجوم مثلا كل
سطر يكون فيه خمس نجوم صح أو لا؟ عندي مثلا خمس سطور
وكل سطر فيه عشر نجوم خمس سطور وكل سطر عشر نجوم
عملنا two loops ال loop الأولى بتمر على الخمس سطور
ال loop الثاني اللي جوا ال loop الأولى كل سطر بمر عليه
بطبع عشر نجوم كيف بعمل loop من صفر لعشرة two loops
بس هذه مختلفة شوية فإيش مختلفة أن كل سطر بينقص
واحد طب إيش الفكرة كيف أخلي كل سطر ينقص واحد أيوه
العدد الأصلي ناقص ال I تمام
اللي هي I بتاعة ال loop اللي فوق طيب تمام أخذنا نجرب
نحله
السؤال هذا يا جماعة الآن for
integer I صفر I أصغر من خمسة
I++ هذا ال loop اللي برا لا إيش يا جماعة لا لا أسطر
صح ولا لا أنا
هنا بمر على سطر سطر طيب جوا ال loop هذه في كل لفة
بدي أطبع خلينا نفترض أن الأرض بضاعطبع خمس نجوم في كل
سطر في كل سطر بضاعطبع برضه خمس نجوم فجوا ال loop
اللي برا بتعمل loop ثانية integer j يساوي صفر j
أصغر من خمسة j زائد زائد system.out.print
نجمة
وهنا system.out.println هذا
ال code إيش بيعمل يا جماعة بطبع خمس أسطر وكل سطر
فيه إيش فيه خمس نجوم
هذا السؤال حليناه في المحاضرة الماضية صح ولا طيب
ماشي الآن لو فرضنا .. الآن يا جماعة لو حطيت بدل
الخمسة I إيش معنى الكلام هذا أن حطيت بدل الخمسة I
الآن صارت ال loop اللي جوا معتمد على قيمة مين ال I
لأ بدي أحطها أصغر من أو يساوي I زي كده؟ ليش؟ أول حاجة
أول قيمة لل I قد إيش هتكون صفر عند السطر الأول قيمة
ال I صفر لأن ال loop اللي جوا هتعمل loop من صفر إلى
أصغر من أو يساوي صفر وهتطبع نجوم كام نجمة هتطبع
واحدة من صفر إلى أصغر من أو يساوي صفر تمام هتطلع
نجمة نجمة واحدة صح ولا يا جماعة بعدين خلص ال loop
اللي جواب بيرجع يزيد ال I بقد إيش؟ بواحد وبعدين هيجي
يعمل loop هنا من j صفر إلى j أصغر منه أو يساوي
واحد يعني كام لفة بلف؟ لفتين لما تكون ال j بصفر
ولما تكون ال j بواحد هيطبع نجم ثاني خلص ال j
بيرجع بيزيد ال I بقد إيش؟ هيزيدها بواحد، هيصير اثنين
هيجي جوا هنا هيعمل loop من وين؟ من صفر إلى أصغر من
أو يساوي اثنين هيطبع عند الصفر وعند الواحد وعند
الاثنين كام نجمة هيطبع؟ ثلاثة لأن ال loop اللي جوا
صارت معتمد على قيمة مين؟ قيمة ال I في أول لفة قيمة
ال I بصفر هيطبع نجمة لأنه هيعمل loop من صفر إلى
أصغر من أو يساوي صفر لما تصير ال I بواحد هيطبع
نجمتين اللي هو ال loop اللي جوا لما تصير ال I باثنين
هيطبع ثلاث نجوم لو جيت عملت run إيش
عمل هنا أول سطر طبعا نجمة ثاني سطر طبعا نجمتين
بعدين ثلاثة إيش تفسير هذه أن الآن في كل هذه اللي
بيطبع النجوم مين ال loop اللي برا ولا ال loop اللي جوا
ال loop اللي جوا ال loop اللي جوا هتلف كام لفة بناء
على عدد ال I ال I في أول لفة في ال loop اللي برا
هتكون صفر فهيطبع نجمة واحدة في اللفة الثانية لل I
هتكون واحدة هذا يطبع مرتين لأنه يطبع عند ال J صفر
وال J واحد بعدين هتصير اثنين ثلاثة أربعة فكل ما
زادت ال I كل ما زاد عدد النجوم اللي بتطبعها لأن
هذا ال loop شايفين بطل تقول أصغر من أو يساوي خمسة
صرت أقول أصغر من أو يساوي I صح ولا؟ وال I مالها
بتظلها تزيد
فطلع بالشكل هذا فاهمين يا جماعة هذه الآن اللي أنا
طالبه مش هذه أنا طالبها إيش بالعكس
أيوه طيب
ايش أخلي ايش ايش الـ I5 هذه أخليها خمسة
هذا تبدأ من الـ I5 ثم نقطع الـ I نقص نقص ثم
أصغر من أو يساوي صفر ثم
نقص نقص ثم نقطع الـ I
نقص نقصان هي طبعًا بالعكس بس طبعًا هنا خليها
أربعة هذه عشان يكون من أربعة إلى أكبر من أو يساوي
صفر عشان يطلع خمسة لأن دلوقتِ في أكثر من حل بس
خلينا كل حل نفسرّه لأن هنا الـ loop هيبدأ من أربعة
وينتهي عند ايش؟ يعني عند أول لفة قيمة الـ I قداش؟
أربعة صارت الـ loop اللي جوا تبدأ من وين؟ من صفر إلى
أصغر من أو يساوي أربعة يعني عند أول لفة للـ I هيطبع
الـ J كم مرة هيطبع نجمة؟ خمسة هتبدأ من عند صفر إلى
أصغر من أو يساوي أربعة أصغر من أو يساوي أربعة يعني
عن صفر وواحد واتنين وتلاتة وأربعة يطبع خمس نجوم
ماذا فعلنا؟ عكسنا قيم الـ I قبل قليل كانت الـ I من
صفر إلى خمسة أو من صفر إلى أربعة أقل من الخمسة
كانت من صفر إلى أربعة فكانت الـ I تزيد بناء عليها
يزيد عدد النجوم الآن الـ I مالها؟ بتقل أكبر قيمة
للـ I عند أول لفة اللي هي أربعة فبناء عليها يطبع
خمس نجوم لأنه بدأ من صفر إلى أصغر من أو يساوي أربعة
هذا حل هذا صحيح هيطبع الـ loop ايش؟ بالعكس
لأن الحل الثاني خلي هذه الـ
loop اللي عندي ضايلة زي ما هي من صفر إلى خمسة و
تعالي هنا وقل له خمسة ناقص الـ I
عند أول مرة تتغير من 0 إلى 4 عند أول مرة تتغير من
خمسة ناقص صفر يعني أصغر من هذه أخليها أصغر من أربعة أو
هذه أخليها أصغر من هيك دعوني أتأكد أنا شغالة تمام هذه
بقى بالطبعها صح؟ يعني هذه تتغير من صفر إلى أصغر من
خمسة عند أول قيمة بس بدل من أن هي أصغر من خمسة من الـ I
صارت أصغر من خمسة ناقص الـ I عشان يعكس القيمة يعني عند
أول لفة هتكون أصغر من خمسة صح أو لا؟ لما تصير الـ I
بواحد هتصير أصغر من أربعة هيجي العدد للنجوم واحد
اللي بعدها أصغر من تلاتة بعدين أصغر من اتنين
وبعدين أصغر من واحد هي بدها ايش؟ بدها تشغيل مخ
شوية وفي حل آخر الآن هذا الـ loop اللي جوا مش بيبدأ الـ
I من صفر إلى أصغر من خمسة تمام الـ loop اللي جوا ابدأ
من integer J يساوي أربعة اعملها بالعكس J أكبر من
أو يساوي الـ I J ناقص ناقص
لأن تعالَ نتأكد منه قبل ما نشرحه طيب هيطلع معكوس
برضه كيف؟ هاذي برة لأن الـ loop اللي برة بتتحرك من صفر
إلى أربعة زي ما هي طبعًا لأن الـ loop اللي جوا ببدأ
يعد من أربعة إلى الـ I يعني قيمة الـ I في الأول هتكون صفر
لما يعد من أربعة إلى صفر يعني خمس نجوم طبعًا بعدين
هتصير واحد هتصير يعد من أربعة إلى واحد قال نجمة
بعدين هتصير اتنين هتصير العد من أربعة على اتنين و
هكذا شوف أكثر من أكثر من حل وكل الحلول صحيحة تمام
كل الفكرة يا جماعة أن خلينا العداد اللي جوا يعتمد
على مين؟ على اللي برة خلينا العداد اللي جوا يعتمد
على العداد اللي فوق العداد اللي برة تمام أنا لاحظت
والله شوف في الأول عند أول سطر كان خمسة وبعدين
أربعة وبعدين تلاتة وبعدين اتنين وبعدين واحد يبقى
دايمًا عدد النجوم هو عكس عدد الأسطر صح أو لا؟ مش
هذا السطر صفر عند السطر صفر طبعه خمس نجوم عند
السطر واحد طبعه أربع نجوم فأنا ببساطة لو خلت
العلاقة عكسية شايفين
كيف خلتها عكسية؟ خلت خمسة ناقص خمسة ناقص الـ I ليش؟
عشان كل ما تزيد الـ I النهاية تقل علاقة عكسية مش
هذا هو الموجود هنا طبعًا
أسهل منها أنك تطبع بالشغلوب بالشغلوب هيك ابدأ من
أصغر من الـ I مش
هيك طبعناها بالشغلوب بتصير الـ J معتمدة على مين؟ الـ
I الـ I بتتغير من صفر واحد اتنين تلاتة أربعة صح
ولا؟ يبقى عند أول قيمة للـ I هيطبع نجمة عند ثاني
قيمة هيطلع نجمتين تلاتة أربعة عملت أنت الشكل
العادي الآن ايش بيضل عليك؟ تعكسه الشكل العادي
الأساسي هو زي هكذا صح؟
كل سطر ما تمَد على قيمة الـ I سطر الأول لما كانت الـ
I بصفر سطر الثاني لما كانت الـ I بواحد اتنين،
تلاتة، أربعة، تلاتة، أربعة، تلاتة، تلاتة، تلاتة،
تلاتة، تلاتة، تلاتة، تلاتة، تلاتة، تلاتة، تلاتة،
تلاتة، تلاتة، تلاتة، تلاتة، تلاتة، تلاتة،
تلاتة
طبعًا هنا خمسة وفي الآخر طبعًا واحد يعني معكسين كل
اللي عملته أن ايش؟ حطيت خمسة ناقص الـ I عشان نعكس الـ
loop بدها تفكير.. بدها تفكير شوية عشان هيك أنا
قلت لكم روحوا فكروا فيها في البيت طيب
السؤال الثاني
السؤال الثاني اللي طلعت لكم اياه كان كيف شكله؟ مش
هيك
كان شكله تقريبًا
الآن هذا ما بتقدر تحلّه بـ loop واحدة أو ب.. ب.. بدك
حق يعني جزئين الحل ليش؟ لأن الـ pattern أو النمط
مختلف يعني هدول بيطبقوا بزيادة وهدول بيطبقوا
بنقص فالحل أنك تجسّم جزئين ممكن تأخذ هذا الجزء و
تحلّه لحال وبعدين الجزء هذا تحلّه لحال كيف؟
الجزء الأول في نص الـ loops والجزء الثاني نص الـ
loops لأ
loop واحدة.. يعني ممكن تظبط بشغل ان if إذا وصل
لكذا ابدأ اطرح منه تمام؟ بس الأسهل ايش؟ أن أنت عندك
رسمتين فعليًا هذه رسمة وهذه رسمة ارسم كل واحدة لحال
لأن كل واحدة طريقة تعاملها مختلفة هذه عدد النجوم
بزيد مع زيادة الـ I هذه عدد النجوم بيقل مع زيادة الـ I
فأرسم هذه لحال وأرسم هذه لحال كيف؟ خد الجزء
الأول الجزء الأول بيطبع نجوم من 0 إلى 5 اللي هو
ايش؟ اللي هو هذا هذا الـ code شايفينه بيطبع نجوم من
الصغير لايش؟ للكبير صح ولا لأ يا جماعة؟ هذا اللي
موجود قدامنا هي وبيطبع من جيه صفر إلى الـ I الـ I من ولا
ولا بتتغير من صفر إلى خمسة بظلها تزيد ففي الأول
هيطبع نجمة بعدين نجمتين بعدين تلاتة لحد خمسة هي
ما خلصناهوش لأ بنعمل ايش؟ الـ code العكسي خد هذا وانزل
تحت وانسخه واعكس الـ loop اللي فوق هذه تمام أي حل من
الحلول اللي قلناها قبل شوية ابدأ من أربعة وقول له
أكبر من أو يساوي صفر والـ I ناقص ناقص عكسنا الـ I عشان
لما ييجي يطبع النجوم يبدأ من القيمة الكبيرة وتقل
الـ I بس لسه هنا في مشكلة ايش هي؟ أن لما تيجي تطبع
هيك هتلاقي أن هدول السطرين معاهم زي بعض المفروض
الشكل اللي تحت أول سطر مش يطبع خمسة يطبع أربعة
فهذه بسيطة ابدأ من تلاتة
صحوا الله يا جماعة الآن
هاي الشكل طلع الصورة هذه هذا الجزء الأول عملناه و
احنا نسل الـ loops لحال والجزء الثاني عملناه نسل
الـ loops لحال
هذا الـ code يبقى أكبر زي هي كده بدنا نعمل full
loop ثاني ل.. بظبط بدك تعمل فوق جوا F state بدها
.. بدها شغل شوية بدها تفكير تمام؟ بس هذا.. هذا الـ
code هذا سهل يعني ما فيش.. أنا طلعت عليه قلت
هدول رسمتين هد الرسمة فوق وهد الرسمة تحت بس أنا
ليش فصلتهم؟ لأن هد الـ loop عملها بيختلف عن الـ تحت
مفهوم؟ عشان أحطهم الاثنين مع بعض أو بنفع بس بدها
شغل عشان أحطهم مع بعض
واضح يا جماعة حل السؤال هذا؟ زي ما قلت بعيد و بزّيد
أن البرمجة يا جماعة بدها ممارسة تمام؟ في منكم كثير
جاي وهو لسه إيش اصلا مش مجرب مش محاول فطبعا إيش
لسه بده يقعد مبلّم شوية في ال code عشر دقايق قبل ما
يبدأ يستوعب لسه ليش؟ لأنه بده لسه يتذكر إيش اللي
بيصير هذا أو إيش اللي بنعمله طب كيف ال I و كيف ال
J كله بده تمرينالبرمجة زي الرياضيات، الرياضيات من
غير ما تحل تمارين وأمك ما بتتمكن منها، والبرمجة
نفس الحاجة، بس البرمجة طبعا أسهل من الرياضيات، صح
ولا، على الأقل إن أنت الرياضيات بتحل وأنت مش عارف
إيش بتحل، صح ولا لأ مش هم خدتوا تفاضل وتكامل مش
عارفين إيش فيه ديته عارفين إيش فيه ديته تفاضل
وتكامل مش عارف طبعا هذا مشكلة في تعليم الرياضيات
الأصل أنه قبل ما يشرحوا لك إيش هو التفاضل والتكامل
والمتتابعات أنه يعطيك أمثلة حياتية يقولك إيش فيه
ديتها وبعدين يقولك إيش فيها مش تطلع أنت بس حلال
مسائل وأنت مش عارف إيش .. لكن البرمجة لأ البرمجة
أنت قاعد بتشوف فيه نتائج طالع تمام؟ طبعا واحد
هيقولك إحنا استفدنا حاجة كتير من الرسم هذا ماشي
هذا مثال بسيط تمام إحنا بنبدأ معاك بسيط إذا عرفت
ترسم حاجات زي هيك كيف بيرسم الوجوه ال 3D تمام؟ كلها
عبارة عن نقاط والنقط موجودة في أماكن تمام؟ ولا
.. والنقط مثلا عشان يرسموا انحناء وجه النقاط
تتحرك بالشكل هذا مثلا أو تتحرك بالشكل عكسي تمام؟
فأنت دائما بتبدأ بال basis عشان تصل لنقاط معقدة
جدا طيب
يا جماعة ضايل علينا نقطة في ال loops
انتموا معايا التمرين هذا لأن إحنا أخدنا تمرين يا
جماعة إن أطلب من المستخدم يدخل كلمات أو أسماء مثلا
خمس مرات أو عشر مرات كيف عملناها أيامها عملنا
scanner بعدين
بقول إذا أنا بدي المستخدم يدخل خمس أسماء بدي أعمل
for loop من وين؟
أعمل for loop خمس مرات وفي كل لفة على ال for loop
بروح لل scanner وبقول له next line وحط ليها في
ال string name واطبع ليه ال name
طيب هذا لأنه يدخل خمس مرات أو عشر مرات عدد ثابت من
المرات لكن افرض أنا بدعم البرنامج بدي أطلب من
المستخدم يدخل يظل باستمرار يدخل أسماء لحد ما هو
يقول أنا بتبطل خلاص طبعا يعني مثلا يقول لما ندفج
على إشارة أنه لو دخل مثلا إشارة end يبطل إيش
يستجبل أسماءمعينته ولا يا جماعة يعني بيضل باستمرار
يدخل لحد ما المستخدم يدخل عندما فعلا أو يحط إشارة
سلم يوقف ادخال بيانات واضح إيش بده يعمل؟ الآن أنا
ال loop عندي مش عارف كم مرة بده يعملها مبدئيا أنا
اللي بعرف إنه بيضل يعيد ويزيد بناء بعدين يقرر بناء
على إيش على اللي يدخله المستخدم واضح إيش اللي بده
يعمل يا جماعة؟ طيب، حد عنده فكرة كيف ممكن نحل هذه
السؤال؟ إنه أنا أضل لأدخل input لحد ما نشوف
المستخدم إيش يدخل، هو هو يقرر أيوة وين
ال F نعملها؟ طيب تمام، اه يعمل break
تمام، هذا حل نسبيا صحيح إن إحنا نعمل loop وبعدين
نطلب المستخدم يدخل البيانات إذا لجأ القيمة اللي
دخلها المستخدم يعمل break بس في إشكالية صغيرة إيش
هي الآن أنا هذه for loop صح ولا لأ طب افرض أنا
عامل ال for loop ل 10 والمستخدم عند 10 هتوقف حتى
لو أنا مديش هوقف يعني ال for loop فيها مشكلة إيش
هي إنه لازم أُحدد النهاية صح ولا لأ طب افرض أنا بدي
بعد العشرة واحد بيقول احطها أنا مليون مهم مش هيدخل
مليون لأ هذا مش حل كيف؟ كيف؟ أيوة
نعمل Boolean من برا بنخليه يسوي ال proof نحط إن
هذا ال Boolean جوا شرط ال for وبعدين نعمل F جوا و
إذا كان يسوي exit يعني ال four مابتنش تحط فيها هذا
الكلام كله لأ مابنش نحط فيها وتحط فيها هيك بس
true لأ نعمل Boolean نعرف فوق فوق ال four هيك
Boolean Boolean ونحط اسم يساوي true هي x هي يساوي
true طيب والحين نحط إنه x for x في ال four loop
يا جماعة لازم يكون عندك عداد لازم يكون integer لأ
بدنا نحط إحنا بس شعر .. بنحط يعني سيمي كولم وسيمي
كولم في النص اللي هي X هنا في ال .. هنا X؟ هيك؟ اه
في اللي تنتهي لك ال I .. integer I وال I زاد زاد
طيب .. لأ هيك بتعجبتها هم مش هيفهموا حاجة منها حتى
لو كانت صح أيوة وأنت integer ال I يساوي زاد زاد و
بعدين I أنت برا لأ مش هي طيب انتموا معايا يا
جماعة هلجيت لما أكون أنا بدي أعمل loop
أنا مش عارف نهيتها إلا بناء على كلام المستخدم أو
ال input تبعه لا يفضل إنك تستخدم for loop ال for
loop يفضل استخدامها امتى لما أكون أنا عارف في
البداية وعارف النهاية لكن لما تكون النهاية مش
معروفة أفضل تستخدم ال while loop تمام ال while ليش
ال while إحنا أخدناها إن إيش بتحط بين القوسين شرط
الاستمرار صح ولا كنا زمان مثلا لما نعمل loop من
صفر لعشرة كنا نحط integer x صفر وبعدين نقول while
ال x أصغر من أو يساوي عشرة اعمل حاجة
وبعدين زيد ال X بإيش؟ بواحد هذا هو شرط إيش؟ شرط
الاستمرار الآن اللي اختلف إنه برضه من الاستخدام و
هو ال loop لكن شرط الاستمرار إنه النص اللي بدخل
المستخدم إيش يكون؟ لا يساوي end صح؟ يعني أنا إيش
بيدعمل؟ بيدعمل ال loop وبيدعمل الاستمرار أطلب من
المستخدم من جوا ال loop إن يدخل بيانات جديدة شرط
الاستمرار إيش هو؟ إن الـ String اللي بيدخلها
المستخدم لا تساوي End بس كيف نعملها؟ اتطلع معايا
هنا مثلا أنا بدأ أدخل عشر أو أو بدأ أطلب من
المستخدم يدخل أسماء أسماء لحد ما يكتب لي كلمة End
تمام؟ أول مرة بس عند أول اسم لازم أطلب من المستخدم
أقوله Enter a Name ماذا يعني؟ يدخل الاسم لسه قبل ما
أبدأ لوب لإيش؟ لأن بقدرش أبدأ لوب إلا لما يكون في
عندي على الأقل واحد يدخل الاسم واحد الآن string
name يساوي s.nextline هي دخل الاسم الأول تمام؟
الآن بقول while طالما ال name dot equals end
equals ignore case كما بنستخدم وحط
قبلها إيش علامة تعجب إيش هذا اللي أنا عملته يا
جماعة الآن
أول حاجة طلبت من المستخدم يدخل اسم بعدين قلت له
طالما الاسم لا يساوي ال end هذه equals ignore case
أخدناها لما قلنا لما نقارن نصيص مع بعض بنحط شو
ساوي بنحط equals تمام وعشان ننفيها بنحط إيش هنا
طالما
أنه لا يساوي end تمام خليني أطبع system.out
.println you entered أنت دخلت الاسم خلصنا
هيك لأ في مشكلة اتبع ال code مين يقول لأ جيت بناء
على الموجود إيش المشكلة في ال code اللي عندي هنا
لحظة إيش المشكلة قول لي أشراق قول لي إيش المشكلة في
ال code لأ أنا بقول لي إيش المشكلة تمام إيش هيسير
في هذا ال code هيقف إيش
مشكلة ال code هذا أيوة لو دخلت أحمد هيظل يطبع إيش؟
أحمد أحمد
أحمد
أحمد أحمد أحمد أحمد أحمد أحمد أحمد أحمد
لأن هذه الـ while loop بيظل باستمرار بفحص هل الاسم
لا يساوي end هو لا يساوي end عشان دخلت أحمد فطبع
ليه أحمد رجع تاني يفحص هل الاسم اه لا يساوي end
ضايل الاسم تبع لا يساوي end مدى الحياة فبيظل يطبع
أحمد اه فإيش الحل بعد أنت ما طبع أحمد بدك تطلب منه
يدخل كمان اسم جديد قبل ما يروح يفحص الشرط تاني فبدك
تاخد هدول السطرين أو تاني الآن بدك تقوله system
.out.println enter a name نفس السطر فوق وتقوله
name يساوي s.nextLine شرط مهم يا جماعة في ال while
loop أن الشرط يصل لنهاية صح ولا لا؟ لازم يكون فيه
تعديل ليش أنا لما كنت أقول Y X أصغر من أو يساوي عشر
أنا كنت أروح لل X في آخر ال while وأزيدها إيش
الواحد هلجيت اختلف فيه أنه ماعندي أنا X ورقم بزيده
بنجز فيه الآن ال while معتمد على إيش على قيمة مين
ال name فلازم تخلي قيمة ال name تتغير قبل نهاية ال
while loop صح ولا إيه يا جماعة إذا بدون هالصطرين ..
الصطرين هدول قيمة النيم ورا عمرها هتتغير فبظل
محجوز جوا ال loop فالآن بعد ما طبعلك الاسم خليته
يدخل اسم جديد ويخزن الاسم الجديد وين؟ في ال name
رجع يفحص ثاني هل ال name الجديد اللي دخل لا يساوي
end إذا لا يساوي end إيش هيعمل؟ هيطبعلك ال name
هيقول يدخل .. هيطبعلك ياه وهيطلب منك إيش؟ تدخل اسم
جديد وهنا دخلت الاسم الجديد ويجيب يفحص تاني هل
هو لا يساوي end امتى هيطلع من ال while loop لما يكتب
end فاهمين حاجة يا شباب ولا لأ ببساطة شديدة أنا
بدي أعمل loop تطلب من المستخدم يدخل اسمها لحد ما
يكتب end عشان نعمل زي هيك أول حاجة قبل اللي بنطلب
من المستخدم على الأقل يدخل اسم واحد، ليش؟ لأن
الـwhile بلزمها شرط، ما أقدرش أكتب الشرط لما يكون
عندي على الأقل اسم، دخل الاسم الأول، وبعدين قلتله
طالما الاسم لا يساوي end اطبع للاسم، واطلب منه
يدخل إيش؟ اسم جديد، ورجع تاني يفحص
بفحص وبطلب منك اسم بفحص وبطلب منك اسم طالما
الاسم لا يساوي end يطبع الاسم يطلب منك اسم جديد
متى هيوقف ال while لما
يكتب end خلاص ما تحققش الشرط فبيطلع من ال while لأن
ال Inter-Anim هاي أحمد you entered إيش أحمد هاي
عليك you entered عليك عمر entered عمر and إيش صار
طلع من البرنامج فاهمين
حاجة يا جماعة حل آخر
الحل اللي أنا عملته أنه خليت ال while اللي سويته
هذا ال while loop معتمد على القيمة اللي بدخلها
المستخدم وفي كل لفة بغير القيمة هذه وبفحص من أول
وجديد الحل الثاني أنه أنا من أول باجي وبقوله
while true إيش يعني while true هذه while true
infinite loop إيش يعني يعني أنا ..اللي بين القوسين
تعني ال while كنا دائما متعودينه أكبر من أصغر من
equals يساوي أو لا يساوي لأن أصلا هدول كلهم bool
يعني بيرجعوا إيش true أو false طالما منها true بضل
جوا ال loop بطلت ال true هيطلع برا ال loop لأن أنا
عملت while loop بس إيش حطيت بين القوسين ال true هيك
ال while loop ولا عمره بيطلع منها بس أنا لازم أطلع
منها في حالة معينة إيش هي أنه يدخل end يعني الفكرة
هنا الحل الآخر أن أنا بدي أخليه داخل infinite loop
واطلب منه يدخل اسم وافحص الاسم إذا كان يساوي end
نعمل break تمام هذا الحل الثاني هاي حطيت while
true والآن عادي تصير إيش تعمل اطلب
منه يدخل اسم enter a name هاي جبنا الاسم لأن قبل ما
نطبع بده أفحص ال name if name dot equals ignore
case end إيش يعني؟ إذا ال name يساوي end إيش
بنعمل؟ break اطلع ما بلزمش
else أصلا ليش؟ لأنه لو ما دخلش على ال if هيكمل وين؟
على اللي بعدها إيش بده أحط بعدها؟ بالضبط مع ال name
System
.out.println you entered لأن
هذا خلصنا الحل الثاني ماهو الحل الثاني؟ حطيناها في
infinite loop قلنا له أنت دخل اسم دخل الاسم وقبل ما
أطبعه قبل ما أطبعه روح تفحصه إذا كان end إيش يعمل
break اطلع برا ال loop إذا مش end إيش هيعمل إيش
هيسوي هيطبع ال name وإيش يعمل بعدين يرجع تاني على
ال loop يقولك إيش دخل اسم جديد هيدخل اسم جديد
يفحصه مش end هيطبع لل name وهكذا في اللحظة اللي
بيساوي فيها end إيش هيعمل break هذا حل ثاني يمكن
أسهل من اللي تحت صح ولا لأن اللي تحت كان محتاج أن
أعمل اطلب منه يدخل name اه وبعدين جوا برضه يدخل
كمان مرة لكن هنا لأ بحط while true وبفحص بداخل
المستخدم طالما أنه لا يساوي end بضل مكمل إذا وصل
end بعمل break هتجرب الحل هذا كمان هاي
end طالع من البرنامج
واضح هذا يا جماعة؟ طب الآن ناخد تمرين بدنا
نعمل برنامج يطلب من المستخدم يدخل مجموعة أرقام
تمام؟ بشكل مستمر ويطبع لي ال average للأرقام هذه
بحيث أنه طبعا قد إيش عدد الأرقام دخلها المستخدم احنا
مش عارفين احنا مش عارفين عدد الأرقام اللي بيدخلها
المستخدم المستخدم بيضله يدخل أرقام لحد ما يحط
مثلا الرقم ناقص واحد إيش هناقص واحد؟ معناه اطلع
معاه ولا إيه يا جماعة يعني البرنامج هنعمل برنامج
يشتغل يقوله دخل رقم كمان رقم كمان رقم كمان رقم لحد
ما المستخدم يدخل إيش ناقص واحد في اللحظة اللي بدخل
فيها ناقص واحد البرنامج بيطبع له إيش ال average
بتاعت الأرقام عشان average متوسط الأرقام لأن واضح
أن هذا المثال بده loop infinite loop تنتهي امتى
لما يدخل سالب واحد تعالوا نحلها بطريقة الأخيرة
بالزمن أيضا أكيد أنه بالزمن إيش scanner
وبعدين بقول while true system
.out.println enter a number ادخل رقم نفترض أن كلهم
integers integer in هيسوي s.nextInt هيك هيدخل رقم
صح ولا يا جماعة طيب احنا إيش اللي بدنا اياه بدنا
نجيب متوسط الأرقام طبعا
قبل ما نجيب المتوسط هنا المفروض أن في code لحساب
المتوسط بس خلينا نكمل ال loop لأن
متى المفروض ينتهي إذا كان ال N قبل ما يعمل هذا ال
بيساوي ناقص واحد هيروح يعمل إيش break مش ناقص واحد
الآن بده يعمل الحسابات تعالوا طبعا طيب كيف نحسب ال
average لأن لحد الآن اللوب هذه مفهومة يا جماعة لأن
باختصار هنا بطلب المستخدم يدخل الرقم بضل المستخدم
يدخل الرقم والرقم هذا بيجي عند وين في ال N طالما
ال N ناقص واحد في اللحظة اللي بتصير فيها ال N ناقص
واحد إيش بيعمل break طب مش ناقص واحد هيروح .. طبعا
هنا لسه ما بعملش حاجة برجع بكمل فوق بطلب منك تدخل
رقم جديد طبعا احنا لسه ال code اللي عملناه ما لهوش
فايدة ليش؟ لأن الرقم اللي بيجي وبيحطه في ال N
طبعا لما يجي على اللفة اللي بعدها هيقرأ رقم جديد
راح ال N الجديدة صح ولا؟ أيوة زملائكم بدأ يفكر صح
بيقولك أنا الآن بدي أحسب متوسط المتوسط هو عبارة عن
إيش؟ المجموعة العدد يبقى لازم أنت الأرقام اللي بتمر
عليها تجمعها عدد طبعا؟ بدك عدد فبنيجي فوق هنا
integer sum يساوي صفر لأن كل رقم بنمر عليه تأكدنا
إذا بيساوي ناقص واحد إيش هيعمل ال break مش ناقص
واحد هيكمل إيش يكمل يعني يا نروح لل sum وزائد إيش
الآن هيك معناها أن كل عدد بيدخل المستخدم بيروح
بيضيفه وين؟ sum لحد إيش؟ لحد ما يحط ناقص واحد حط
ناقص واحد إيش هيصير؟ ال break هيعمل ال break إيش
يعني break؟ هيطلع من ال loop مش هيخلص البرنامج
هيطلع من ال loop هيكمل وين؟ بعد ال loop مش هيقولنا
ال break يا جماعة ال break بيوقف اللوب هيكمل بعدين
طب إيش ضل علينا خطوة الآن المتوسط المتوسط عبارة
عن المجموع على عدد بدنا العدد هال game صح ولا إيه يا
جماعة هه هيزبنكوا فكر ثاني صح برضه بدنا عداد آخر
ال sum بفرق عن ال count ال sum إيش فيه بيديتهيجيب
لمجموع الأعداد لكن إن نعمل عداد ثاني count قيمته
إيش؟ صفر هذا يعدي لي كم رقم دخل المستخدم وين بدنا
نزيد ال count هذا؟ هنا count زائد زائد الآن كل رقم
بيدخل المستخدم قبل ما تعمل أي خطوة اشرح يعمل
افحصوا هل هو ناقص واحد أو لا إذا ناقص واحد إيش
بنعمل break إذا مش ناقص واحد بدنا نروح نضيفه على
الـ sum ونزيد إيش الـ count بواحد مش تحطلي هدولة
قبل الـ F قبل الـ F غلط ليش لأن الـ F اللي كان ناقص
واحد هيضيفه على الـ sum وهيعده الأصل إنه ناقص واحد
مش من الأرقام اللي أنا بدي أحسبها صح ولا الآن
المفروض السؤال سهل أيه يا جماعة أنا اللي عملته
عملت infinite loop while true في كل لفة هطلب منه
يدخل رقم والرقم بيحط وين في الـ in وبعدين بقول
لطال إذا الـ in يساوي ناقص واحد اعمل break إذا مش
ناقص واحد هيكمل إيش هيعمل هيضيف الـ in على الـ sum و
يزود بواحد الآن مثال جربته دخلت خمسة أول حاجة is
while true انتر نمبر دخلت خمسة هل الخمسة تساوي
ناقص واحد؟ لأ هيضيفه على الـ sum ويضيفه على الـ count
بواحد رجع تاني على الـ while true هيطلب مني رقم
جديد دخلت ستة 6 تساوي نقص 1؟ لأ سوف يضيفها على هذي
صار 11 الـ sum واحدة صار إيش؟ اتنين لف كمان مرة
دخلت تلاتة التلاتة تساوي نقص واحد؟ لأ ضافها الـ sum
صارت إيش؟ أحداش وتلاتة أربعتاش والـ count إيش؟
تلاتة لفنا كمان لفة دخلنا نقص واحد هل نقص واحد
يساوي نقص واحد؟ صحيح اعمل إيش؟ break بعد الـ break
الآن خليني اطبع system.out.println
Average يساوي sum على
count وإذا أنت معنى بالكثور إيش
عملنا بس الـ sum ضفنا عليه إيش zero دي أو اعمله
casting مش أخذنا الـ casting هاي هنا اعمله double
ماذا أنا هنا فعلت؟ Double لمن؟ خلّي برضه عشان نضمن
لـSum وقسمت على الـCount لأن هما Integers فبروح
الكثور إذا أنا معنى بالكثر واحد منهم خلّي إيش؟
Double أو Float أو اجمع معاه .. شوفت أنا قبل شوية
إيش عملت؟ بدون Casting، ضفت عليه صفر D ضفت عليه ..
إيش هي ضفت عليه الصفر D؟ ما هو إحنا قلنا أي عملية
حسابية Integer مع Double بيحول الـ Integer ليش؟
لـDouble الآن مفهوم الحل اللي عملناه يا جماعة
هتنجربه الآن
هاي خمسة هاي ستة وهاي تلاتة وهاي سالب واحد الـ
average قداش؟ أربعة فاصل ستة لأن هو أربعة اتاش على
تلاتة
أه لما دخل سالب واحد إيش صار طلع من اللوب كمل ..
كمل بعد أيوة كيف؟
ما هو .. يا شوف أنا في النهاية لازم اتفق على إيش
يعني لازم يكون في حاجة أن تقول للمستخدم وقف تمام
احنا أنا افترضنا أن أنا بتعامل مع أرقام موجبة تمام
افترضنا أن احنا بتعامل مع أرقام موجبة مكره طبعا لما
أتقدم ليش بيقول هذا أساسقدام بدل ما نضغط على زر
ناقص واحد نضغط على زر نقص واحد
ناقص واحد نقص واحد نقص واحد نقص واحد نقص واحد نقص
واحد نقص واحد نقص واحد نقص واحد نقص واحد نقص
واحد