C++: هياكل الحلقات

آخر تحديث: 2026-08-26

لنفترض أنك تحتاج لطباعة "Hello" 100 مرة على الشاشة. كيف ستفعل ذلك؟appelé

نسخ ولصق 100 سطر من std::cout << "Hello" << std::endl;؟ هذا سخيف.

نهج المبرمج — الحلقات. دع الكمبيوتر يكرر كتلة كود حتى يتحقق شرط.


1. حلقة for

(1) 1.1 الصياغة الأساسية

TEXT 📖 للعرض فقط
for (initialization; condition; update) {
 // Loop body: repeats while condition is true
}

سير التنفيذ:

  1. التهيئة: تُنفَّذ مرة واحدة فقط (تُستخدم عادةً لتعريف متغير الحلقة)
  2. فحص الشرط: إذا كان صحيحًا، نفّذ جسم الحلقة؛ إذا كان خاطئًا، اخرج من الحلقة
  3. تنفيذ جسم الحلقة
  4. التحديث: بعد تنفيذ جسم الحلقة، حدّث متغير الحلقة
  5. عد إلى الخطوة 2

▶ مثال 1: إخراج 1-10 (صعوبة ⭐)

CPP
#include <iostream>

int main() {
 for (int i = 1; i <= 10; i++) {
 std::cout << i << " ";
 }
 std::cout << std::endl;
 
 return 0;
}
▶ جرّب الكود

الخرج:

TEXT 📖 للعرض فقط
1
2
3
4
5
6
7
8
9

تحليل الكود:

  1. int i = 1: التهيئة، i يبدأ من 1
  2. i <= 10: الشرط، الحلقة تستمر طالما i <= 10
  3. std::cout << i << " ": جسم الحلقة، إخراج i
  4. i++: التحديث، زيادة i بمقدار 1


2. حلقة while

(1) 2.1 الصياغة الأساسية

TEXT 📖 للعرض فقط
while (condition) {
 // Loop body: repeats while condition is true
}

سير التنفيذ:

  1. افحص الشرط
  2. إذا كان صحيحًا، نفّذ جسم الحلقة
  3. عد إلى الخطوة 1

💡 نقطة مهمة: حلقة while تُحدِّث متغير الحلقة داخل جسم الحلقة!

▶ مثال 2: إخراج 1-10 باستخدام while (صعوبة ⭐)

CPP
#include <iostream>

int main() {
 int i = 1; // Initialization
 
 while (i <= 10) { // Condition
 std::cout << i << " ";
 i++; // Update (inside the loop body!)
 }
 std::cout << std::endl;
 
 return 0;
}
▶ جرّب الكود

الخرج:

TEXT 📖 للعرض فقط
1 2 3 4 5 6 7 8 9 10 


3. حلقة do-while

(1) 3.1 الصياغة الأساسية

TEXT 📖 للعرض فقط
do {
 // Loop body
} while (condition);

سير التنفيذ:

  1. نفّذ جسم الحلقة (مرة واحدة على الأقل)
  2. افحص الشرط
  3. إذا كان صحيحًا، عد إلى الخطوة 1

💡 نقطة مهمة: حلقة do-while تُنفَّذ مرة واحدة على الأقل!

▶ مثال 3: لعبة تخمين الأرقام (صعوبة ⭐⭐)

CPP
#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
 std::srand(static_cast<unsigned int>(std::time(nullptr)));
 int secretNumber = std::rand() % 100 + 1;
 int guess;
 
 do {
 std::cout << "Guess a number from 1-100: ";
 std::cin >> guess;
 
 if (guess > secretNumber) {
 std::cout << "Too high!" << std::endl;
 } else if (guess < secretNumber) {
 std::cout << "Too low!" << std::endl;
 }
 
 } while (guess != secretNumber);
 
 std::cout << "🎉 Got it!The answer is " << secretNumber << std::endl;
 
 return 0;
}
▶ جرّب الكود

الخرج:

TEXT 📖 للعرض فقط
Guess a number from 1-100: 
Too high!
Too low!
🎉 Got it!The answer is 42

💡 لماذا نستخدم do-while؟ لأن المستخدم يجب أن يخمّن مرة واحدة على الأقل، لذا جسم الحلقة يجب أن يُنفَّذ مرة واحدة على الأقل.



4. for مقابل while مقابل do-while

نوع الحلقة أفضل حالة استخدام الخاصية
for عدد تكرارات معروف التهيئة والشرط والتحديث مجمعون معًا — بنية واضحة
while تكرارات غير معروفة لكن شرط معروف متغير الحلقة يُحدَّث داخل جسم الحلقة
do-while يجب التنفيذ مرة واحدة على الأقل جسم الحلقة يُنفَّذ مرة واحدة على الأقل

نصيحة الاختيار:



5. break وcontinue

(1) 5.1 break: الخروج من الحلقة بالكامل

break يُستخدم لإنهاء الحلقة مبكرًا.

مثال: إيجاد أول عدد قابل للقسمة على 7 (صعوبة ⭐)

TEXT 📖 للعرض فقط
#include <iostream>

int main() {
 for (int i = 1; i <= 100; i++) {
 if (i % 7 == 0) {
 std::cout << "The first number divisible by 7 is: " << i << std::endl;
 break; // Exit the loop after finding it
 }
 }
 
 return 0;
}

(2) 5.2 continue: تخطي التكرار الحالي

continue يُستخدم لتخطي التكرار الحالي والانتقال مباشرة إلى التالي.

مثال: إخراج الأعداد الفردية من 1-10 (صعوبة ⭐)

CPP
#include <iostream>

int main() {
 for (int i = 1; i <= 10; i++) {
 if (i % 2 == 0) {
 continue; // If even, skip this iteration
 }
 std::cout << i << " ";
 }
 std::cout << std::endl;
 
 return 0;
}


6. الحلقات المتداخلة

يمكن للحلقة أن تحتوي على حلقة أخرى بداخلها — هذا يسمى حلقة متداخلة.

▶ مثال 4: طباعة جدول الضرب (صعوبة ⭐⭐)

TEXT 📖 للعرض فقط
#include <iostream>

int main() {
 for (int i = 1; i <= 9; i++) { // Outer loop: controls rows
 for (int j = 1; j <= i; j++) { // Inner loop: controls columns
 std::cout << j << " x " << i << " = " << i * j << "\t";
 }
 std::cout << std::endl; // Newline
 }
 
 return 0;
}

الخرج:

TEXT 📖 للعرض فقط
1 x 1 = 1	
1 x 2 = 2	2 x 2 = 4	
...

💡 سير التنفيذ:



7. الحلقات اللانهائية

إذا كان شرط الحلقة صحيحًا دائمًا، تتشكل حلقة لانهائية.

▶ مثال 5: حلقة لانهائية (صعوبة ⭐)

CPP
#include <iostream>

int main() {
 while (true) { // Condition is always true
 std::cout << "Infinite loop..." << std::endl;
 }
 
 return 0; // This line is never reached
}
▶ جرّب الكود

الخرج:

TEXT 📖 للعرض فقط
Infinite loop...

💡 كيف تتوقف؟ اضغط Ctrl + C لإنهاء البرنامج قسريًا.

💡 هل الحلقات اللانهائية مفيدة؟ نعم! مثلًا، برامج الخوادم تحتاج للاستمرار في التشغيل وانتظار طلبات المستخدمين.



8. تطبيق: حساب المضروب

▶ مثال 6: حساب n! (صعوبة ⭐⭐)

CPP
#include <iostream>

int main() {
 int n;
 std::cout << "Please enter a positive integer: ";
 std::cin >> n;
 
 long long factorial = 1; // Use long long to prevent overflow
 for (int i = 1; i <= n; i++) {
 factorial *= i;
 }
 
 std::cout << n << " ! is: " << factorial << std::endl;
 
 return 0;
}
▶ جرّب الكود

الخرج:

TEXT 📖 للعرض فقط
Please enter a positive integer: 5
5 ! is: 120

نتيجة التشغيل:

TEXT 📖 للعرض فقط
Please enter a positive integer: 5
5 ! is: 120

💡 نصيحة: 20! تتجاوز مدى long long، لذا حتى مع long long يمكنك حساب حتى 20 فقط.


❓ أسئلة شائعة

س هل يمكن حذف الفواصل المنقوطة في حلقة for؟
ج يمكنك حذف أجزاء لكن لا يمكنك حذف الفواصل المنقوطة. for (; i <= 10; i++) تحذف التهيئة، for (;;) هي حلقة لانهائية (تكافئ while(true)).
س هل يمكن تحويل while وfor إلى بعضهما؟
ج نعم. أي حلقة for يمكن إعادة كتابتها كـ while، والعكس بالعكس. قاعدة الاختيار: استخدم for عندما تعرف العدد، واستخدم while عندما تعرف الشرط.
س كيف يعمل break وcontinue في الحلقات المتداخلة؟
ج break يخرج فقط من مستوى الحلقة الحالي. للخروج من مستويات متعددة، استخدم "متغير عَلَم" أو goto (غير موصى به كبديل).

📖 ملخص


📝 تمارين

  1. أساسي (صعوبة ⭐): استخدم حلقة for لإخراج جميع الأعداد من 1-100 القابلة للقسمة على 3.

  2. متوسط (صعوبة ⭐⭐): استخدم حلقات متداخلة لطباعة النمط التالي:

TEXT 📖 للعرض فقط
*
**
***
****
*****
  1. تحدي (صعوبة ⭐⭐⭐): اكتب برنامجًا يتيح للمستخدم إدخال عدد صحيح موجب n، ثم إخراج n صفوف من مثلث باسكال.
TEXT 📖 للعرض فقط
Please enter number of rows: 5
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

9. 🚀 الخطوة التالية

الآن بعد أن تعلمت الحلقات، سنتعلم بعد ذلك الدوال (الدرس 08) — تغليف الكود في وحدات قابلة لإعادة الاستخدام لجعل البرامج أنظف وأسهل في الصيانة!

Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%