حلقة 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;
}اختبر فهمك