Kodax

حلقة for — أساسيات C++

حلقة for

البنية

for (int i = 0; i < 5; i++) {
    cout << i << " ";
}

ثلاثة أجزاء مفصولة بـ ;:

1. البداية: تُنفَّذ مرة واحدة (int i = 0).

2. الشرط: يُفحص قبل كل دورة؛ إذا كان خاطئاً تنتهي الحلقة.

3. التحديث: يُنفَّذ بعد كل دورة (i++).

المتغير i المعرّف داخل for موجود داخل الحلقة فقط.

أنماط شائعة

int n = 3;
for (int i = 10; i > 0; i--) cout << i << ' ';       // تنازلي
for (int i = 0; i <= 100; i += 5) cout << i << ' ';  // بخطوة
for (int i = 0; i < n; i++) cout << i << ' ';        // n مرة بالضبط (0 إلى n-1)

خطأ "الواحد الزائد" (off-by-one)

i <= n بدل i < n يعطي دورة إضافية، ومع المصفوفات يصل لعنصر غير موجود. اسأل نفسك دائماً: هل أبدأ من 0 أم 1؟ وهل النهاية مشمولة؟

for المبنية على المدى (range-based)

للمرور على كل عناصر مجموعة دون فهرس:

int numbers[] = {4, 8, 15};
for (int n : numbers) {
    cout << n;
}

مع النصوص والكائنات الكبيرة استخدم const auto& لتجنب نسخ كل عنصر: for (const string& name : names). ولتعديل العناصر داخل الحلقة: for (int& n : numbers) n *= 2;.

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

الحلقة الداخلية تكتمل في كل دورة من الخارجية: مناسبة للجداول والمصفوفات ثنائية الأبعاد.

break و continue

break تخرج من الحلقة، و continue تنتقل للدورة التالية، تماماً كما في Python.

تمرين

اطبع الأعداد الأولية من 2 إلى 50 باستخدام حلقتين متداخلتين و break، ثم اطبع مثلث أرقام:

1 ثم 1 2 ثم 1 2 3 حتى 5.

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int main() {
    // for بسيطة
    for (int i = 0; i < 5; i++) {
        cout << i << " ";
    }
    cout << endl;  // 0 1 2 3 4
    
    // العد التنازلي
    for (int i = 5; i > 0; i--) {
        cout << i << " ";
    }
    cout << endl;  // 5 4 3 2 1
    
    // خطوة مختلفة
    for (int i = 0; i <= 10; i += 2) {
        cout << i << " ";
    }
    cout << endl;  // 0 2 4 6 8 10
    
    // جدول الضرب
    int num = 5;
    for (int i = 1; i <= 10; i++) {
        cout << num << " × " << i << " = " << num * i << endl;
    }
    
    // حلقات متداخلة
    for (int i = 1; i <= 3; i++) {
        for (int j = 1; j <= 3; j++) {
            cout << "(" << i << "," << j << ") ";
        }
        cout << endl;
    }
    
    // Range-based for
    int numbers[] = {1, 2, 3, 4, 5};
    for (int n : numbers) {
        cout << n << " ";
    }
    cout << endl;
    
    // مع vector
    vector<string> names = {"أحمد", "محمد", "علي"};
    for (const string& name : names) {
        cout << name << endl;
    }
    
    // break
    for (int i = 0; i < 10; i++) {
        if (i == 5) break;
        cout << i << " ";
    }
    cout << endl;  // 0 1 2 3 4
    
    // continue
    for (int i = 0; i < 10; i++) {
        if (i % 2 == 0) continue;  // تخطي الزوجية
        cout << i << " ";
    }
    cout << endl;  // 1 3 5 7 9
    
    return 0;
}
اختبر فهمك