সি/সি++ প্রোগ্রামিং টিউটোরিয়াল (পর্ব ১১) স্ট্রিং (২)

0
297

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

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

অ্যারে ডিক্লেয়ার করার সিনটেক্স : data_type array_name[array_size]

এখানে ডাটা টাইপ হলো অ্যারের ডাটা টাইপ অর্থাৎ কোন ধরনের ভেরিয়েবলের অ্যারে ডিক্লেয়ার করা হচ্ছে তা বলে দেয়া। অ্যারের নাম হলো যেকোনো ভেরিয়েবলের নাম। এখানে নতুন বিষয় হলো অ্যারে সাইজ। আমরা জানি অ্যারে হলো অনেকগুলো ভেরিয়েবলের সমষ্টি। সুতরাং কতগুলো ভেরিয়েবল নিয়ে অ্যারে ডিক্লেয়ার করা হচ্ছে সেটা বলতে হবে। সাইজ যত হবে ততগুলো ভেরিয়েবল নিয়ে অ্যারে গঠিত হবে। যেমন : int prime[10], valid[5]; ইত্যাদি। এখানে একই সাথে প্রাইম নামে দশটি, ভ্যালিড নামে পাঁচটি ইন্টেজার ডিক্লেয়ার করা হয়েছে।
অ্যারের এলিমেন্ট বলতে বোঝায় তার সাইজ কত।

যদি অ্যারের সাইজ ৫ হয়, তার মানে অ্যারের এলিমেন্ট সংখ্যা হলো ৫। অর্থাৎ পাঁচটি ভেরিয়েবল নিয়ে অ্যারেটি গঠিত। অ্যারে ডিক্লেয়ার করার সময় সাইজ হিসেবে যে শুধু সংখ্যাই ব্যবহার করা যাবে, এমন কোনো কথা নেই। ইউজার ইচ্ছে করলে কোনো ভেরিয়েবল অথবা কনস্ট্যান্টও ব্যবহার করতে পারেন। বড় প্রোগ্রামের ক্ষেত্রে যখন একই সাইজবিশিষ্ট একাধিক অ্যারে ব্যবহারের প্রয়োজন হয়, তখন কনস্ট্যান্ট ব্যবহার করে অ্যারে ডিক্লেয়ার করাই ভালো। কারণ যদি প্রোগ্রামের কোনো ভুল হয় অথবা কোনো কিছু পরিবর্তনের জন্য অ্যারেগুলোর সাইজ পরিবর্তনের দরকার হয়, তাহলে কষ্ট করে প্রতিটি অ্যারের ডিক্লারেশনে এডিট না করে শুধু কনস্ট্যান্টের মান পরিবর্তন করলেই হয়। যেমন :
….
#define array_size 5;
….
int a1[array_size];
int a2[array_size];

অ্যারের প্রতিটি এলিমেন্ট আলাদাভাবে নিয়ন্ত্রণ করা যায়। যেমন : int piyal[5]; এ অ্যারেটি ডিক্লেয়ার করা হলে পাঁচটি ইন্টিজার ভেরিয়েবল পর পর ডিক্লেয়ার হবে। যাদের সাধারণ নাম থাকবে ঢ়রুধষ। কিন্তু চাইলে তাদেরকে আলাদা আলাদাভাবে ব্যবহার করা যাবে। উপরের অ্যাড্রেস অ্যারেকেও একই নিয়ম অনুসারে আলাদা আলাদাভাবে ব্যবহার করা হয়েছে। আমরা জানি অ্যারে ডিক্লেয়ার করার সময় বন্ধনীর মাঝে অ্যারের সাইজ উলেস্নখ করে দিতে হয়। এই বন্ধনী অনেকভাবে ব্যবহার করা যেতে পারে। মনে রাখতে হবে অ্যারে যখন ডিক্লেয়ার করা হয় শুধু তখনই বন্ধনীটি অ্যারের সাইজ নির্ধারণের জন্য ব্যবহার হয়। অন্য সময় অ্যারের ইন্ডেক্সিংয়ের জন্য এই বন্ধনী ব্যবহার করা হয়। ইন্ডেক্সিং বলতে বোঝায় প্রতিটি এলিমেন্টকে আলাদাভাবে শনাক্তকরণ।

উপরে piyal[5] ভেরিয়েবলটি ডিক্লেয়ার করা হলে মেমরিতে পরপর piyal[0], piyal[1], piyal[2], piyal[3], piyal[4] নামে পাঁচটি ভেরিয়েবল অ্যালোকেট করা হবে। এখন বন্ধনী ব্যবহার করে এ পাঁচটি ভেরিয়েবলকে আলাদাভাবে নিয়ন্ত্রণ করা সম্ভব। যেমন : এখন যদি লেখা হয় piyal[0]=10; তাহলে অ্যারের প্রথম এলিমেন্টটির মান ১০ নির্ধারিত হবে। piyal[0]=piyal[0]*piyal[1]; এই স্টেটমেন্টটি লিখলে প্রথম ও দ্বিতীয় এলিমেন্টের মান গুণ করে প্রথম এলিমেন্টে রাখা হবে। তবে এ ক্ষেত্রে দ্বিতীয় এলিমেন্টের মান যেহেতু গারবেজ, তাই গুণফলও গারবেজ আসবে।

অ্যারে ব্যবহারে সবচেয়ে বেশি যে ভুলটি হয় তা হলো সাইজ ও ইন্ডেক্সের সমস্যা। এটি সবসময় খেয়াল রাখতে হবে সাইজ ও ইন্ডেক্সের ব্যবহারের সিনটেক্স একই হলেও এরা ভিন্ন জিনিস। উভয়ই [] বন্ধনীর মাধ্যমের ব্যবহার হয়। কিন্তু অ্যারে সাইজ বলতে বোঝায় যে অ্যারেতে কতগুলো এলিমেন্ট থাকবে। আর ইন্ডেক্স দিয়ে অ্যারের এলিমেন্টগুলোকে অ্যাড্রেস করা হয়। প্রোগ্রামিং ল্যাঙ্গুয়েজে যেকোনো কিছুর অ্যাড্রেসিং ০ থেকে আরম্ভ হয়। তাই অ্যারের সাইজ ৫ হলেও পঞ্চম এলিমেন্টের ইন্ডেক্স হবে ৪। যেমন : int a[5]; এখানে পাঁচটি এলিমেন্টবিশিষ্ট একটি অ্যারে ডিক্লেয়ার করা হয়েছে। কিন্তু অ্যারেটির প্রথম এলিমেন্টের নাম a[0] ও শেষ এলিমেন্টের নাম a[4], a[5] নামে কোনো এলিমেন্ট নেই।

অ্যারের এলিমেন্টকে কোনো আইডেন্টিফায়ার দিয়েও ইন্ডেক্সিং করা যায়। তবে খেয়াল রাখতে হবে ইন্ডেক্সিং করার আগে আইডেন্টিফায়ারের মান যেনো নির্ধারণ করা হয় এবং সংশিস্নষ্ট মানের এলিমেন্ট যেনো অ্যারেতে উপস্থিত থাকে। যেমন : i=3; a[i]=30; এখানে অ্যারের ইন্ডেক্সিং করা হয়েছে একটি আইডেন্টিফায়ার দিয়ে। আর এ ক্ষেত্রে অ্যারের চতুর্থ এলিমেন্টের মান পরিবর্তন হচ্ছে। তবে এর মান ০ থেকে ৪-এর বাইরে হলে এরর দেখাবে। কারণ অ্যারেতে ০ থেকে ৫ পর্যমত্ম ইন্ডেক্সের এলিমেন্ট আছে। এররটি আবার লজিক্যাল এরর হবে। অর্থাৎ সেটি কম্পাইলের সময় ধরা নাও পড়তে পারে। অ্যাড্রেস ভেরিয়েবলের ক্ষেত্রেও আইডেন্টিফায়ার হিসেবে ব্যবহার করা হয়েছে। কিন্তু সেখানে কখনও লজিক্যাল এরর দেখাবে না, কারণ এর মান ০ থেকে strlen(_address) পর্যন্ত।

স্ট্রিংয়ের ব্যবহার পরিধি অনেক বিসত্মৃত বলে এর অনেক ফাংশন বানানো হয়েছে। এসব ফাংশন ব্যবহারের মাধ্যমে স্ট্রিং দিয়ে অনেক জটিল কাজ সহজে সমাধান করা যায়।

LEAVE A REPLY

14 + 16 =