স্ট্রাকচার

Structuresসি প্রোগ্রামিং এর দারুণ একটা বিষয়। আমরা ডেটা টাইপ সম্পর্কে জানি, int, char, float ইত্যাদি। Structures দিয়ে আমরা নিজেদের মত করে ডেটা স্ট্রাকচার তৈরি করে নিতে পারি। যেমন অ্যারে হচ্ছে একটা ডেটা স্ট্র্যাকচার। যেখানে শুধু আমরা একই ডেটা টাইপ এর ডেটা রাখতে পারি। কিন্তু স্ট্র্যাকচার তৈরি করে আমরা এক সাথে int, char, float ইত্যাদি ভিন্ন ভিন্ন ডেটা এক সাথে রাখতে পারি। নিজেদের প্রয়োজন মত, ইচ্ছে মত।

int অ্যারেতে শুধু ইন্টিজার ভ্যালুই রাখতে পারব। char অ্যারেতে শুধু কারেকটারই রাখতে পারব। কিন্তু Structures ব্যবহার করে আমরা নিজেদের মত করে ডেটা স্ট্রাকচার তৈরি করতে পারব। এবং ঐখানে ইচ্ছে মত একের অধিক ভিন্ন ভিন্ন ডেটা রাখতে পারব। কাজেই Structure হল সি ল্যাংগুয়েজের একটি User Defined Data Type, যেখানে int, float, char ইত্যাদি হল Built-in Data Type.

Structures নিচের মত করে ডিফাইন করা হয়।

struct book
{
int no;
char name;
};

struct কীওয়ার্ড দিয়ে Structures ডিফাইন করা হয়। এরপর লিখছি book, যা হচ্ছে আমাদের নিজস্ব স্ট্র্যাকচারের নাম। এরপর দ্বিতীয় ব্র্যাকেটের মধ্যে স্ট্র্যাকচারের মেম্বার গুলো। এখানে একটা মেম্বার হচ্ছে ইন্টিজার, যেখানে আমরা বই এর ক্রমিক নাম্বার রাখব। আরেকটা হচ্ছে কারেকটার, যেখানে আমরা বইটির নাম রাখব।

Structures ডিফাইন করার পর তা ব্যবহার করার জন্য ডিক্লেয়ার করতে হয়। একটা ইন্টিজার ভ্যারিয়েবল ব্যবহারের জন্য যেমন আগে তা ডিক্লেয়ার করতে হয়, তেমনি।

ডিক্লেয়ার করার জন্য নিচের মত করে লিখতে হয়ঃ struct book myBook;

যেখানে struct দিয়ে বুঝায় আমরা একটা স্ট্র্যাকচার ডিক্লেয়ার করতে যাচ্ছি, এরপর book, যা দিয়ে বুঝাচ্ছে আমরা কোন struct টা ডিক্লেয়ার করতে যাচ্ছি। এরপর হচ্ছে আমরা কি নামে আমাদের তৈরি স্ট্র্যাকচারটা ব্যবহার করব।

ডিক্লেয়ার করার পর স্ট্র্যাকচার ব্যবহার করতে হবে। তো আমরা আমাদের তৈরি myBook স্ট্র্যাকচার ব্যবহার করব।

myBook এর দুইটা মেম্বার। একটা হচ্ছে no আরেকটা name.

এখন আমরা বই এর নাম্বার এবং নাম সেট করব। তার জন্য লিখতে হবেঃ myBook.no = 3; myBook.name = ‘C’;

এবার আমাদের সেট করা বই এর নাম এবং নং প্রিন্ট করতে চাইলেঃ

printf( "Book No : %dn", myBook.no);
printf( "Book Name : %cn", myBook.name);

আমরা ছোট ছোট কোড লিখেছি, এবার পুরো প্রোগ্রামটি লিখে ফেলিঃ

typedef ব্যবহার করে আমরা আমাদের স্ট্র্যাকচারের instanc তৈরি করার সময় struct কীওয়ার্ড ব্যবহার ছাড়াই আমাদের তৈরি স্ট্র্যাকচার ব্যবহার করতে পারি। তার জন্য আমাদের উপরের স্ট্যাকচারটা নিচের মত করে লিখতে হবেঃ

typedef struct {
int no;
char name;
} book;

আগের থেকে পার্থক্য হচ্ছে আমরা এখানে নতুন একটা কীওয়ার্ড ব্যবহার করেছি, typedef। তারপর লিখছি struct। এবং আমাদের স্ট্র্যাকচারের একবারে শেষের দিকে লিখেছি আমাদের স্ট্যাকচারের নাম।

এখন আমরা আমাদের এই book স্ট্র্যাকচারের instance তৈরি করার জন্য struct কীওয়ার্ড ব্যবহার ছাড়াই তৈরি করতে পারব, যেমনঃ book myBook;

যেভাবে আমরা একটা ভ্যারিয়েবল ডিক্লেয়ার করি, ঠিক সেভাবে। আগের প্রোগ্রামটা typedefব্যবহার করলে হয়ঃ

আচ্ছা, স্ট্রাকচার এর সুবিধে হচ্ছে একবার ডিফাইন করার পর ইচ্ছে মত instance তৈরি করে নিতে পারি আমরা। আগের দুইটি প্রোগ্রামে আমরা একটা স্ট্রাকচার ডিফাইন করেছি, এবং এরপর একটা মাত্র স্ট্রাকচার ডিক্লেয়ার করেছি। এখন আমরা আরেকটা প্রোগ্রাম লিখব, যেখানে একটা স্ট্রাকচারের তিনটে instance তৈরি করব।

book এর instance তৈরি করার সময় আমরা ভিন্ন ভিন্ন লাইনে না লিখে একই লাইনে লিখতে পারি। যেমনঃ

book book1;
book book2;
book book3;

এর পরিবর্তে আমরা লিখতে পারিঃ book book1,book2, book3;

আমরা book এর তিনটে instance তৈরি করেছি মাত্র। এবং ম্যানুয়ালি সব গুলো মেম্বারে ডেটা সেট করেছি। কিন্তু আমাদের এমন প্রোগ্রাম লিখতে হবে, যেখানে আমাদের ১০০ বা ১০০০ বা আরো বেশি instance তৈরি করতে হবে। তখন কি করব? এমন প্রোগ্রামটা দেখতে কি বিশ্রিই না দেখাবে, তাই না? কিন্তু না, আমরা এখানে কন্ডিশনাল ব্যবহার করতে পারব। লুপ দিয়ে সব গুলোতে ডেটা সেট করতে পারব। আবার লুপ দিয়ে সব গুলো থেকে ডেটা বের করে প্রিন্ট করতে পারব।

আমরা সিম্পল একটা প্রোগ্রাম লিখব এ জন্য। আসলে এ প্রোগ্রামটির জন্য স্ট্র্যাকচার ব্যবহার করতে হয় না। তারপর ও লুপ ব্যবহার করে কিভাবে স্ট্র্যাকচারের ভিন্ন ভিন্ন মেম্বার এক্সেস করতে হয়, তার একটা উদাহরণ দেখব।

প্রোগ্রামটিতে আমরা ০ থেকে ১০০ এর বর্গমুল [square root] এর একটা চার্ট তৈরি করব।

এখানে sqrt() হচ্ছে একটা লাইব্রেরী ফাংশান। যার মধ্যে একটা নাম্বার দিলে ঐ নাম্বারটির বর্গমূল রিটার্ন করে। বাকি কোড গুলো তো সহজ। প্রথমে আমরা for লুপ ব্যবহার করে আমাদের squareRoot1 এর বিভিন্ন মেম্বারে ডেটা সেট করেছি। এপর আবার লুপ দিয়ে সেগুলো প্রিন্ট করেছি। এবার তো আমরা স্ট্র্যাকচার ব্যবহার করে কমপ্লেক্স কোড লিখতে পারব, তাই না? শুভ প্রোগ্রামিং...