beginner#arrayUpdated: 2026-05-13

অ্যারে (Array)


১. ভূমিকা — ৩০ জনের নম্বর ৩০টি Variable-এ রাখবে?

ধরো তোমার ক্লাসে ৩০ জন শিক্ষার্থীর নম্বর রাখতে হবে।

Variable দিয়ে করতে গেলে:

int s1, s2, s3, s4, s5, ... s30;  // ৩০টি Variable!

এটা অসহ্য! আর যদি ৩০০ জন হয়?

Array (অ্যারে) এই সমস্যার সমাধান — একটি নামে অনেক মান রাখা।


২. সমস্যা — একই ধরনের অনেক তথ্য রাখবো কীভাবে?

একই ধরনের অনেকগুলো তথ্য রাখতে হলে আলাদা Variable ব্যবহার করা:

  • অনেক কোড লিখতে হয়
  • Loop দিয়ে প্রসেস করা যায় না
  • মেইনটেন করা কঠিন

Array ব্যবহার করলে ৩০টি নম্বর মাত্র একটি নামে রাখা যায় এবং Loop দিয়ে সহজে প্রসেস করা যায়।


৩. চিত্রের মাধ্যমে বোঝো

int scores[5] = {85, 92, 78, 95, 88};

Memory:
Index:  [ 0 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ]
       ┌────┬────┬────┬────┬────┐
scores │ 85 │ 92 │ 78 │ 95 │ 88 │
       └────┴────┴────┴────┴────┘

scores[0] = 85   ← প্রথম উপাদান (index শূন্য থেকে শুরু!)
scores[1] = 92
scores[2] = 78
scores[3] = 95
scores[4] = 88   ← শেষ উপাদান (index = size-1 = 4)

৪. বাস্তব জীবনের সাথে মিল

ট্রেনের বগির মতো ভাবো:

ট্রেন নাম: scores
বগি ০: [85]
বগি ১: [92]
বগি ২: [78]
বগি ৩: [95]
বগি ৪: [88]
  • ট্রেনের নাম = Array-এর নাম
  • বগি নম্বর = Index
  • বগির যাত্রী = মান (value)
  • সব বগি একই আকারের = একই Data Type

Module 1: সংজ্ঞা ও ধারণা

Array (অ্যারে) হলো একই ডেটা টাইপের একাধিক উপাদানের একটি সংগ্রহ যারা একটি নামের অধীনে ক্রমানুসারে Memory-তে সংরক্ষিত থাকে।

Declaration:

data_type array_name[size];

Declaration with Initialization:

data_type array_name[size] = {value1, value2, ...};

Element Access:

array_name[index]   // index: 0 থেকে size-1

Array-এর বৈশিষ্ট্য:

  • ✅ Index শূন্য থেকে শুরু (zero-indexed)
  • ✅ সব উপাদান একই Data Type
  • ✅ আকার (size) নির্ধারণ করতে হয়
  • ✅ Loop দিয়ে সহজে traverse করা যায়

Module 2: কীভাবে কাজ করে

int arr[5] = {10, 20, 30, 40, 50};

Memory (প্রতিটি int = 4 bytes):
Address: 1000  1004  1008  1012  1016
         [10]  [20]  [30]  [40]  [50]
          arr[0] arr[1] arr[2] arr[3] arr[4]

arr[2] অ্যাক্সেস:
→ arr-এর শুরুর address = 1000
→ arr[2] = 1000 + (2 × 4) = 1008
→ Address 1008-এ যাও, মান পড়ো → 30

Module 3: প্যাটার্ন ও উদাহরণ

প্যাটার্ন ১: Declaration ও Initialization

উদাহরণ ১.১: মান দিয়ে তৈরি

#include <stdio.h>

int main() {
    int scores[5] = {85, 92, 78, 95, 88};
    int i;
    
    for (i = 0; i < 5; i++) {
        printf("scores[%d] = %d\n", i, scores[i]);
    }
    return 0;
}

আউটপুট:

scores[0] = 85
scores[1] = 92
scores[2] = 78
scores[3] = 95
scores[4] = 88

উদাহরণ ১.২: ইনপুট দিয়ে তৈরি

#include <stdio.h>

int main() {
    int n = 5;
    int arr[5];
    int i;
    
    printf("৫টি সংখ্যা দাও:\n");
    for (i = 0; i < n; i++) {
        printf("arr[%d] = ", i);
        scanf("%d", &arr[i]);
    }
    
    printf("\nArray: ");
    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

উদাহরণ ১.৩: আংশিক Initialization

#include <stdio.h>

int main() {
    int arr[5] = {10, 20};  // বাকি 3টি স্বয়ংক্রিয়ভাবে 0
    int i;
    
    for (i = 0; i < 5; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    return 0;
}

আউটপুট:

10 20 0 0 0

প্যাটার্ন ২: Array Traversal (সব উপাদান প্রক্রিয়া)

উদাহরণ ২.১: সর্বোচ্চ ও সর্বনিম্ন খোঁজা

#include <stdio.h>

int main() {
    int arr[6] = {45, 12, 67, 23, 89, 34};
    int max = arr[0], min = arr[0];
    int i;
    
    for (i = 1; i < 6; i++) {
        if (arr[i] > max) max = arr[i];
        if (arr[i] < min) min = arr[i];
    }
    
    printf("সর্বোচ্চ: %d\n", max);
    printf("সর্বনিম্ন: %d\n", min);
    return 0;
}

আউটপুট:

সর্বোচ্চ: 89
সর্বনিম্ন: 12

উদাহরণ ২.২: Array-এর যোগফল ও গড়

#include <stdio.h>

int main() {
    int marks[5] = {75, 82, 68, 91, 79};
    int sum = 0, i;
    float avg;
    
    for (i = 0; i < 5; i++) {
        sum += marks[i];
    }
    avg = (float)sum / 5;
    
    printf("মোট নম্বর: %d\n", sum);
    printf("গড় নম্বর: %.2f\n", avg);
    return 0;
}

আউটপুট:

মোট নম্বর: 395
গড় নম্বর: 79.00

উদাহরণ ২.৩: Array উল্টো করা

#include <stdio.h>

int main() {
    int arr[5] = {1, 2, 3, 4, 5};
    int i;
    
    printf("আগে: ");
    for (i = 0; i < 5; i++) printf("%d ", arr[i]);
    
    // উল্টো করা
    int left = 0, right = 4, temp;
    while (left < right) {
        temp = arr[left];
        arr[left] = arr[right];
        arr[right] = temp;
        left++;
        right--;
    }
    
    printf("\nপরে: ");
    for (i = 0; i < 5; i++) printf("%d ", arr[i]);
    printf("\n");
    return 0;
}

আউটপুট:

আগে: 1 2 3 4 5
পরে: 5 4 3 2 1

প্যাটার্ন ৩: Linear Search (খোঁজা)

উদাহরণ ৩.১: উপাদান খোঁজা

#include <stdio.h>

int main() {
    int arr[7] = {15, 32, 8, 47, 21, 63, 10};
    int key, found = 0;
    int i;
    
    printf("কোন সংখ্যা খুঁজবে? ");
    scanf("%d", &key);
    
    for (i = 0; i < 7; i++) {
        if (arr[i] == key) {
            printf("%d পাওয়া গেছে! অবস্থান: %d\n", key, i);
            found = 1;
            break;
        }
    }
    
    if (!found) printf("%d পাওয়া যায়নি।\n", key);
    return 0;
}

উদাহরণ ৩.২: Bubble Sort (সাজানো)

#include <stdio.h>

int main() {
    int arr[5] = {64, 25, 12, 22, 11};
    int n = 5, i, j, temp;
    
    // Bubble Sort
    for (i = 0; i < n-1; i++) {
        for (j = 0; j < n-i-1; j++) {
            if (arr[j] > arr[j+1]) {
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
    
    printf("সাজানো Array: ");
    for (i = 0; i < n; i++) printf("%d ", arr[i]);
    printf("\n");
    return 0;
}

আউটপুট:

সাজানো Array: 11 12 22 25 64

প্যাটার্ন ৪: 2D Array (দ্বিমাত্রিক)

উদাহরণ ৪.১: Matrix Declaration

#include <stdio.h>

int main() {
    int matrix[3][3] = {
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9}
    };
    int i, j;
    
    printf("Matrix:\n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            printf("%3d", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}

আউটপুট:

Matrix:
  1  2  3
  4  5  6
  7  8  9

উদাহরণ ৪.২: শিক্ষার্থীর নম্বর (2D)

#include <stdio.h>

int main() {
    // ৩ জন শিক্ষার্থী, ৪টি বিষয়
    int marks[3][4] = {
        {75, 82, 68, 90},   // শিক্ষার্থী ১
        {88, 79, 95, 72},   // শিক্ষার্থী ২
        {65, 91, 77, 85}    // শিক্ষার্থী ৩
    };
    int i, j, sum;
    
    for (i = 0; i < 3; i++) {
        sum = 0;
        for (j = 0; j < 4; j++) sum += marks[i][j];
        printf("শিক্ষার্থী %d: মোট = %d, গড় = %.1f\n",
               i+1, sum, (float)sum/4);
    }
    return 0;
}

আউটপুট:

শিক্ষার্থী 1: মোট = 315, গড় = 78.8
শিক্ষার্থী 2: মোট = 334, গড় = 83.5
শিক্ষার্থী 3: মোট = 318, গড় = 79.5

Module 4: বাস্তব প্রয়োগ

প্রয়োগArray
ক্লাসের সব নম্বরint scores[50]
সপ্তাহের তাপমাত্রাfloat temp[7]
পরীক্ষার প্রশ্ন উত্তরchar answers[100]
Image Pixelint pixel[1080][1920]
Excel Sheet2D Array

Module 5: সাধারণ ভুল ও সতর্কতা

ভুল ১: Index out of bounds

❌ ভুল:
int arr[5] = {1, 2, 3, 4, 5};
printf("%d\n", arr[5]);   // arr[5] নেই! (0-4 পর্যন্ত)

✅ সঠিক:
printf("%d\n", arr[4]);   // শেষ উপাদান index 4

ভুল ২: শূন্য index ভুলে যাওয়া

❌ ভুল:
int arr[5] = {10, 20, 30, 40, 50};
printf("প্রথম: %d\n", arr[1]);  // 20 আসবে, 10 নয়!

✅ সঠিক:
printf("প্রথম: %d\n", arr[0]);  // 10

ভুল ৩: Array size ভুল Loop

❌ ভুল:
int arr[5];
for (i = 1; i <= 5; i++)   // 1 থেকে 5, কিন্তু index 0-4!
    printf("%d ", arr[i]);  // arr[5] access করে — undefined!

✅ সঠিক:
for (i = 0; i < 5; i++)    // 0 থেকে 4
    printf("%d ", arr[i]);

Module 6: সুবিধা-অসুবিধা

বিষয়Array-এর সুবিধাসীমাবদ্ধতা
আকারLoop দিয়ে সহজ traverseআকার আগে থেকে ঠিক করতে হয়
প্রকারদ্রুত random accessএকই Data Type
মেমরিসংলগ্ন মেমরি — cache friendlyঅনেক বড় হলে সমস্যা
ব্যবহারসহজ, সরাসরিDynamic resize সম্ভব নয়

🔁 নিজে পরীক্ষা করো

MCQ:

১. int arr[5] — বৈধ index-গুলো কী?

  • ক) 1 থেকে 5
  • খ) 0 থেকে 4 ✓
  • গ) 0 থেকে 5
  • ঘ) 1 থেকে 4

২. int arr[3] = {10}; — arr[2]-এর মান কত?

  • ক) 10
  • খ) অনির্ধারিত
  • গ) 0 ✓
  • ঘ) Error

৩. ৫ উপাদানের Array-এ শেষ উপাদানের index কত?

  • ক) 5
  • খ) 4 ✓
  • গ) 6
  • ঘ) -1

৪. 2D Array arr[3][4]-এ মোট কয়টি উপাদান?

  • ক) 7
  • খ) 12 ✓
  • গ) 34
  • ঘ) 3

৫. Array-এ Linear Search-এর সময় জটিলতা কী?

  • ক) O(1)
  • খ) O(n) ✓
  • গ) O(n²)
  • ঘ) O(log n)

সংক্ষিপ্ত প্রশ্ন:

৬. Variable এবং Array-এর মধ্যে পার্থক্য উদাহরণসহ লেখো।

৭. ৫টি সংখ্যার Array ইনপুট নিয়ে সর্বোচ্চ ও সর্বনিম্ন সংখ্যা বের করার C প্রোগ্রাম লেখো।


📝 HSC পরীক্ষার প্রস্তুতি

১. Array-এর Index শূন্য থেকে শুরু হয় কেন? ১ থেকে শুরু হলে কী সমস্যা হতো?

২. 2D Array কি বাস্তব জীবনের কোন জিনিসের মতো? তিনটি উদাহরণ দাও।

৩. Bubble Sort কীভাবে কাজ করে? প্রতিটি ধাপে কী পরিবর্তন হয়?


🎯 অনুশীলন প্রশ্ন

সহজ: ১০টি সংখ্যার Array ইনপুট নাও। তাদের যোগফল, গড়, সর্বোচ্চ, এবং সর্বনিম্ন বের করো।

মাঝারি: ৫টি সংখ্যার Array ইনপুট নাও। Bubble Sort দিয়ে ছোট থেকে বড় ক্রমে সাজাও।

কঠিন: ৩×৩ Matrix-এর দুটি ইনপুট নাও। তাদের যোগফল Matrix বের করো এবং প্রিন্ট করো।


✅ সারাংশ

🎯 মনে রেখো:

  • Array = একই Data Type-এর একাধিক উপাদান একটি নামে
  • Index শূন্য থেকে শুরুarr[0] প্রথম, arr[n-1] শেষ
  • Declaration: int arr[5];
  • Initialization: int arr[5] = {1,2,3,4,5};
  • Loop দিয়ে traverse: for (i=0; i<n; i++) arr[i]
  • 2D Array: int matrix[rows][cols]
  • বিপদ: arr[size] — out of bounds! সর্বদা 0 থেকে size-1

💡 পরীক্ষার টিপস: Array-এ সর্বোচ্চ/সর্বনিম্ন খোঁজা, যোগফল/গড় বের করা, এবং Bubble Sort — এগুলো HSC-তে প্রায়ই আসে।