Kodax

المصفوفات Arrays — أساسيات C++

المصفوفات (Arrays)

المصفوفة تخزن عدداً ثابتاً من العناصر من نفس النوع متجاورة في الذاكرة.

int scores[5] = {90, 75, 88, 62, 95};
int zeros[100] = {};          // كل العناصر 0
int auto_size[] = {1, 2, 3};  // الحجم 3 تلقائياً

الفهرسة

الفهرس من 0 إلى الحجم - 1:

scores[0] = 100;
cout << scores[4];

⚠️ لا يوجد فحص للحدود

cout << scores[5];    // خارج المصفوفة: سلوك غير معرّف!

Python ترمي IndexError. أما C++ فتقرأ (أو تكتب!) ما يوجد في الذاكرة بعد المصفوفة: قد يعطي قيمة عشوائية، أو يفسد متغيرات أخرى، أو يوقف البرنامج. هذا من أخطر أخطاء C++، ومصدر ثغرات أمنية حقيقية (buffer overflow).

الحجم ثابت

يجب أن يُعرف الحجم وقت الترجمة، ولا يمكن تكبير المصفوفة بعد إنشائها. لهذا ستستخدم في أغلب البرامج std::vector (الدرس التالي).

المرور على العناصر

for (int i = 0; i < 5; i++) cout << scores[i];
for (int s : scores) cout << s;

احفظ الحجم في ثابت واحد (const int SIZE = 5;) واستخدمه في كل مكان بدل تكرار الرقم.

المصفوفة ثنائية الأبعاد

int grid[2][3] = {{1, 2, 3}, {4, 5, 6}};
cout << grid[1][2];   // 6

تمرير المصفوفة لدالة

المصفوفة لا تعرف حجمها عند تمريرها؛ مرّر الحجم معها: double average(const int arr[], int size).

std::array: البديل الحديث للحجم الثابت

#include <array>
array<int, 3> a = {1, 2, 3};
a.size();      // 3 (تعرف حجمها)
a.at(5);       // ترمي استثناء بدل السلوك غير المعرّف

تمرين

خزّن درجات 7 أيام في مصفوفة، واطبع أعلى درجة ويومها، وعدد الأيام فوق المتوسط.

#include <iostream>
using namespace std;

int main() {
    // تصريح وتهيئة
    int numbers[5] = {10, 20, 30, 40, 50};
    
    // الوصول للعناصر
    cout << "الأول: " << numbers[0] << endl;   // 10
    cout << "الثالث: " << numbers[2] << endl;  // 30
    
    // تعديل عنصر
    numbers[0] = 100;
    cout << "الأول الجديد: " << numbers[0] << endl;
    
    // المرور على المصفوفة
    cout << "كل العناصر: ";
    for (int i = 0; i < 5; i++) {
        cout << numbers[i] << " ";
    }
    cout << endl;
    
    // Range-based for
    for (int n : numbers) {
        cout << n << " ";
    }
    cout << endl;
    
    // حساب المجموع والمتوسط
    int sum = 0;
    for (int n : numbers) {
        sum += n;
    }
    double average = (double)sum / 5;
    cout << "المجموع: " << sum << endl;
    cout << "المتوسط: " << average << endl;
    
    // إيجاد أكبر عنصر
    int maxVal = numbers[0];
    for (int n : numbers) {
        if (n > maxVal) {
            maxVal = n;
        }
    }
    cout << "الأكبر: " << maxVal << endl;
    
    // مصفوفة ثنائية الأبعاد
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    
    cout << "\nالمصفوفة:" << endl;
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl;
    }
    
    // sizeof للمصفوفات
    int arr[] = {1, 2, 3, 4, 5};
    int size = sizeof(arr) / sizeof(arr[0]);
    cout << "\nحجم المصفوفة: " << size << endl;
    
    return 0;
}
اختبر فهمك