সি তে অ্যারে হলো একই ধরনের অনেকগুলো ডাটা রাখার জন্য এক ধরনের ডাটা স্ট্রাকচার । মনে করো, তুমি তোমার স্কুলের সকল ছাত্রের বার্ষিক পরীক্ষার মোট নাম্বার রোল অনুযায়ী প্রিন্ট করার জন্য একটি প্রোগ্রাম লিখবে । এখন সবার নাম্বার গুলো রাখার জন্য তো একটা একটা ভ্যারিয়েবল লাগবে তাই না? এখন মনে করো মোট ছাত্র আছে ১০০ জন । তাহলে কি তুমি , , , এভাবে 100 টা ভ্যারিয়েবল বানাবে? এভাবে ১০০টা ভ্যারিয়েবল বানানোটা মোটেই বাস্তবসম্মত নয় ! এ সমস্যাটি আমরা অ্যারে ব্যবহার করে সমাধান করতে পারি । নিচের উদাহরণটি দেখোঃ
1#include <stdio.h>
2
3int main(){
4 int rolls[10] = {100, 90, 100, 90, 100, 90, 100, 90, 100, 9};
5}
6এখানে হলো একটি অ্যারে যা টাইপের ডাটা ধরে রাখতে পারে । square brackets এর ভেতরে আমরা যে লিখেছি, তা হলো অ্যারেটির সাইজ, অর্থাৎ অ্যারেটি তে কতটি উপাদান রাখা যাবে ।
অ্যারেতে রাখা উপাদানগুলো আমরা অ্যাক্সেস করবো কীভাবে? আমরা অ্যারে এর নাম লিখে তার পরে square brackets এর ভেতরে যত নাম্বার উপাদান এর মান চাই তত লেখবো । অ্যারেতে প্রতিটি উপাদানের অবস্থান কে বলা হয় index । আর, সি তে অ্যারে এর index শুরু হয় থেকে, তাই প্রথম উপাদানটির index হলো , ২য় উপাদানের index হলো , ৩য় উপাদানের index হলো এরকম । তাহলে আমরা যদি ১ম উপাদানের মান চাই তাহলে আমরা ব্যবহার করবো , যদি ২য় উপাদানের মান চাই, তাহলে ব্যবহার করবো এরকম । এই দেখোঃ
1#include <stdio.h>
2
3int main(){
4 int rolls[10] = {100, 90, 100, 90, 100, 90, 100, 90, 100, 9};
5 printf("%d\n", rolls[0]);
6 printf("%d\n", rolls[1]);
7 printf("%d\n", rolls[2]);
8 printf("%d\n", rolls[3]);
9 printf("%d\n", rolls[4]);
10 printf("%d\n", rolls[5]);
11 printf("%d\n", rolls[6]);
12 printf("%d\n", rolls[7]);
13 printf("%d\n", rolls[8]);
14 printf("%d\n", rolls[9]);
15 return 0;
16}
17আমরা চাইলে অ্যারে ডিক্লেয়ার করে পরে উপাদানের মান সেট করতে পারি । যেমন দেখোঃ
1#include <stdio.h>
2
3int main(){
4 int rolls[5];
5 rolls[0] = 100;
6 rolls[1] = 57;
7 rolls[2] = 88;
8 rolls[3] = 99;
9 rolls[4] = 60;
10 return 0;
11}
12আমরা চাইলে অ্যারে ঘোষণার সময়ই সবগুলো উপাদানের মান নির্ধারণ করে দিতে পারি । এক্ষেত্রে আমরা চাইলে সাইজ নাও দিতে পারি । যদি সাইজ না দেই তাহলে যতগুলো উপাদানের মান দেয়া হবে ঠিক তত সাইজের অ্যারে তৈরি হবে ।
1#include <stdio.h>
2
3int main(){
4 int rolls[] = {100, 57, 88, 90, 100};
5 return 0;
6}
7এখানে আমরা কে ঘোষণা করার সময়ে ৫টি উপাদানের মান পাঠিয়েছি । তাই অটোমেটিকালি অ্যারে এর সাইজ ৫ নির্ধারিত হয়ে গিয়েছে । আমরা চাইলে একইসাথে সাইজও দিয়ে দিতে পারিঃ
1#include <stdio.h>
2
3int main(){
4 int rolls[5] = {100, 57, 88, 90, 100};
5 return 0;
6}
7এখন মনে করো, আমি এখানে size এর মান দিলাম 10 কিন্তু উপাদান পাঠালাম 5 টা এভাবেঃ
1#include <stdio.h>
2
3int main(){
4 int rolls[10] = {100, 57, 88, 90, 100};
5 return 0;
6}
7এখন কী হবে? প্রথম ৫ টি উপাদান তো আমরা নির্ধারন করেই দিয়েছি, বাকি উপাদান গুলো হয়ে যাবে ।
অ্যারের উপাদান অ্যাক্সেস করতে আমাদের অ্যারের নাম লিখে তার পরে square brackets এর মধ্যে অ্যারের কত তম উপাদান চাই তা লিখতে হবে । এই অ্যারের উপাদানের নাম্বার কে বলা হয় । এখানে উল্লেখ করা জরুরী, প্রায় সকল প্রোগ্রামিং ভাষার মতো সি তেও index এর মান 0 থেকে শুরু হয় । আসো উদাহরণের মাধ্যমে জিনিসটা দেখি ।
1#include <stdio.h>
2
3int main(){
4 int rolls[10] = {100, 57, 88, 90, 100, 50, 51, 19, 100, 100};
5 printf("%d\n", rolls[0]);
6 printf("%d\n", rolls[1]);
7 printf("%d\n", rolls[2]);
8 return 0;
9}
10এর ফলে অ্যারে এর প্রথম তিনটি উপাদান প্রিন্ট হবে । দেখো, প্রথম উপাদান প্রিন্ট করতে আমরা 0 ব্যবহার করেছি, ২য় উপাদান প্রিন্ট করতে আমরা ব্যবহার করেছি ১ এভাবে যত নাম্বার উপাদান চাই তার থেকে ১ বিয়োগ করে ব্যবহার করতে হবে । কারণ শুরু হয় 0 থেকে, 1 থেকে নয় !
আমরা যেমন লিখেছি সেরকম আমরা যেকোনো টাইপের ভ্যারিয়েবল এর জন্য লিখতে পারতাম যেখানে হলো ভ্যারিয়েবলের নাম । যেমন দেখোঃ
1#include <stdio.h>
2
3int main(){
4 int rolls[10] = {100, 57, 88, 90, 100, 50, 51, 19, 100, 100};
5 int i = 0;
6 printf("%d\n", rolls[i]);
7 i = 1;
8 printf("%d\n", rolls[i]);
9 i = 2;
10 printf("%d\n", rolls[i]);
11 return 0;
12}
13তোমাদের সাধারণভাবে মনে হতে পারে এটা করে কী এমন লাভ হলো ! কিন্তু দেখো, আমরা যেহেতু যেকোনো ভ্যারিয়েবলের মান থেকে অ্যারে থেকে উপাদান নিতে পারি, তাহলে আমরা চাইলে একটি লুপের ভেতরে অ্যারে তে ডাটা রাখতে পারি এবং অ্যারে থেকে ডাটা নিতে পারি । নিচের উদাহরণটি দেখো, এখানে একটি লুপ ব্যবহার করে অ্যারের সকল উপাদান প্রিন্ট করা হয়েছে ।
1#include <stdio.h>
2
3int main(){
4 int rolls[10] = {100, 57, 88, 90, 100, 50, 51, 19, 100, 100};
5 for(int i = 0; i < 10; i++){
6 printf("%d\n", rolls[i]);
7 }
8 return 0;
9}
10আমরা যদি চাইতাম, তাহলে লুপের মধ্যে অ্যারে তা উপাদান রাখতেও পারতাম । দেখো, একটি অ্যারে তে আমরা কীভাবে ইউজার থেকে ইনপুট নিয়ে উপাদান রাখতে পারিঃ
1#include <stdio.h>
2
3int main(){
4 int marks[10];
5 int roll = 1;
6 int mark = 0;
7 while(roll <=10){
8 printf("Enter marks for roll %d: ", roll);
9 scanf("%d", &mark);
10 marks[roll - 1] = mark;
11 roll++;
12 }
13 for(int i = 0; i < 10; i++){
14 printf("Marks for roll %d is: %d\n", i+1, marks[i]);
15 }
16 return 0;
17}
18Enter marks for roll 1: 100
Enter marks for roll 2: 91
Enter marks for roll 3: 56
Enter marks for roll 4: 38
Enter marks for roll 5: 77
Enter marks for roll 6: 89
Enter marks for roll 7: 100
Enter marks for roll 8: 64
Enter marks for roll 9: 99
Enter marks for roll 10: 91
Marks for roll 1 is: 100
Marks for roll 2 is: 91
Marks for roll 3 is: 56
Marks for roll 4 is: 38
Marks for roll 5 is: 77
Marks for roll 6 is: 89
Marks for roll 7 is: 100
Marks for roll 8 is: 64
Marks for roll 9 is: 99
Marks for roll 10 is: 91এভাবে আমরা একেবারে শুরুতে বলা সমস্যাটা অ্যারে ব্যবহার করে সহজেই সমাধান করে ফেললাম !
