فصل ۷: آرایه‌ها (Arrays) در C++

""

مقدمه: آرایه چیست و چرا به آن نیاز داریم؟

تا اینجای دوره دیدیم که متغیرها در C++ فقط می‌توانند یک مقدار را ذخیره کنند.
فرض کن بخواهیم نمرات ۱۰۰ دانش‌آموز را ذخیره کنیم. اگر بخواهیم به صورت دستی ۱۰۰ متغیر جداگانه تعریف کنیم، هم وقت تلف می‌شود و هم مدیریتشان خیلی سخت خواهد بود.

اینجاست که آرایه‌ها به کمک ما می‌آیند.
آرایه یک مجموعهٔ پیوسته از خانه‌های حافظه است که همگی یک نوع داده دارند و با استفاده از اندیس (index) می‌توانیم به آن‌ها دسترسی پیدا کنیم.

مثال تصویری (در ذهن)

آرایه را شبیه یک قطار در نظر بگیر:

  • هر واگن قطار یک خانه از آرایه است.
  • همه واگن‌ها شکل و اندازه یکسان دارند.
  • شمارهٔ هر واگن برابر اندیس آن خانه است.
  • شماره‌گذاری از صفر شروع می‌شود.

ساختار کلی تعریف آرایه

برای تعریف یک آرایه در C++ از دستور زیر استفاده می‌کنیم:

نوع_داده نام_آرایه[تعداد_عناصر];
  • نوع_داده: نوع مقادیری که قرار است آرایه نگه‌داری کند (مثل int, double, char).
  • نام_آرایه: اسم دلخواه که قوانین نام‌گذاری متغیرها را رعایت کند.
  • تعداد_عناصر: طول آرایه که در زمان تعریف مشخص و ثابت است (برای آرایه‌های معمولی).

مثال:

int numbers[5];

یعنی:

  • آرایه‌ای به نام numbers
  • با ۵ عنصر (numbers[0] تا numbers[4])
  • نوع دادهٔ هر عنصر: عدد صحیح (int)

طول آرایه و اندیس‌ها

  • اندیس‌ها از ۰ شروع و تا طول آرایه – ۱ ادامه دارند.
  • مثال: اگر طول آرایه ۵ باشد، اندیس‌ها 0, 1, 2, 3, 4 هستند.

مقداردهی اولیه به آرایه‌ها

مقداردهی کامل هنگام تعریف

int nums[5] = {1, 2, 3, 4, 5};

مقداردهی خودکار با حذف طول

int nums[] = {10, 20, 30};

طول آرایه اینجا برابر تعداد مقادیر داخل {} است.

مقداردهی ناقص

int nums[5] = {10, 20};

دو خانه اول پر می‌شوند، بقیه خودکار با صفر مقداردهی می‌شوند.


دسترسی به عناصر و تغییر مقادیر

با استفاده از اندیس:

int nums[3] = {5, 10, 15};
cout << nums[0]; // نمایش 5

nums[1] = 20; // تغییر خانه دوم به 20

استفاده از حلقه‌ها برای کار با آرایه

مثال چاپ همه عناصر:

#include <iostream>
using namespace std;

int main() {
    int nums[5] = {2, 4, 6, 8, 10};

    for (int i = 0; i < 5; i++) {
        cout << "nums[" << i << "] = " << nums[i] << endl;
    }

    return 0;
}

گرفتن ورودی از کاربر

#include <iostream>
using namespace std;

int main() {
    int nums[5];

    for (int i = 0; i < 5; i++) {
        cout << "عدد " << i+1 << " را وارد کنید: ";
        cin >> nums[i];
    }

    cout << "مقادیر وارد شده:" << endl;
    for (int i = 0; i < 5; i++) {
        cout << nums[i] << " ";
    }

    return 0;
}

محدودیت‌های آرایه‌های ساده

  1. طول ثابت.
  2. نوع دادهٔ یکسان.
  3. عدم بررسی محدوده توسط کامپایلر.

آرایه‌ها و حافظه

آرایه‌ها در حافظه به صورت پیوسته قرار می‌گیرند. این باعث می‌شود به خانه‌ها با سرعت بالا دسترسی پیدا کنیم.


آرایه‌ها و توابع

وقتی آرایه‌ای را به تابع می‌دهید، فقط آدرس اولین خانه (pointer) ارسال می‌شود.

مثال:

#include <iostream>
using namespace std;

void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++)
        cout << arr[i] << " ";
    cout << endl;
}

int main() {
    int nums[5] = {1, 2, 3, 4, 5};
    printArray(nums, 5);
}

آرایه‌های چندبعدی

تعریف و استفاده

int matrix[2][3] = {
    {1, 2, 3},
    {4, 5, 6}
};

دسترسی:

cout << matrix[1][2]; // نمایش 6

آرایه‌های کاراکتری (C-Style Strings)

یک رشتهٔ کاراکتری در C++ می‌تواند با آرایه char ساخته شود و با \0 (null terminator) پایان می‌یابد.

مثال:

char name[6] = "Ali";

حافظه:

'A' 'l' 'i' '\0'

مشکلات خروج از محدوده

اگر اندیسی خارج از محدوده استفاده کنید:

nums[10] = 50; // خطرناک!

ممکن است برنامه کرش کند یا داده‌ها خراب شوند.


نکات بهینه‌سازی

  • استفاده از const برای اندازه آرایه.
  • استفاده از std::array یا std::vector برای انعطاف بیشتر (در فصول بعد توضیح داده می‌شود).

مثال کاربردی: مرتب‌سازی آرایه

#include <iostream>
using namespace std;

int main() {
    const int SIZE = 5;
    int nums[SIZE] = {5, 3, 4, 1, 2};

    for (int i = 0; i < SIZE - 1; i++) {
        for (int j = i + 1; j < SIZE; j++) {
            if (nums[i] > nums[j]) {
                int temp = nums[i];
                nums[i] = nums[j];
                nums[j] = temp;
            }
        }
    }

    for (int i = 0; i < SIZE; i++)
        cout << nums[i] << " ";
}

تمرین‌ها

۱. برنامه‌ای که ۱۰ عدد بگیرد و بزرگ‌ترین عدد را پیدا کند.
۲. برنامه‌ای که مجموع و میانگین عناصر آرایه را محاسبه کند.
۳. برنامه‌ای که یک ماتریس ۳×۳ بگیرد و مجموع هر سطر و هر ستون را چاپ کند.
۴. برنامه‌ای که آرایه را برعکس چاپ کند.


جمع‌بندی

  • آرایه مجموعه‌ای از عناصر هم‌نوع است.
  • اندیس از صفر شروع می‌شود.
  • طول برای آرایه‌های استاتیک ثابت است.
  • هنگام خروج از محدوده هیچ خطایی داده نمی‌شود، اما خطرناک است.
  • آرایه‌ها ابزار پایه برای ذخیره داده‌های پشت‌سرهم هستند.
محمد وب‌سایت

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *