Variables to Structures

মনে করো বেলাল ও হেলাল দুই ভাই। তাদের উচ্চতা ও বয়স input (যোগান) নিয়ে সেগুলোই আবার output (ফলন) দিতে হবে। এই সমস্যাটি সমাধানের জন্য তুমি এক দম সহজভাবে প্রথমে স্বাভাবিক variableএর ধারণা ব্যবহার করে একটি program (ক্রমলেখ) লেখবে। একই সমস্যার জন্য তারপর তুমি আরেকটি program লেখবে structureএর ধারণা ব্যবহার করে।

#include <iostream>
#include <cstdlib>

using namespace std;

struct PersonType // structure ঘোষণা
{
	int Height;
	int Age;
};

int main()
{
	PersonType Belal, Helal; // variable ঘোষণা

	cout << "Enter Belal's height (cm) and age (yr): ";
	cin >> Belal.Height >> Belal.Age;	// dot খেয়াল করো

	cout << "Enter Helal's height (cm) and age (yr): ";
	cin >> Helal.Height >> Helal.Age;	// dot খেয়াল করো

	cout << "Belal's height and age: ";
	cout << Belal.Height << " cm and " << Belal.Age << " yr" << endl;

	cout << "Helal's height and age: ";
	cout << Helal.Height << " cm and " << Helal.Age << " yr" << endl;

	return EXIT_SUCCESS;
}

উপরে variableএর ধারণা ব্যবহার করে programটি লেখা হয়েছে। লক্ষ্য করো আমাদের চারটি variable (চলক) লাগবে। বেলাল ও হেলাল দুইজনের প্রত্যেকের জন্য দুটি করে variable, একটি উচ্চতার জন্য আর আরেকটি বয়সের জন্য। বাদ বাকি বিষয়গুলো সহজ input prompt (যোগান যাচনা) দিয়ে প্রথমে বেলালের তারপর হেলালের জন্য input নেয়া এবং output description (ফলন বর্ণনা) দিয়ে প্রথমে বেলালের ও পরে হেলালের জন্য output দেয়া।

উপরের program লেখতে গিয়ে আমরা প্রথমে দুই ভাইয়ের কথা ভেবেছি, তারপর তাদের উচ্চতা ও বয়সের কথা ভেবেছি। আর এভাবে চারটি variable নেয়া হয়েছে। এখানে variableগুলোর নাম দেয়া হয়েছে BelalHeight, HelalHeight, BelalAge, HelalAge। এখানে নাম দেখে আমাদের কাছে পরিষ্কার BelalHeight আর BelalAge এই দুইটি variable সম্পর্কযুক্ত যেহেতু তারা একই ব্যক্তির উচ্চতা ও বয়স। একইভাবে HelalHeight এবং HelalAgeও সম্পর্কযুক্ত। কিন্তু এই সম্পর্কগুলো কেবল আমাদের কাছে চোখের দেখায়, আসলে compilerএর কাছে বা programএর ভেতরে BelalHeight ও BelalAgeএর ভেতরে কোনো সম্পর্ক নাই, তারা স্রেফ দুটো আলাদা variable মাত্র। আমরা চাইলে তাদের নাম দিতে পারতাম x ও q, আর তখন নাম দেখে কোনোভাবে বোঝা সম্ভব হতো না যে তাদের ভেতরে এমনকি চোখের দেখায়ও কোনো সম্পর্ক আছে। আমরা চাই এই সম্পর্কগুলো আনুষ্ঠানিকভাবে পরিষ্কার করতে। এ ছাড়া আমরা BelalHeight এবং BelalAgeকে সবসময় একসাথে রাখাও নিশ্চিত করতে চাই, যদিও সেটা নিচের মতো করে variable declare (চলক ঘোষণা) করে করা যেতে পারে, কিন্তু সেখানেও চাই পরিষ্কার করে বলতে পারার আনুষ্ঠানিকতা। যদি এমন হয় যে BelalHeightএ access (অভিগমন) করার কাছাকাছি সময়েই আমাদের BelalAgeএও access করতে হয়, তাহলে তাদেরকে memoryতে এক সাথে কাছাকাছি রাখলে program দ্রুতগতির হয়।

int BelalHeight, BelalAge, HelalHeight, HelalAge;

উপরে আমরা যে চাওয়ার কথা বললাম সেটা আসলে একই ব্যক্তির উচ্চতা ও বয়সের সম্পর্ক আনুষ্ঠানিকভাবে বলতে পারার চাওয়া। এখানে আমাদের ভাবনা ঘুরছে নির্দিষ্ট ব্যক্তিকে কেন্দ্র করে। এই যে সরাসরি variable পর্যায়ে চিন্তা না করে আমরা এক স্তর উপরে গিয়ে ব্যক্তি পর্যায়ে চিন্তা করছি তারপর সবকিছুকে দেখতে চাইছি সেই ব্যক্তিকে ঘিরে, এই ব্যাপারটাই এখানে গুরুত্বপূর্ণ। আসলে চিন্তা করার সময় আমরা ব্যক্তিকে কেন্দ্র করেই করেছি, কিন্তু program লেখতে গিয়ে ব্যক্তির ব্যাপারটি আর পরিষ্কার করে বলা যায় নাই। এবার আমরা দেখবো কীভাবে ওই সম্পর্কটি পরিষ্কার করা যায়।

struct PersonType	// structure declaration
{
	int Height;
	int Age;
};

উপরের programএ দেখো আমরা একটি structure declare (কাঠামো ঘোষণা) করেছি, যেটার নাম PersonType। এর দুটো member variable (সদস্য চলক) আছে। আসলে এই বিষয়টি তুমি structured programmingএ structure পড়ার সময় জেনেছো। আমরা মোটামুটি সেটাই পুনরাবৃত্তি করছি। একটা structure ঘোষণা করার পরে, আমরা সেটিকে এক রকম data type (উপাত্ত প্রকরণ) হিসাবে বিবেচনা করতে পারি। আর তাই সেটা ব্যবহার করে আমরা variable define (চলক সংজ্ঞায়ন) করতে পারবো। নিচে এমন একটি উদাহরণ দেখানো হয়েছে।

PersonType Belal, Helal;	// variable define

উপরের মতো করে structure PersonType ধরণের Variable define করার পরে member variableগুলোকে access করতে চাইলে আমাদেরকে . dot operator ব্যবহার করতে হবে। যেমন Belal.Height ও Belal.Age লেখে আমরা যথাক্রমে Belalএর Height ও Ageএ access করতে পারবো। সব মিলিয়ে structure ব্যবহার করে আমরা পুরো programটি নিচে আবার দেখিয়েছি।

#include <iostream>
#include <cstdlib>

using namespace std;

struct PersonType // structure ঘোষণা
{
	int Height;
	int Age;
};

int main()
{
	PersonType Belal, Helal; // variable ঘোষণা

	cout << "Enter Belal's height (cm) and age (yr): ";
	cin >> Belal.Height >> Belal.Age;	// dot খেয়াল করো

	cout << "Enter Helal's height (cm) and age (yr): ";
	cin >> Helal.Height >> Helal.Age;	// dot খেয়াল করো

	cout << "Belal's height and age: ";
	cout << Belal.Height << " cm and " << Belal.Age << " yr" << endl;

	cout << "Helal's height and age: ";
	cout << Helal.Height << " cm and " << Helal.Age << " yr" << endl;

	return EXIT_SUCCESS;
}

যদিও আমরা এই পাঠে ব্যক্তি নিয়ে আলোচনা করেছি। আসলে object-oriented দৃষ্টিভঙ্গীতে আমরা ব্যক্তিকেও এক রকমের object হিসাবে ব্যবহার করবো। Object-oriented programmingএ যদিও পরে সবকিছু কেন্দ্রে থাকবে class (শ্রেণি), উপরের আলোচনায় আমরা দেখলাম structure কীভাবে আসলে আমাদেরকে সেই দিকে নিয়ে যেতে শুরু করে। C++এ class ও structureএর মধ্যে আসলে গুণগত কোনো পার্থক্য নেই, গঠনগত যতটুকু আছে সেটা খুবই নগন্য। Structure নিয়ে আলোচনা করতে করতেই আমরা আলগোছে এক সময় classএর আলোচনায় চলে যাবো। তুমি চাইলে structure বিষয়ে আগে যা শিখেছো সেগুলো আবার ভালো করে দেখে নিতে পারো।

(Visited 64 times, 1 visits today)

Leave Comments