সি অ্যারে

অ্যারে কী?

সি তে অ্যারে হলো একই ধরনের অনেকগুলো ডাটা রাখার জন্য এক ধরনের ডাটা স্ট্রাকচার । মনে করো, তুমি তোমার স্কুলের সকল ছাত্রের বার্ষিক পরীক্ষার মোট নাম্বার রোল অনুযায়ী প্রিন্ট করার জন্য একটি প্রোগ্রাম লিখবে । এখন সবার নাম্বার গুলো রাখার জন্য তো একটা একটা ভ্যারিয়েবল লাগবে তাই না? এখন মনে করো মোট ছাত্র আছে ১০০ জন । তাহলে কি তুমি , , , এভাবে 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}
18
Enter 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

এভাবে আমরা একেবারে শুরুতে বলা সমস্যাটা অ্যারে ব্যবহার করে সহজেই সমাধান করে ফেললাম !

Logo

PyxLearn

Quick Links

আমাদের মেসেজ পাঠাতে চাও?