Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 16

‫مفهوم الحلقات‬

‫نستخدم الحلقات ( ‪ ) Loops‬بهدف تكرار نفس الكود عدة مرات‪.‬‬

‫إذًا أي كود نريده أن يتنفذ عدة مرات‪ ,‬نقوم بكتابته داخل حلقة فتقوم هي بإعادة تنفيذ الكود قدر ما شئنا ضمن شروط معينة نقوم نحن بتحديدها‪.‬‬

‫طريقة تنفيذ األوامر و الحلقات في الذاكرة‬

‫األوامر في العادة تتنفذ بتسلسل وراء بعضها‪ ,‬و لكن الحلقات تجعل سهم تنفيذ األوامر يقف عندها فيقوم بتنفيذ األوامر التي بداخلها عدة مرات‪,‬‬

‫و بعد أن يخرج من الحلقة يعود و يكمل تنفيذ باقي األوامر الموجودة بعدها كالتالي‪.‬‬

‫عندما تتنفذ الحلقة فإن األوامر الموضوعة فيها تنفذ بشكل منفصل عن باقي األوامر الموجودة في البرنامج‪ ,‬أي يمكنك إعتبار أن جميع أوامر‬

‫الحلقة توضع في مكان خاص في الذاكرة‪ ,‬هذا المكان يسمى ‪.scope‬‬

‫بعد أن تتنفذ جميع أوامر الحلقة في هذا الـ ‪ ,scope‬يتم مسح الـ ‪ scope‬كليًا من الذاكرة و هذه العملية تسمى ‪.Destroy‬‬
‫‪ C++‬أنواع الحلقات في‬
‫إسم الحلقة‬
‫دواعي اإلستخدام‬

‫تستخدم الحلقة ‪ for‬في حال كان عدد المرات التي سيعاد فيها تنفيذ الكود معروفًا‪.‬‬
‫‪For Loop‬‬

‫يفضل إستخدام الحلقة ‪ while‬في حال كان عدد المرات التي سيعاد فيها تنفيذ الكود غير معروف‬ ‫‪While Loop‬‬

‫يفضل إستخدام الحلقة ‪ do while‬في حال كان عدد المرات التي سيعاد فيها تنفيذ الكود غير معروف و بنفس‬
‫‪Do While‬‬
‫الوقت يجب أن يتنفذ مرة واحدة على األقل‪.‬‬
‫‪Loop‬‬

‫‪ for‬الحلقة‪C++‬‬
‫تعريف الحلقة ‪for‬‬ ‫‪‬‬

‫مثال حول الحلقة ‪for‬‬ ‫‪‬‬

‫‪ for‬تعريف الحلقة‬
‫نستخدم الحلقة ‪ for‬إذا كنا نريد تنفيذ الكود عدة مرات محددة‪ ,‬فمثًال إذا كنا نريد تنفيذ كود معين ‪ 10‬مرات‪ ,‬نضعه بداخل حلقة تعيد‬

‫نفسها ‪ 10‬دورات‪.‬‬

‫طريقة إستخدامها‬

‫) ‪ decrement‬أو ‪for( initialization; condition; increment‬‬


‫{‬
‫‪// statements‬‬
‫}‬

‫‪‬‬ ‫‪.‬هي أول خطوة تتنفذ في الحلقة و هي تتنفذ مرة واحدة فقط على عكس جميع العناصر الموجودة في الحلقة ‪initialization:‬‬

‫‪ ;.‬في هذه الخطوة نقوم بتعريف متغير ( يسمى عداد ) و نضع بعده‬
‫‪‬‬ ‫‪.‬هي ثاني خطوة تتنفذ في الحلقة و هي تتنفذ في كل دورة ‪condition:‬‬

‫‪ ;.‬في هذه الخطوة نقوم بوضع شرط يحدد متى تتوقف الحلقة‪ ,‬في كل دورة يتم التأكد أوًال إذا تحقق هذا الشرط أم ال‪ ,‬و نضع بعده‬

‫‪.‬سيعيد تكرار الكود ‪ true‬هنا طالما أن نتيجة الشرط تساوي‬

‫‪‬‬ ‫‪.‬هي الخطوة الثالثة‪ ,‬و تعني تنفيذ جميع األوامر الموجودة في الحلقة و هي تتنفذ في كل دورة ‪statements:‬‬

‫‪.‬بعد أن تتنفذ جميع األوامر سيصعد إلى الخطوة األخيرة التي تحدث في نهاية كل دورة و هي إما زيادة قيمة العداد أو إنقاصها‬

‫‪‬‬ ‫‪.‬هي الخطوة الرابعة و األخيرة‪ ,‬و هي تتنفذ في كل دورة ‪ increment:‬أو ‪decrement‬‬

‫‪ ;.‬هنا نحدد كيف تزداد أو تنقص قيمة العداد‪ ,‬و ال نضع بعده‬

‫تذكر فقط أن جميع هذه الخطوات تتكرر في كل دورة ما عدا أول خطوة‪ ,‬و السبب أننا ال نحتاج إلى تعريف عداد جديد في كل دورة‪ ,‬بل‬

‫نستعمل العداد القديم و الذي من خالله نعرف في أي دورة أصبحنا‪.‬‬

‫‪ for‬مثال حول الحلقة‬


‫في المثال التالي قمنا بتعريف حلقة تطبع جميع األرقام من ‪ 1‬إلى ‪.10‬‬
‫مثال‬

‫‪Main.cpp‬‬

‫>‪#include <iostream‬‬

‫;‪using namespace std‬‬

‫)(‪int main‬‬
‫{‬

‫هنا قمنا ‪ for‬تتألف من ‪ 10‬دورات‪ .‬في كل دورة تطبع قيمة العداد المستخدم فيها ‪//‬‬
‫بإنشاء حلقة‬

‫) ‪for( int i=1; i<=10; i++‬‬

‫{‬

‫;‪cout << i << endl‬‬

‫}‬

‫;‪return 0‬‬

‫}‬

‫سنحصل على النتيجة التالية عند التشغيل‪.‬‬

‫‪1‬‬

‫‪2‬‬

‫‪3‬‬

‫‪4‬‬

‫‪5‬‬

‫‪6‬‬

‫‪7‬‬

‫‪8‬‬

‫‪9‬‬

‫‪10‬‬
‫‪ while‬الحلقة‪C++‬‬
‫تعريف الحلقة ‪while‬‬ ‫‪‬‬

‫مثال حول الحلقة ‪while‬‬ ‫‪‬‬

‫‪ while‬تعريف الحلقة‬
‫نستخدم الحلقة ‪ while‬إذا كنا نريد تنفيذ الكود عدة مرات‪ ،‬و لكننا ال نعرف كم مرة بالتحديد‪.‬‬

‫هذه الحلقة تتوقف عن تكرار نفسها إذا لم يعد الشرط الموضوع فيها يتحقق‪.‬‬

‫هنا كأننا نقول‪" :‬طالما أن الشرط ال يزال يتحقق إستمر في تكرار الكود"‪.‬‬

‫طريقة إستخدامها‬

‫;‪initialization‬‬

‫) ‪while( condition‬‬
‫{‬
‫‪// statements‬‬

‫;‪ decrement‬أو ‪increment‬‬


‫}‬

‫‪‬‬ ‫‪.‬هي أول خطوة تتنفذ في الحلقة و هي تتنفذ مرة واحدة فقط على عكس جميع العناصر الموجودة في الحلقة ‪initialization:‬‬

‫‪.‬في هذه الخطوة نقوم بتعريف متغير ( يسمى عداد )‬

‫‪‬‬ ‫‪.‬هي ثاني خطوة تتنفذ في الحلقة و هي تتنفذ في كل دورة ‪condition:‬‬

‫‪.‬في هذه الخطوة نقوم بوضع شرط يحدد متى تتوقف الحلقة‪ ,‬في كل دورة يتم التأكد أوًال إذا تحقق هذا الشرط أم ال‬

‫‪.‬سيعيد تكرار الكود ‪ true‬هنا طالما أن نتيجة الشرط تساوي‬


‫‪‬‬ ‫‪.‬هي الخطوة الثالثة‪ ,‬و تعني تنفيذ جميع األوامر الموجودة في الحلقة و هي تتنفذ في كل دورة ‪statements:‬‬

‫‪‬‬ ‫‪.‬هي الخطوة الرابعة و األخيرة‪ ,‬و هي تتنفذ في كل دورة ‪ increment:‬أو ‪decrement‬‬

‫‪.‬هنا نحدد كيف تزداد أو تنقص قيمة العداد‬

‫تذكر فقط أن جميع هذه الخطوات تتكرر في كل دورة ما عدا أول خطوة‪ ,‬و السبب أننا ال نحتاج إلى تعريف عداد جديد في كل دورة‪ ,‬بل‬

‫نستعمل العداد القديم و الذي من خالله نعرف في أي دورة أصبحنا‪.‬‬

‫‪ while‬مثال حول الحلقة‬


‫في المثال التالي قمنا بتعريف حلقة تطبع جميع األرقام من ‪ 1‬إلى ‪.10‬‬
‫مثال‬

‫‪Main.cpp‬‬

‫>‪#include <iostream‬‬

‫;‪using namespace std‬‬

‫)(‪int main‬‬

‫{‬

‫هنا قمنا بتعريف المتغير الذي استخدمناه كعداد في الحلقة ‪//‬‬

‫;‪int i=1‬‬

‫تظل تنفذ األوامر الموضوعة فيها طالما أن قيمة العدد ال تزال أصغر أو تساوي ‪//‬‬
‫هنا أنشأنا حلقة ‪10 while‬‬

‫) ‪while( i<=10‬‬
‫{‬

‫في كل دورة سيتم طباعة قيمة العداد ثم إضافة ‪ 1‬عليها ‪//‬‬

‫;‪cout << i << endl‬‬

‫;‪i++‬‬

‫}‬

‫;‪return 0‬‬

‫}‬

‫سنحصل على النتيجة التالية عند التشغيل‪.‬‬

‫‪1‬‬

‫‪2‬‬

‫‪3‬‬

‫‪4‬‬

‫‪5‬‬

‫‪6‬‬

‫‪7‬‬

‫‪8‬‬

‫‪9‬‬

‫‪10‬‬
‫‪ do while‬الحلقة‬
‫تعريف الحلقة ‪do while‬‬ ‫‪‬‬

‫مثال حول الحلقة ‪do while‬‬ ‫‪‬‬

‫‪ do while‬تعريف الحلقة‬
‫نستخدم الحلقة ‪ while‬إذا كنا نريد تنفيذ الكود عدة مرات‪ ،‬و لكننا ال نعرف كم مرة بالتحديد‪.‬‬

‫هذه الحلقة تتوقف عن تكرار نفسها إذا لم يعد الشرط الموضوع فيها يتحقق‪.‬‬

‫هنا كأننا نقول‪" :‬نّف ذ الكود و إن كان الشرط ال يزال يتحقق فقم بتنفيذه من جديد"‪.‬‬

‫إذًا الفرق الوحيد بينها و بين الحلقة ‪ while‬أنها تتنفذ مرة واحدة على األقل ألنها تتأكد من الشرط بعد تنفيذ األوامر و ليس قبلهم‪.‬‬

‫طريقة إستخدامها‬

‫;‪initialization‬‬

‫{‪do‬‬
‫‪// statements‬‬
‫;‪ decrement‬أو ‪increment‬‬
‫}‬
‫;) ‪While( condition‬‬

‫‪‬‬ ‫‪.‬هي أول خطوة تتنفذ في الحلقة و هي تتنفذ مرة واحدة فقط على عكس جميع العناصر الموجودة في الحلقة ‪initialization:‬‬

‫‪.‬في هذه الخطوة نقوم بتعريف متغير ( يسمى عداد )‬

‫‪‬‬ ‫‪.‬هي الخطوة الثانية‪ ,‬و تعني تنفيذ جميع األوامر الموجودة في الحلقة و هي تتنفذ في كل دورة ‪statements:‬‬
‫‪‬‬ ‫‪.‬هي الخطوة الثالثة‪ ,‬و هي تتنفذ في كل دورة ‪ increment:‬أو ‪decrement‬‬

‫‪.‬هنا نحدد كيف تزداد أو تنقص قيمة العداد‬

‫‪‬‬ ‫‪.‬هي الخطوة الرابعة و األخيرة و هي تتنفذ في كل دورة ‪condition:‬‬

‫‪.‬في هذه الخطوة نقوم بوضع شرط يحدد متى تتوقف الحلقة‪ ,‬في نهاية كل دورة يتم التأكد إذا تحقق الشرط أم ال‬

‫‪.‬سيعيد تكرار الكود ‪ true‬هنا طالما أن نتيجة الشرط تساوي‬

‫تذكر فقط أن جميع هذه الخطوات تتكرر في كل دورة ما عدا أول خطوة‪ ,‬و السبب أننا ال نحتاج إلى تعريف عداد جديد في كل دورة‪ ,‬بل‬

‫نستعمل العداد القديم و الذي من خالله نعرف في أي دورة أصبحنا‪.‬‬

‫‪ do while‬مثال حول الحلقة‬


‫في المثال التالي قمنا بتعريف حلقة تطبع جميع األرقام من ‪ 1‬إلى ‪.10‬‬
‫مثال‬

‫‪Main.cpp‬‬

‫>‪#include <iostream‬‬

‫;‪using namespace std‬‬

‫)(‪int main‬‬

‫{‬

‫هنا قمنا بتعريف المتغير الذي استخدمناه كعداد في الحلقة ‪//‬‬

‫;‪int i=1‬‬
‫تظل تنفذ األوامر الموضوعة فيها طالما أن قيمة العدد ال تزال أصغر أو تساوي ‪//‬‬
‫هنا أنشأنا حلقة ‪10 while‬‬

‫‪do‬‬

‫{‬

‫في كل دورة سيتم طباعة قيمة العداد ثم إضافة ‪ 1‬عليها ‪//‬‬

‫;‪cout << i << endl‬‬

‫;‪i++‬‬

‫}‬

‫;) ‪while( i<=10‬‬

‫;‪return 0‬‬

‫}‬

‫سنحصل على النتيجة التالية عند التشغيل‪.‬‬

‫‪1‬‬

‫‪2‬‬

‫‪3‬‬

‫‪4‬‬

‫‪5‬‬

‫‪6‬‬

‫‪7‬‬

‫‪8‬‬

‫‪9‬‬

‫‪10‬‬
‫جمل التحكم مع الحلقات‬

‫نستخدم جمل التحكم ( ‪ ) Control Statements‬للتحكم في سير تنفيذ الحلقات و مع جملة الشرط ‪.switch‬‬

‫تعريفها‬ ‫جملة التحكم‬

‫تستخدم في الحلقات و في الجملة ‪.switch‬‬


‫بمجرد ان تنفذ الجملة ‪ break‬فإنها توقف الـ ‪ scope‬بأكمله و تخرج منه و تمسحه من الذاكرة ثم تنتقل‬
‫‪Break Statement‬‬
‫للكود الذي يليه في البرنامج‪.‬‬

‫تستخدم مع الحلقات فقط‪.‬‬


‫نستخدمها لتجاوز تنفيذ كود معين في الحلقة‪ ,‬إذًا نستخدمها لتجاوز جزء من كود الـ ‪.scope‬‬ ‫‪Continue‬‬
‫‪Statement‬‬

‫‪ break‬جملة التحكم‪C++‬‬
‫تعريف الجملة ‪break‬‬ ‫‪‬‬

‫مثال حول جملة التحكم ‪break‬‬ ‫‪‬‬

‫‪ break‬تعريف الجملة‬
‫الجملة ‪ break‬تستخدم في الحلقات و في الجملة ‪.switch‬‬

‫بمجرد ان تنفذ الجملة ‪ break‬فإنها توقف الـ ‪ scope‬بأكمله و تخرج منه و تمسحه من الذاكرة ثم تنتقل للكود الذي يليه في البرنامج‪.‬‬

‫طريقة تعريفها‬

‫تتألف هذه الجملة من أمر واحد و يكتب على سطر منفرد‪.‬‬

‫;‪break‬‬

‫‪ break‬مثال حول جملة التحكم‬


‫في المثال التالي قمنا بتعريف حلقة كانت ستطبع جميع األرقام من ‪ 1‬إلى ‪ 10‬لوال أننا إستخدمنا الجملة ‪ break‬لجعل الحلقة تتوقف عندما‬

‫تصبح قيمة العداد ‪ i‬تساوي ‪.6‬‬


‫مثال‬

‫‪Main.cpp‬‬

‫>‪#include <iostream‬‬

‫;‪using namespace std‬‬

‫)(‪int main‬‬

‫{‬

‫هنا قمنا ‪ for‬تتألف من ‪ 10‬دورات‪ .‬في كل دورة تطبع قيمة العداد المستخدم فيها ‪//‬‬
‫بإنشاء حلقة‬

‫) ‪for( int i=1; i<=10; i++‬‬

‫{‬

‫في كل دورة سيتم فحص قيمة العداد و بمجرد أن تصبح تساوي ‪ 6‬سيتم إيقاف ‪//‬‬
‫الحلقة نهائيًا‬

‫{ ) ‪if( i == 6‬‬

‫;‪break‬‬

‫}‬

‫;‪cout << i << endl‬‬

‫}‬

‫;‪return 0‬‬

‫}‬

‫سنحصل على النتيجة التالية عند التشغيل‪.‬‬

‫‪1‬‬
‫‪2‬‬

‫‪3‬‬

‫‪4‬‬

‫‪5‬‬

‫إذًا الجملة ‪ break‬جعلت الحلقة تتوقف عندما أصبحت قيمة العداد ‪ i‬تساوي ‪.6‬‬

‫هنا قمنا بتجربة الجملة ‪ break‬مع الحلقة ‪ for‬فقط‪ ,‬لكن المبدأ هو نفسه تمامًا مع الحلقات ‪ while‬و ‪.do while‬‬

‫‪ continue‬جملة التحكم‬
‫تعريف الجملة ‪continue‬‬ ‫‪‬‬

‫أمثلة حول جملة التحكم ‪continue‬‬ ‫‪‬‬

‫‪ continue‬تعريف الجملة‬
‫نستخدم الجملة ‪ continue‬لتجاوز تنفيذ كود معين في الحلقة‪ ,‬إذًا نستخدمها لتجاوز جزء من كود الـ ‪.scope‬‬

‫و نستخدمها تحديدًا إليقاف الدورة الحالية و اإلنتقال إلى الدورة التالية في الحلقة‪ ,‬ال تقلق ستفهم المقصود من المثال‪.‬‬

‫طريقة تعريفها‬

‫تتألف هذه الجملة من أمر واحد و يكتب على سطر منفرد‪.‬‬

‫;‪continue‬‬

‫‪ continue‬أمثلة حول جملة التحكم‬


‫في المثال التالي قمنا بتعريف حلقة تطبع جميع األرقام من ‪ 1‬إلى ‪ 10‬ما عدا الرقم ‪.3‬‬

‫إستخدمنا الجملة ‪ continue‬لجعل الحلقة تتجاوز الدورة الثالثة في الحلقة‪ .‬أي لن يتم تنفيذ أمر الطباعة عندما تصبح قيمة العداد ‪ i‬تساوي ‪.3‬‬
‫المثال األول‬

‫‪Main.cpp‬‬

‫>‪#include <iostream‬‬

‫;‪using namespace std‬‬

‫)(‪int main‬‬

‫{‬

‫هنا قمنا ‪ for‬تتألف من ‪ 10‬دورات‪ .‬في كل دورة تطبع قيمة العداد المستخدم فيها ‪//‬‬
‫بإنشاء حلقة‬

‫)‪for (int i=1; i<=10; i++‬‬

‫{‬

‫في كل دورة سيتم فحص قيمة العداد‪ ,‬عندما تصبح تساوي ‪ 3‬سيتم اإلنتقال إلى ‪//‬‬
‫الدورة التالية في الحلقة بدون تنفيذ أمر الطباعة الموضوع بعدها‬

‫{ )‪if (i == 3‬‬

‫;‪continue‬‬

‫}‬

‫;‪cout << i << endl‬‬

‫}‬

‫;‪return 0‬‬

‫}‬

‫سنحصل على النتيجة التالية عند التشغيل‪.‬‬

‫‪1‬‬
‫‪2‬‬

‫‪4‬‬

‫‪5‬‬

‫‪6‬‬

‫‪7‬‬

‫‪8‬‬

‫‪9‬‬

‫‪10‬‬

‫إذًا الجملة ‪ continue‬جعلت الحلقة تتجاوز الدورة الثالثة‪ ,‬لذلك لم تطبع الرقم ‪ 3‬ألنها لم تنفذ أمر الطباعة في الدورة الثالثة‪.‬‬

‫في المثال التالي قمنا بتعريف حلقة تطبع جميع األرقام المفردة من ‪ 1‬إلى ‪.10‬‬

‫إستخدمنا الجملة ‪ continue‬لجعل الحلقة تتجاوز كل دورة تكون فيها قيمة العداد ‪ i‬عبارة عن عدد زوجي‪.‬‬
‫المثال الثاني‬

‫‪Main.cpp‬‬

‫>‪#include <iostream‬‬

‫;‪using namespace std‬‬

‫)(‪int main‬‬

‫{‬

‫هنا قمنا ‪ for‬تتألف من ‪ 10‬دورات‪ .‬في كل دورة تطبع قيمة العداد المستخدم فيها ‪//‬‬
‫بإنشاء حلقة‬

‫)‪for (int i=1; i<=10; i++‬‬

‫{‬

‫في كل دورة سيتم فحص قيمة العداد‪ ,‬في حال كانت مزدوجة سيتم اإلنتقال إلى ‪//‬‬
‫الدورة التالية في الحلقة بدون تنفيذ أمر الطباعة الموضوع بعدها‬
‫{ )‪if (i%2 == 0‬‬

‫;‪continue‬‬

‫}‬

‫;‪cout << i << endl‬‬

‫}‬

‫;‪return 0‬‬

‫}‬

‫سنحصل على النتيجة التالية عند التشغيل‪.‬‬

‫‪1‬‬

‫‪3‬‬

‫‪5‬‬

‫‪7‬‬

‫‪9‬‬

‫إذًا الجملة ‪ continue‬جعلت الحلقة تتجاوز كل دورة كانت فيها قيمة العداد عبارة عن عدد مزدوج‪.‬‬

‫هنا قمنا بتجربة الجملة ‪ continue‬مع الحلقة ‪ for‬فقط‪ ,‬لكن المبدأ هو نفسه تمامًا مع الحلقات ‪ while‬و ‪.do while‬‬

You might also like