প্রোগ্রামিংয়ের মজার দুনিয়া ৭

বেশ কিছু বৈশিষ্ট্যের জন্য প্রোগ্রামিং দিয়ে আমরা খুব সহজে এমন কাজ করতে পারি, যা একজন সাধারণ মানুষের জন্য করা বেশ কষ্টসাধ্য হবে। এ রকম অন্যতম বৈশিষ্ট্য হলো লুপ। একই কাজ, একটুও বিরক্ত না হয়ে, ঘণ্টার পর ঘণ্টা ধরে করে যাওয়া, মানুষের জন্য মোটেও সম্ভব নয়। কিন্তু কাজটি প্রোগ্রামিংয়ে করা খুবই সহজ। লুপের বিষয়ে আমি গত জুন, ২০১৬ সংখ্যায় লিখেছিলাম। আশা করি, সে লেখাটি পড়ে, তোমরা লুপের ব্যাপারে সাধারণ একটি ধারণা পেয়েছ। তবে আজ আমি কথা বলব অ্যারে নিয়ে। এটিও প্রোগ্রামিংয়ের একটি অনন্য বৈশিষ্ট্য, যার সাহায্যে আমরা অনেক কঠিন কাজ সহজে করে ফেলতে পারি। আমরা এই লেখায় যখন অ্যারে নিয়ে কথা বলব, তখন ধরে নিতে হবে যে সি ল্যাঙ্গুয়েজের অ্যারে নিয়ে কথা বলছি।

অ্যারে হলো জাদুর খাতা

তোমরা সবাই নিশ্চয় স্কুলে খাতা ব্যবহার করো বা করেছ। একটা খাতায় কী থাকে বলো তো? অনেকগুলো পৃষ্ঠা পাশাপাশি জোড়া লাগানো থাকে। তাই না? আর প্রতিটি খাতার ওপর একটা মলাট থাকে। যেখানে তুমি এই খাতায় কোন বিষয়ে লেখা হবে, তার নাম লিখে রাখো। যেমন গণিতের জন্য খাতা, বাংলার জন্য খাতা, ইংরেজির জন্য খাতা, বিজ্ঞানের জন্য খাতা। কে জানে, তোমাদের অনেকেরই হয়তো এখন প্রোগ্রামিংয়ের জন্য খাতা আছে। যারা লুকিয়ে লুকিয়ে কবিতা লেখো, তাদের আছে কবিতার খাতা। কারওবা আছে ছবি আঁকার খাতা।

কিন্তু শুধু কি তোমার একারই এ রকম খাতা আছে? তোমার বন্ধুদেরও আছে এ রকম হরেক রকম খাতা। তোমার ছোট ভাইবোনটিরও আছে বিভিন্ন রকম খাতা। তোমার মা-বাবাও হয়তো হিসাবের জন্য খাতা ব্যবহার করেন। তাহলে এত এত খাতার মধ্যে আমরা কীভাবে বুঝি কোনটি কার খাতা? কীভাবেই বা বুঝি কোন খাতার কী কাজ? তুমিই একটু চিন্তা করে বলো।

উত্তর নিশ্চয়ই এতক্ষণে বের করে ফেলেছ। আমরা এত খাতার ভেতরে একটা খাতা খুঁজে পাই মলাটের ওপর লেখা নাম দেখে। তোমার যখন বিজ্ঞানের খাতা দরকার হয়, তখন তুমি দেখো যে কোন খাতার ওপর তোমার নাম লেখা, তার পাশে বিজ্ঞান লেখা। এভাবেই তুমি খুঁজে পেয়ে যাও তোমার বিজ্ঞানের খাতাটি। মাঝেমধ্যে যে ভুলভ্রান্তি হয় না, তা নয়। কিন্তু ভুল তো মানুষেরই হয়। ভুলটুকু বাদ দিলে এটাই আমাদের খাতা খোঁজার নিয়ম। খাতার ওপরের নাম দেখে আমরা বুঝি এটা কার খাতা, কিসের খাতা।

কিন্তু অ্যারে নিয়ে বলতে গিয়ে এত খাতা খাতা করার কী দরকার? আসলে অ্যারে আর আমাদের খাতার মধ্যে তেমন কোনো পার্থক্য নেই। অ্যারে হলো প্রোগ্রামিংয়ের খাতা। এখানেও অনেক পৃষ্ঠা পাশাপাশি রাখা আছে। এখানেও আমরা চাইলে আমাদের খুশিমতো জিনিস লিখে রাখতে পারি। কিন্তু প্রোগ্রামিংয়ের অ্যারে হুবহু আমাদের খাতার নয়। এর কিছু সুবিধা-অসুবিধা আছে। প্রথমে অসুবিধাগুলো দেখি।

১. অ্যারেতে প্রতি পৃষ্ঠায় আমরা একটি মাত্র মান লিখতে পারি। সেটা একটা পূর্ণ সংখ্যা হতে পারে, ভগ্নাংশ হতে পারে বা কোনো বর্ণ হতে পারে। কিন্তু প্রতি পৃষ্ঠায় মাত্র একটিই লিখতে পারব। এর বেশিও পারব না, কমও পারব না।

২. এক বিষয়ের খাতায় যেমন চাইলে আমরা অন্য কিছুও লিখতে পারি, অ্যারেতে আমরা চাইলে তা করতে পারব না। যদি আমরা অ্যারে নিই পূর্ণ সংখ্যা লেখার জন্য, তাহলে এর প্রতিটি পৃষ্ঠায় শুধু পূর্ণ সংখ্যাই থাকবে। এই অ্যারেতে কোনোভাবেই ভগ্নাংশ বা বর্ণ বা অন্য কোনো কিছু রাখা যাবে না। এখন তাহলে সুবিধাগুলো দেখি।

I. অ্যারেতে কতগুলো পৃষ্ঠা থাকবে, এটি তুমি ঠিক করে দেবে। যদি তোমার ১০টি পৃষ্ঠা দরকার হয়, সেটা যেমন তুমি পারবে, চাইলে এক লাখ পৃষ্ঠার অ্যারেও তুমি নিতে পারবে। কিন্তু একবার ঠিক করে ফেললে সেটির পৃষ্ঠাসংখ্যা আর পরিবর্তন করা যাবে না।

II. অ্যারের যেকোনো পৃষ্ঠায় কী লেখা আছে, সেটি পড়ার জন্য আমাদের একটুও পাতা ওল্টানোর দরকার হয় না। যদি আমি চাই পাঁচ নম্বর পৃষ্ঠায় কী লেখা আছে তা পড়ব, তাহলে তা সঙ্গেই সঙ্গেই করা সম্ভব। যদি সেখান থেকে আমরা এক লাফে চল্লিশ হাজার নম্বর পৃষ্ঠায় কী লেখা আছে পড়তে চাই, তা-ও মুহূর্তের মধ্যে করা সম্ভব। একদম জাদুর মতো!

III. পড়ার জন্য যেমন সময় লাগে না, তেমনি লেখার জন্য অ্যারেতে কোনো সময় লাগে না। আমি যত নম্বর পৃষ্ঠায় লিখতে চাই, তার পৃষ্ঠা নম্বর বললেই সে পৃষ্ঠায় চলে যাবে এবং তারপর আমি সেখানে লিখে ফেলতে পারব।

IV. কোনো পৃষ্ঠায় আগে কিছু লেখা থাকলে, সেটি মুছতে কোনো বেগ পেতে হয় না। আসলে অ্যারেতে আমাদের মুছতেই হয় না। নতুন কিছু লিখলে তা আগের লেখাকে মুছে সেখানে জায়গা দখল করে নেয় মুহূর্তেই।

তোমরা নিশ্চয়ই অ্যারের সুবিধা-অসুবিধাগুলো বুঝতে পেরেছ। আসলে অসুবিধা অনেক কম, সুবিধাই অনেক বেশি। বিশেষ করে যেহেতু একটা নির্দিষ্ট পৃষ্ঠায় পড়তে বা লিখতে কোনো সময় লাগে না বলেই একটি প্রোগ্রাম মানুষের থেকে অনেক দ্রুত কাজ করতে পারে। খাতায় না লিখে রেখে মাথাতে লিখে রাখলেও কিন্তু কোনো কিছু মনে করতে আমাদের কিছুটা সময় লাগে। এখানেই অ্যারের আসল জাদু। অ্যারে হচ্ছে তাই এক জাদুর খাতা!

তবে জাদুর খাতা এই অ্যারেতে আসলে পৃষ্ঠা থাকে না। এখানে পাশাপাশি অনেক মেমোরি সেল বা ঘর থাকে। এদের আমরা বলি ইনডেক্স (ওহফবি)। সি তে এই ইনডেক্স শুরু হয় শূন্য থেকে। কাজেই যদি কোনো অ্যারেতে মোট চারটি ঘর থাকে, তাদের ইনডেক্স হবে: ০, ১, ২ ও ৩।

অ্যারেতে হাতেখড়ি

এখন অতি দ্রুত আমরা কীভাবে অ্যারে ব্যবহার করতে পারি, তার অল্প কিছু ধারণা আমি দেব। কিন্তু ভালোমতো জানার জন্য তোমাদের প্রোগ্রামিংয়ের কোনো বই পড়া উচিত।

অ্যারে ডিক্লেয়ার: কোনো অ্যারে ব্যবহারের আগে ডিক্লেয়ার করে নিতে হয়। ডিক্লেয়ার করা মানে হলো অ্যারেটির নাম কী হবে, কতগুলো ঘর থাকবে (যাকে আমরা সাইজ বলি) এবং অ্যারেটিতে কী ধরনের ডেটা থাকবে (অ্যারের টাইপ) এই বিষয়গুলো নির্ধারণ করা। সি তে অ্যারে ডিক্লেয়ার করার নিয়ম হলো নিচের মতো:

int myFirstArray[100], secondArray[500];
double money[5];

ওপরের প্রথম লাইনে দুটি int টাইপের বা পূর্ণ সংখ্যার অ্যারে ডিক্লেয়ার করা হয়েছে। পরের লাইনে ফড়ঁনষব টাইপের একটি অ্যারে ডিক্লেয়ার করা হয়েছে। প্রথম লাইনের অ্যারে দুটির নাম যথাক্রমে myFirstArray এবং secondArray। একইভাবে দ্বিতীয় লাইনে লেখা অ্যারেটির নাম সড়হবু। বন্ধনীর মধ্যে লেখা সংখ্যাটি দিয়ে আমরা অ্যারের সাইজ বোঝাই। কাজেই myFirstArray-এর সাইজ হলো ১০০। কাজেই এই অ্যারেতে ০ থেকে ৯৯ পর্যন্ত ইনডেক্স রয়েছে।

অ্যারে ব্যবহার: যেকোনো অ্যারের কোনো নির্দিষ্ট ইনডেক্স নিয়ে কাজ করতে চাইলে আমরা নিচের মতো করে লিখতে পারি:

int arr[5], i;
for(i = 0; i < 5; i++) scanf(“%d”, &arr[i]);
arr[3] = arr[1];
arr[1] = arr[1] + 5;

ওপরের লাইনগুলোতে আমরা অ্যারেটিতে প্রথমে ইনপুট নিয়েছি। খেয়াল করলে দেখা যাবে, আমরা ইনডেক্স হিসেবে সংখ্যা না লিখে একটি ভ্যারিয়েবল লিখেছি। কিন্তু যেহেতু ভ্যারিয়েবলটি লুপের কন্ট্রোল ভ্যারিয়েবল, কাজেই এর মান ০ থেকে ৪ মধ্যে থাকবে। এ জন্যই এভাবে লেখার মাধ্যমে আমরা অ্যারেটির ০ থেকে ৪ ইনডেক্স পর্যন্ত ইনপুট নিতে পেরেছি। পরের লাইনটিতে আমরা অ্যারেটির ১ নম্বর ইনডেক্সের মান পড়ে তা অ্যারেটির ৩ নম্বর ইনডেক্সে লিখেছি। পরের লাইনটিতেও আমরা একইভাবে কাজ করেছি।

অ্যারে ব্যবহার করে কিছু সমস্যা

এখন এমন কিছু সমস্যা নিয়ে আমরা কথা বলব, যেগুলো সমাধান করতে অ্যারে ব্যবহার করলে খুব সহজেই করা যাবে। নিচে এমন কিছু সমস্যা নিয়ে কথা বলা হলো—

  • ধরো তোমাকে ঘ’টি পূর্ণ সংখ্যা দেওয়া হলো। তুমি একটি অ্যারেতে সংখ্যাগুলোকে ইনপুট নিলে। ধরো সংখ্যাগুলো কোনো পরীক্ষার নম্বর, কাজেই সব সময় ০ থেকে ১০০-এর মধ্যে থাকবে। এখন তোমার কাছে জানতে চাওয়া হলো, কোন নম্বর কত জন করে শিক্ষার্থী পেয়েছে। এ কাজ আমরা অ্যারে ব্যবহার করে চমৎকারভাবে করতে পারি। একটু চিন্তা করে দেখো।

  • তোমাকে অনেকগুলো নম্বর দেওয়া হয়েছে। এই নম্বরগুলোকে বড় থেকে ছোট আকারে সাজাতে হবে।

  • ১ থেকে ১০০,০০০-এর মধ্যে যে সংখ্যাগুলো মৌলিক, সে সংখ্যাগুলো আউটপুট দিতে হবে।

চট করে এই সমস্যাগুলো হয়তো সমাধান করতে পারবে না, এর জন্য কিছুটা সময় দিতে হবে। প্রথমে অ্যারের অন্যান্য কিছু সমস্যা সমাধান করে হাত পাকাও, তারপর এই সমস্যাগুলো চেষ্টা করো।