سی پلاس پلاس, طراحی سایت و برنامه نویسی, مقالات

صفر تا صد آموزش آرایه‌ها در سی‌پلاس‌پلاس (++C)

آموزش جامع آرایه‌ها در سی‌پلاس‌پلاس (++C) — آموزشگاه راهکار تبریز

اگر به دنبال یادگیری سی‌پلاس‌پلاس در تبریز هستید یا می‌خواهید آرایه‌ها در ++C را از پایه تا پیشرفته بیاموزید، این آموزش جامع برای شماست! آموزشگاه کامپیوتر راهکار تبریز، به عنوان برترین مرکز آموزش برنامه‌نویسی در تبریز، این محتوا را برای تسلط کامل شما بر مفهوم آرایه‌ها در سی‌پلاس‌پلاس تهیه کرده است.

چرا یادگیری آرایه‌ها در ++C مهم است؟

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

سرفصل‌های آموزش آرایه‌ها در سی‌پلاس‌پلاس

✅ تعریف و نحوه ایجاد آرایه در ++C
✅ دسترسی به عناصر آرایه و حلقه‌های تکرار
✅ آرایه‌های چندبعدی و کاربرد آن‌ها
✅ مرتب‌سازی و جست‌وجو در آرایه‌ها
✅ مثال‌های کاربردی و پروژه‌محور

چرا آموزشگاه راهکار تبریز بهترین انتخاب است؟

  • تدریس توسط اساتید مجرب برنامه‌نویسی
  • آموزش پروژه‌محور و عملی سی‌پلاس‌پلاس
  • پشتیبانی دائمی و رفع اشکال تخصصی
  • برگزاری دوره‌های حضوری و آنلاین در تبریز

اگر به دنبال بهترین آموزشگاه برنامه‌نویسی در تبریز هستید، آموزشگاه راهکار با سابقه درخشان در آموزش سی‌پلاس‌پلاس، پایتون، جاوا و سایر زبان‌ها، گزینه ایده‌آلی برای شماست.

📞 برای ثبت‌نام در دوره‌های برنامه‌نویسی در تبریز با ما تماس بگیرید! 04135574231

 

اگر میخواهید چند نمونه سوال در مورد آرایه ها و ماتریس حل کرده و مهارت خود را در این زمینه ارتقا دهید اسن پست را مطالعه کنید

 

تعریف و ایجاد آرایه در ++C

آرایه‌ها (Arrays) از مهم‌ترین مفاهیم در برنامه‌نویسی ++C هستند که به شما امکان ذخیره‌سازی چند مقدار از یک نوع داده را در یک متغیر واحد می‌دهند. در این آموزش، به زبان ساده و با مثال‌های کاربردی، تعریف و نحوه ایجاد آرایه در ++C را یاد می‌گیرید.

1. آرایه (Array) در ++C چیست؟

آرایه یک ساختار داده‌ای است که مقادیر هم‌نوع (مثلاً چند عدد صحیح، چند کاراکتر یا چند عدد اعشاری) را در یک متغیر ذخیره می‌کند.

  • هر آرایه دارای اندازه ثابت است (یعنی بعد از تعریف، نمی‌توان اندازه آن را تغییر داد).
  • عناصر آرایه با ایندکس (Index) شماره‌گذاری می‌شوند (شماره‌گذاری از 0 شروع می‌شود).

مثال مفهومی:

فرض کنید یک جعبه (آرایه) داریم که ۵ خانه (عنصر) دارد:

[0] : مقدار اول  
[1] : مقدار دوم  
[2] : مقدار سوم  
[3] : مقدار چهارم  
[4] : مقدار پنجم

(ایندکس‌ها از 0 شروع می‌شوند!)


2. نحوه تعریف آرایه در ++C

سینتکس کلی: 

datatype  arrayname  [arraysize]

int grades[10]
  • نوع_داده: نوع عناصر آرایه (مثل intfloatchar و …)
  • نام_آرایه: اسمی که برای آرایه انتخاب می‌کنید (مثل numbersscores).
  • اندازه_آرایه: تعداد عناصری که آرایه می‌تواند ذخیره کند (مثلاً 5).

مثال 1: تعریف آرایه اعداد صحیح 

int numbers[5]; // آرایه ای با 5 عنصر از نوع int

مثال 2: تعریف آرایه اعشاری 

float prices[3]; // آرایه ای با 3 عنصر از نوع float

مثال 3: تعریف آرایه کاراکتری 

char letters[10]; // آرایه ای با 10 عنصر از نوع char

3. مقداردهی اولیه به آرایه

می‌توانید در همان لحظه تعریف، مقادیر آرایه را مشخص کنید:

روش 1: مقداردهی دستی 

int numbers[5] = {10, 20, 30, 40, 50}; // آرایه با 5 مقدار

اگر تعداد مقادیر کمتر از اندازه آرایه باشد، بقیه عناصر خودکار صفر می‌شوند:

int nums[5] = {1, 2}; // → [1, 2, 0, 0, 0]

روش 2: تعریف آرایه بدون ذکر اندازه (توسط کامپایلر) 

int numbers[] = {1, 2, 3, 4}; // اندازه آرایه خودکار 4 در نظر گرفته می‌شود

4. دسترسی به عناصر آرایه (خواندن و تغییر مقدار)

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

int numbers[3] = {10, 20, 30};

cout << numbers[0]; // چاپ اولین عنصر → خروجی: 10
numbers[1] = 50; // تغییر مقدار دومین عنصر به 50
cout << numbers[1]; // چاپ عنصر دوم → خروجی: 50

⚠ نکته مهم:

  • اگر به ایندکس نامعتبر دسترسی پیدا کنید (مثلاً numbers[5] برای آرایه با اندازه ۳)، برنامه خطای منطقی می‌دهد (خطای Segmentation Fault).

5. مثال کامل: تعریف، مقداردهی و چاپ آرایه 

#include <iostream>
using namespace std;

int main() {
    int scores[5] = {85, 90, 78, 92, 88};

    // چاپ تمام عناصر آرایه
    for (int i = 0; i < 5; i++) {
        cout << "Score " << i << ": " << scores[i] << endl;
    }

    return 0;
}

خروجی: 

Score 0: 85
Score 1: 90
Score 2: 78
Score 3: 92
Score 4: 88

6. کاربردهای آرایه در ++C

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

 چرا یادگیری دسترسی به آرایه و حلقه‌ها مهم است؟

آرایه‌ها و حلقه‌ها دو مفهوم اساسی در برنامه‌نویسی ++C هستند که به شما امکان می‌دهند:

  • داده‌های مشابه را به صورت گروهی مدیریت کنید
  • عملیات تکراری را بهینه‌تر انجام دهید
  • کدنویسی تمیزتر و کوتاه‌تر داشته باشید

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

1. دسترسی به عناصر آرایه

هر عنصر در آرایه با یک اندیس (Index) مشخص می‌شود که از 0 شروع می‌شود.

1.1. سینتکس پایه 

arrayname[index]

1.2. مثال‌های عملی 

#include <iostream>
using namespace std;

int main() {
    int numbers[5] = {10, 20, 30, 40, 50};
    
    // دسترسی به عناصر
    cout << numbers[0]; // اولین عنصر → 10
    cout << numbers[2]; // سومین عنصر → 30
    cout << numbers[4]; // آخرین عنصر → 50
    
    // تغییر مقدار عناصر
    numbers[1] = 25; // تغییر عنصر دوم
    numbers[3] = 45; // تغییر عنصر چهارم
    
    return 0;
}

1.3. نکات مهم

  • اندیس‌ها همیشه از 0 شروع می‌شوند
  • اندیس آخرین عنصر همیشه اندازه آرایه منهای یک است
  • دسترسی به اندیس نامعتبر (مثلاً numbers[5] برای آرایه 5 عنصری) باعث خطای اجرایی می‌شود

2. حلقه‌های تکرار برای پیمایش آرایه

حلقه‌ها بهترین ابزار برای کار با تمام عناصر آرایه هستند.

2.1. حلقه for – پرکاربردترین روش 

for (int i = 0; i < اندازه_آرایه; i++) {
    // دسترسی به عنصر با numbers[i]
}

مثال عملی: 

#include <iostream>
using namespace std;

int main() {
    int scores[5] = {85, 90, 78, 92, 88};
    
    // چاپ تمام نمرات
    for (int i = 0; i < 5; i++) {
        cout << "نمره دانشجو " << i+1 << ": " << scores[i] << endl;
    }
    
    // محاسبه مجموع نمرات
    int sum = 0;
    for (int i = 0; i < 5; i++) {
        sum += scores[i];
    }
    cout << "مجموع نمرات: " << sum;
    
    return 0;
}

2.2. حلقه while 

int i = 0;
while (i < اندازه_آرایه) {
    // دسترسی به عنصر
    i++;
}

مثال عملی: 

#include <iostream>
using namespace std;

int main() {
    float prices[4] = {12.5, 8.3, 15.2, 9.9};
    int i = 0;
    
    // پیدا کردن اولین قیمت بالای 10
    while (i < 4) {
        if (prices[i] > 10.0) {
            cout << "قیمت بالای 10 در موقعیت: " << i;
            break;
        }
        i++;
    }
    
    return 0;
}

2.3. حلقه do-while 

int i = 0;
do {
    // دسترسی به عنصر
    i++;
} while (i < اندازه_آرایه);


3. تکنیک‌های پیشرفته‌تر

3.1. استفاده از sizeof برای یافتن اندازه آرایه 

int numbers[] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]); // محاسبه تعداد عناصر

3.2. حلقه for با auto (در ++11 به بعد) 

for (auto element : numbers) {
    cout << element << " ";
}

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

int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 3; j++) {
        cout << matrix[i][j] << " ";
    }
    cout << endl;
}

4. مثال جامع: مدیریت نمرات دانشجویان 

#include <iostream>
using namespace std;

int main() {
    const int NUM_STUDENTS = 5;
    float grades[NUM_STUDENTS];
    
    // دریافت نمرات
    cout << "لطفا نمرات 5 دانشجو را وارد کنید:\n";
    for (int i = 0; i < NUM_STUDENTS; i++) {
        cout << "دانشجو " << i+1 << ": ";
        cin >> grades[i];
    }
    
    // محاسبه میانگین
    float sum = 0;
    for (int i = 0; i < NUM_STUDENTS; i++) {
        sum += grades[i];
    }
    float average = sum / NUM_STUDENTS;
    
    // نمایش نتایج
    cout << "\nنمرات دانشجویان:\n";
    for (int i = 0; i < NUM_STUDENTS; i++) {
        cout << "دانشجو " << i+1 << ": " << grades[i];
        if (grades[i] > average) cout << " (بالاتر از میانگین)";
        cout << endl;
    }
    
    cout << "\nمیانگین کل: " << average;
    
    return 0;
}

5. تمرین‌های کاربردی

  1. برنامه‌ای بنویسید که بزرگترین عدد در یک آرایه را پیدا کند
  2. برنامه‌ای بنویسید که عناصر یک آرایه را معکوس کند
  3. برنامه‌ای بنویسید که تعداد اعداد زوج در یک آرایه را بشمارد

 


آرایه‌های چندبعدی چه هستند؟

 

آرایه‌های چندبعدی در ++C روشی برای ذخیره داده‌های ساختاریافته مانند:

  • جداول اطلاعاتی
  • ماتریس‌های ریاضی
  • تصاویر دیجیتال
  • داده‌های سه‌بعدی در بازی‌ها

را فراهم می‌کنند. در این آموزش به صورت کامل و کاربردی با این مفهوم آشنا می‌شوید.


1. تعریف آرایه چندبعدی

آرایه چندبعدی در واقع آرایه‌ای از آرایه‌ها است. پرکاربردترین نوع آن آرایه دوبعدی است که مانند یک جدول عمل می‌کند.

1.1. سینتکس پایه 

datatype  arrayname  [rowsCount] [columnsCount]

1.2. مثال‌های تعریف 

int matrix[3][3]; // ماتریس 3x3
float temperatures[7][24]; // دمای هر ساعت در 7 روز هفته
char gameBoard[8][8]; // صفحه شطرنج 8x8

2. مقداردهی به آرایه‌های چندبعدی

2.1. مقداردهی مستقیم 

int matrix[2][3] = {
    {1, 2, 3}, // سطر اول
    {4, 5, 6}  // سطر دوم
};

2.2. مقداردهی سطری 

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

2.3. مقداردهی جزئی 

int matrix[3][3] = {
    {1},       // سطر اول: 1, 0, 0
    {2, 3},    // سطر دوم: 2, 3, 0
    {4, 5, 6}  // سطر سوم کامل
};

3. دسترسی به عناصر آرایه چندبعدی

برای دسترسی به هر عنصر باید هر دو اندیس را مشخص کنید:

int value = matrix[1][2]; // دسترسی به عنصر سطر 2، ستون 3
matrix[0][1] = 10; // تغییر مقدار سطر 1، ستون 2

4. پیمایش آرایه‌های چندبعدی با حلقه

4.1. استفاده از حلقه‌های تودرتو 

for (int i = 0; i < سطرها; i++) {
    for (int j = 0; j < ستون‌ها; j++) {
        // دسترسی به matrix[i][j]
    }
}

4.2. مثال عملی: نمایش ماتریس 

#include <iostream>
using namespace std;

int main() {
    int matrix[2][3] = {{1, 2, 3}, {4, 5, 6}};
    
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            cout << matrix[i][j] << " ";
        }
        cout << endl; // رفتن به خط بعد بعد از هر سطر
    }
    
    return 0;
}

خروجی: 

1 2 3 
4 5 6

5. کاربردهای عملی آرایه‌های چندبعدی

5.1. پردازش تصاویر 

// ذخیره پیکسل‌های یک تصویر 800x600
int image[800][600];

5.2. بازی‌های کامپیوتری 

// نقشه یک بازی 2 بعدی
char gameMap[50][50];

5.3. محاسبات ماتریسی 

// ضرب دو ماتریس 3x3
int a[3][3], b[3][3], result[3][3];

5.4. ذخیره اطلاعات دانشجویان 

// نمرات 5 درس برای 30 دانشجو
float grades[30][5];

6. آرایه‌های با ابعاد بیشتر

6.1. آرایه سه‌بعدی 

int cube[3][3][3]; // مکعب روبیک 3x3x3

6.2. مثال آرایه سه‌بعدی 

#include <iostream>
using namespace std;

int main() {
    int space[2][3][4] = {
        { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} },
        { {13,14,15,16}, {17,18,19,20}, {21,22,23,24} }
    };
    
    // نمایش تمام عناصر
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            for (int k = 0; k < 4; k++) {
                cout << space[i][j][k] << " ";
            }
            cout << endl;
        }
        cout << endl;
    }
    
    return 0;
}


7. نکات حرفه‌ای

  1. بهینه‌سازی حافظه: آرایه‌های چندبعدی در حافظه به صورت پشت سر هم ذخیره می‌شوند
  2. محاسبه اندیس: می‌توان از فرمول آدرس = پایه + (ستون + سطر * عرض) استفاده کرد
  3. محدودیت‌ها: اندازه آرایه‌ها باید در زمان کامپایل مشخص باشد (در ++C استاندارد)

8. تمرین‌های کاربردی

  1. برنامه‌ای بنویسید که دو ماتریس 3×3 را با هم جمع کند
  2. برنامه‌ای بنویسید که بزرگترین عدد در یک ماتریس 4×4 را پیدا کند
  3. برنامه‌ای بنویسید که یک جدول ضرب 10×10 در ماتریس دو بعدی ایجاد و چاپ کند

 


آموزش جامع مرتب‌سازی و جست‌وجو در آرایه‌های ++C

چرا مرتب‌سازی و جست‌وجو مهم است؟

در برنامه‌نویسی واقعی، ما اغلب نیاز داریم:

  • داده‌ها را مرتب‌سازی کنیم (مثل لیست نمرات از زیاد به کم)
  • در داده‌ها جست‌وجو کنیم (مثل پیدا کردن نام دانشجو در لیست)

یادگیری این مفاهیم پایه‌ای برای حرفه‌ای شدن در برنامه‌نویسی ضروری است.


بخش 1: روش‌های مرتب‌سازی آرایه

1.1. مرتب‌سازی حبابی (Bubble Sort)

ساده‌ترین روش برای شروع یادگیری:

void bubbleSort(int arr[], int size) {
    for (int i = 0; i < size-1; i++) {
        for (int j = 0; j < size-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                // جابجایی عناصر
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

مثال استفاده: 

int numbers[] = {5, 2, 8, 1, 3};
int size = 5;
bubbleSort(numbers, size);

1.2. مرتب‌سازی انتخابی (Selection Sort) 

void selectionSort(int arr[], int size) {
    for (int i = 0; i < size-1; i++) {
        int minIndex = i;
        for (int j = i+1; j < size; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        // جابجایی عنصر حداقلی
        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
}

1.3. مرتب‌سازی درجی (Insertion Sort) 

void insertionSort(int arr[], int size) {
    for (int i = 1; i < size; i++) {
        int key = arr[i];
        int j = i-1;
        
        while (j >= 0 && arr[j] > key) {
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = key;
    }
}

مقایسه روش‌ها:

روش سرعت پیچیدگی مناسب برای
حبابی کند O(n²) یادگیری اولیه
انتخابی متوسط O(n²) لیست‌های کوچک
درجی سریع‌تر O(n²) لیست‌های نیمه مرتب

بخش 2: روش‌های جست‌وجو در آرایه

2.1. جست‌وجوی خطی (Linear Search) 

int linearSearch(int arr[], int size, int target) {
    for (int i = 0; i < size; i++) {
        if (arr[i] == target) {
            return i; // اندیس عنصر پیدا شده
        }
    }
    return -1; // عدم یافتن
}

2.2. جست‌وجوی دودویی (Binary Search)

پیش‌نیاز: آرایه باید مرتب باشد 

int binarySearch(int arr[], int size, int target) {
    int left = 0;
    int right = size - 1;
    
    while (left <= right) {
        int mid = left + (right - left) / 2;
        
        if (arr[mid] == target) {
            return mid;
        }
        if (arr[mid] < target) {
            left = mid + 1;
        } else {
            right = mid - 1;
        }
    }
    return -1;
}

مثال استفاده: 

int sortedNumbers[] = {1, 3, 5, 7, 9};
int index = binarySearch(sortedNumbers, 5, 7);

مقایسه روش‌های جست‌وجو:

روش سرعت نیاز به مرتب‌سازی مناسب برای
خطی کند خیر لیست‌های کوچک/نامرتب
دودویی بسیار سریع بله لیست‌های بزرگ مرتب

بخش 3: مثال جامع – سیستم مدیریت دانشجویان

#include <iostream>
#include <algorithm> // برای تابع sort استاندارد
using namespace std;

struct Student {
    string name;
    int score;
};

// مقایسه برای مرتب‌سازی نزولی
bool compareStudents(Student a, Student b) {
    return a.score > b.score;
}

int main() {
    const int SIZE = 5;
    Student students[SIZE] = {
        {"علی", 85},
        {"رضا", 92},
        {"سارا", 78},
        {"نازنین", 95},
        {"محمد", 88}
    };
    
    // مرتب‌سازی نمرات (نزولی)
    sort(students, students + SIZE, compareStudents);
    
    // نمایش دانشجویان مرتب‌شده
    cout << "رتبه‌بندی دانشجویان:\n";
    for (int i = 0; i < SIZE; i++) {
        cout << i+1 << ". " << students[i].name 
             << ": " << students[i].score << endl;
    }
    
    // جست‌وجوی دانشجو
    string searchName;
    cout << "\nنام دانشجو برای جست‌وجو: ";
    cin >> searchName;
    
    bool found = false;
    for (int i = 0; i < SIZE; i++) {
        if (students[i].name == searchName) {
            cout << "یافت شد! رتبه: " << i+1 
                 << "، نمره: " << students[i].score;
            found = true;
            break;
        }
    }
    
    if (!found) {
        cout << "دانشجو یافت نشد!";
    }
    
    return 0;
}

بخش 4: تمرین‌های تقویتی

  1. برنامه‌ای بنویسید که 10 عدد را گرفته، مرتب کند و سپس عددی از کاربر بگیرد و با جست‌وجوی دودویی موقعیت آن را پیدا کند
  2. تابعی بنویسید که یک آرایه رشته‌ای (نام افراد) را به ترتیب الفبایی مرتب کند
  3. برنامه‌ای بنویسید که کارایی روش‌های مختلف مرتب‌سازی را با زمان‌سنجی مقایسه کند

 

 


 

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

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