অ্যারে (Array)

তোমাকে যদি বলা হয় যে ১০টা সংখ্যা Input নিয়ে তাদের যোগফল বের করতে হবে তবে তুমি কি করবে? তুমি বলবে এতো সোজা। ১০টা Variable Declare করে তাতে Input নিয়ে তাদের যোগফল Output দিয়ে দিবো, বাস কাজ শেষ। এখন যদি তোমাকে বলি ১০০টা বা ১০০০টা সংখ্যার যোগফল বের করতে হবে তাহলেও কি একি কাজ করবে? ১০০০টা Variable Declare করা খুবই কষ্টের আবার যোগফল তো বের করতে হবেই। তো এখন সহজে কাজটা কিভাবে করা যায়? আমরা কাজটা করতে পারি Array দিয়ে। আমাদের যখন এককই Type এর অনেক Data এর উপর একই Operation Perform করতে হয় তাহলে আমরা একটা Array তে সংখ্যা গুলো Store করবো। Array কে তুমি একটা Train এর মত চিন্তা করতে পারো, Train যেমন অনেক গুলো বগি নিয়ে গটিত ঠিক তেমনই Array আসলে অনেক গুলো Variable নিয়ে গঠিত এবং এরা Train এর বগির মত একে অপরের সাথে Sequentially Connected। Train এর প্রত্যেকটি বগিকে যেমন ক, খ, গ ইত্যাদি নাম দিয়ে প্রকাশ করা হয় ঠিক তেমনই আমাদের Array এর প্রত্যেকটি Variable কে সংখ্যা দিয়ে প্রকাশ করা হয়। একে Indexing বলা হয়। এবার আমরা আমাদের ১০টা সংখ্যা যোগ করার Program টি করবো এবং অবশ্যই আমরা ১০টা Variable Declare করবো না।

#include <stdio.h>

int main(){
    int i, sum = 0, array[10];	// ১০ টা সংখ্যা রাখার জন্য আমরা 10 Size এর একটা Array নিলাম
    for(i = 0; i<10; i++){		// 0 থেকে ৯ পর্যন্ত Loop চালিয়ে
        scanf(“%d”, &array[i]);	// Array এর প্রত্যেকটা Variable এ Input নিলাম
    }
    for(i = 0; i<10; i++){	// আবার Loop চালিয়ে
        sum += array[i];	// Array এর প্রত্যেকটি Variable এর Value Sum এর সাথে যোগ করলাম
    }
    printf(“%d\n”, sum);
    return 0;
}

Array Declare করতে হয় array_name[array_size]; এভাবে। আমরা Array এর যেকোন নাম দিতে পারি। Square Bracket [] এর ভিতর আমাদের Array এর Size বলে দিতে হবে। অর্থাৎ আমরা আমাদের Array তে কয়টা সংখ্যা রাখবো তা বলে দিতে হবে।  Array এর Indexing শুরু হয় ০ (শূণ্য) থেকে। অর্থাৎ Array এর Size যদি N হয় তাহলে Array এর Variable গুলো নাম হবে ০ থেকে শুরু করে N-1 পর্যন্ত। আমরা Array এর কোন নির্দিষ্ট Variable Access করতে চাইলে array_name[index] এভাবে করতে হবে। যেমনঃ আমরা যদি ৫ নং Variable Access করতে চাই তাহলে আমাদের array[4] লিখতে হবে। ৫ এর জন্য ৪ লিখতে হবে যেহেতু Array এর Indexing 0 থেকে শুরু হয়। যেহেতু Array এর Indexing সংখ্যা দিয়ে করা হয়ে থাকে তাই আমরা অতি সহজে Loop চালিয়ে Array এর বিভিন্ন Variable এ Input নিয়ে নিতে পারি। একই ভাবে Loop চালিয়ে আমরা ১০টা সংখ্যার যোগফল বের করেছি। আশা করি এখন ১০০ বা ১০০০ সংখ্যার যোগফল বের করতে বললেও সমস্যা হবে না।

এখন তুমি শিখে ফেললে কিভাবে Array তে একই রকম সংখ্যা নিয়ে তাদের যোগফল কত সহজেই বের করে ফেলা যায় তাই তুমি তোমার শিক্ষক এর জন্য একটা Program লিখে ফেললে যা কিনা একটা শিক্ষার্থীর ছয়টা বিষয়ের নাম্বার Input নিয়ে তার যোগফল দেখায়। তোমার শিক্ষক তা পেয়ে প্রথমে বেশ খুশি হলে সেই খুশিটা দির্ঘস্থায়ী হল না। কারণ ১০টা শিক্ষার্থীর জন্য তাকে ১০বার Program টি চালাতে হচ্ছে তাই সে তোমাকে বললো যে Program টাকে এমন করে দিতে যেন সব শিক্ষার্থীর নাম্বার একবারে Input নিয়ে প্রত্যেক শিক্ষার্থীর নাম্বারের যোগফল আলাদা আলাদা Line এ দেখায়।

আমরা যদি কাজ করতে চাই তাহলে আমরা ১০টা শিক্ষার্থীর নাম্বার রাখার জন্য ১০টা Array নিতে পারি কিন্তু দেটা আবার বোকামি করা হয়ে যাবে কারণ আমরা এক্ষেত্রে ব্যবহার করতে পারি 2D বা 2 Dimensional Array। আমাদের যদি Tabular Data Store করতে হয় তখন আমরা 2D Array ব্যবহার করবো। এর আগে আমরা ব্যবহার করেছি 1D বা 1 Dimensional Array। এখন ১০টা শিক্ষার্থীর ছয় বিষয়ে নাম্বারে একটা Table দেখা যাকঃ

Table of Marks of Ten Students

এই ধরেণের Data আমরা Nested Loop ব্যবহার করে 2D Array তে নিবো। Table এ Row এবং Column থাকে। একটি নির্দিষ্ট ঘর নির্দেশ করার জন্য আমাদের Row এবং Column উভয়ের মানই লাগবে। এই জন্য আমরা দু’টি Loop চালাবো। একটি Loop এর ভেতর আরেকটি হবে তাই একে Nested Loop বলা হয়ে থাকে। 2D Array Declare করতে হয় array[10][6] যেখানে প্রথম Square Braket এর Value টি হল Row সংখ্যা এবং দ্বিতীয় Square Bracket এর Value টি হল Column সংখ্যা। এখন আমরা যদি তৃতীয় Row এর দ্বিতীয় Column Access করতে চাই তাহলে আমাদের লিখতে হবে array[2][1]; 2D Array এর ক্ষেত্রেও Indexing 0 থেকেই শুরু হবে। এখন আমরা আমাদের শিক্ষকের কাজটি সহজ করে দিতে পারি।

#include <stdio.h>

int result[10]; // ১০ জন এর ছয়টি বিষয়ে যোগফল রাখার জন্য একটি Globar Array Declare করা হয়েছে।

int main(){
    int i, j, array[10][6]; // ১০ জন এর ছয়টি করে বিষয় রাখার জন্য 2D Array
    for(i = 0; i<10; i++){ // i এর Loop 2D Array এর Row Access করার জন্য
        for(j = 0; j<6; j++){ // j এর Loop 2D Array এর Column Access করার জন্য
            scanf(“%d”, &array[i][j]);
        }
    }
    for(i = 0; i<10; i++){
        for(j = 0; j<6; j++){
            result[i] += arrya[i][j];
        }
    }
    for(i = 0 ; i<10; i++){
        printf(“%d\n”, result[i]); // ১০ জন এর Result Print করা হল
    }
    return 0;
}

আশা করি Program টি বুঝতে পেরেছো। এখানে নিঃশ্চয় একটা জিনিস নতুন লাগছে আর সেটা হল Global Array। আমরা যখন কোন Variable (Array ও এক বিশেষ ধরণের Variable যেহেতু Array অনেক গুলো Variable নিয়ে গঠিত) কোন function এর বাইরে Declare করবো তখন তা আসলে Globaly Declare হবে। অর্থাৎ এটি যেকোন জায়গা থেকে Access করা যাবে। Variable টি কোথা থেকে Access করা যাবে বা কোথা থেকে Access করা যাবে  তা জানতে হলে Variable এর Scope সম্পর্কে জানতে হবে। Variable এর Scope সম্পর্কে Function নিয়ে আলোচনা করার সময় আরো বিস্তারিত আলোচনা করবো। Variable Globaly Declare করার সুবিধা হল তা Automatically 0 (শূণ্য) দিয়ে Initialize হয়ে যায়। আগের Program টিতে আমরা sum Variable টিকে sum = 0 দিয়ে Initialize করে নিয়ে ছিলাম যাতে আমাদের ফলাফল ভুল না আসে। এখানে আমাদের result Arrya এর প্রত্যেকটি Variable কেও আমাদের ০ (শূণ্য) দিয়ে Initialize করতে হবে। আমরা Directly result[10] = 0 লিখতে পারবো না। কারণ এখানে একটি Variable না বরং ১০টি Variable আছে তাই আমরা কাজটি দুই ভাবে করতে পারতাম একটা হচ্ছে Loop চালিয়ে প্রতিটি Variable এর Value 0 করে দিতে পারতাম অথবা আমরা যেটি করেছি, Array টিকে Globaly Declare করেছি যাতে Array টির প্রত্যেকটি Variable এর Value 0 হয়ে যায়।

Advertisements
Tagged with: , , , , , ,
Posted in বেসিক প্রোগ্রামিং

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: