Array
অ্যারে
অ্যারে (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 Pixel | int pixel[1080][1920] |
| Excel Sheet | 2D 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-তে প্রায়ই আসে।