প্রোগ্রামিং ল্যাঙ্গুয়েজ দিয়ে অনেক জটিল ধরনের হিসাব-নিকাশ করা যায়। আর এর জন্য অত্যন্ত গুরুত্বপূর্ণ উপাদান হলো ভেরিয়েবল, যা হাই লেভেল ল্যাঙ্গুয়েজের একটি অন্যতম বৈশিষ্ট্য।
ভেরিয়েবল
কমপিউটার জটিল কাজ করে হিসাব-নিকাশের মাধ্যমে। যেমন-এমন একটি প্রোগ্রাম লেখা হলো, যার কাজ হবে দুটো সংখ্যার যোগফল বের করা। তাহলে প্রোগ্রামে প্রয়োজনীয় নির্দেশ দিতে হবে। এখন এই নির্দেশ কিভাবে দেয়া হবে তা নির্ভর করে প্রোগ্রামিং ল্যাঙ্গুয়েজের ওপর। কোনো সংখ্যা নিয়ে কাজ করার জন্য প্রথমে সেই সংখ্যাকে কমপিউটারের মেমরিতে রাখতে হবে। অর্থাৎ কমপিউটারের হিসাব করা পদ্ধতিটা এরকম যে, প্রথমে মেমরিতে ১ সংখ্যাটি রাখা হলো। তারপর মেমরির আরেক জায়গায় ২ সংখ্যাটি রাখা হলো। এবার সংখ্যা দুটির যোগফল বের করে সেই যোগফল মেমরির আরেক জায়গায় রাখা হলো। এবার যদি ইউজার চায় যে যোগফলটি প্রিন্ট করবে অর্থাৎ মনিটরে দেখানো হবে তাহলে প্রয়োজনীয় নির্দেশ দিয়ে সেটা করা যাবে। অথবা ইউজার চাইলে অন্য কোনো কাজও করতে পারেন। কিন্তু যে সংখ্যাগুলো মেমরিতে রাখা হলো, এই কাজটি অতটা সোজা নয়। কমপিউটারের র্যা ম হলো প্রধান মেমরি এবং এখানেই কমপিউটার সব ডাটা রাখে এবং তা ব্যবহার করে বিভিন্ন কাজ সম্পাদন করে। র্যামমে অসংখ্য মেমরি সেল থাকে এবং এই সেলগুলোই হলো মেমরির গঠনগত একক। প্রতিটি সেলেরই একটি নির্দিষ্ট অ্যাড্রেস থাকে। সংখ্যাগুলো এসব নির্দিষ্ট সেলে রাখা হয়। এখন যে সংখ্যাগুলো মেমরিতে রাখা হচ্ছে এর মূল পদ্ধতি হলো প্রথমে প্রোগ্রামে একটি সংখ্যা ডিক্লেয়ার করে তার জন্য একটি নির্দিষ্ট অ্যাড্রেস নির্ধারণ করে দেয়া। কিন্তু এই কাজটি অত্যন্ত ঝামেলাপূর্ণ, কেননা র্যাযমে লাখ লাখ মেমরি সেল থাকে। এই ঝামেলা দূর করার জন্য যে জিনিসটি ব্যবহার করা হয় তা হলো ভেরিয়েবল, যা হাই লেভেল ল্যাঙ্গুয়েজের একটি বৈশিষ্ট্য। যেমন- সি-তে যদি a, b, c নামের তিনটি ভেরিয়েবল ডিক্লেয়ার করা হয় তাহলে প্রোগ্রাম নিজ থেকেই এই তিনটি ভেরিয়েবলের জন্য মেমরিতে আলাদা জায়গা নির্ধারণ করে দেবে। তখন ইউজারের কাজ হবে খালি এই ভেরিয়েবলের জন্য মান নির্ধারণ করে দেয়া। ব্যাপারটা আরেকটু সহজে বলা যায়, কোনো ভেরিয়েবল a ডিক্লেয়ার করার মানে হলো প্রোগ্রাম যেকোনো একটি মেমরি সেল নির্বাচন করবে এবং সেই সেলটির নাম দেবে a। এখানে ইউজারকে আর কষ্ট করে অ্যাড্রেস নিয়ে কাজ করতে হবে না।
ভেরিয়েবলের নামকরণ
প্রোগ্রামে প্রয়োজনানুসারে এক বা একাধিক ভেরিয়েবল ডিক্লেয়ার করা যায় এবং ইউজার সেই ভেরিয়েবলের নাম নিজের ইচ্ছেমতো দিতে পারেন। কিন্তু এই নামকরণে কিছু নিয়ম মেনে চলতে হয়। যেমন- কোনো ভেরিয়েবল ডিক্লেয়ার করার সময় চারটি দিক সবসময় খেয়াল করতে হবে। ০১. কোনো ভেরিয়েবলের প্রথম অক্ষর কখনও কোনো সংখ্যা হতে পারবে না। ০২. ভেরিয়েবলের নামে underscore (_) এবং dollar sign ($) ছাড়া অন্য কোনো বিশেষ চিহ্ন ব্যবহার করা যাবে না। ০৩. ভেরিয়েবলের নামের মাঝে কোনো ফাঁকা জায়গা থাকতে পারবে না অর্থাৎ ভেরিয়েবলের নাম সবসময় একটি শব্দ হতে হবে। ০৪. সি-তে কোনো keyword-এর নাম ভেরিয়েবলের নাম হিসেবে ব্যবহার করা যাবে না। এখানে keyword কি, তা আমরা পরে জানতে পারব। উদাহরণ হিসেবে integer_type, auto_key, var1 ইত্যাদি ভেরিয়েবলের নাম হতে পারে।
ডাটা টাইপ
প্রোগ্রামিং ল্যাঙ্গুয়েজে ডাটা টাইপ অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। ডাটা টাইপ হলো একটি ভেরিয়েবল কি ধরনের ডাটা নিয়ে কাজ করবে তা ঠিক করে দেয়া। যেমন- কোনো ভেরিয়েবলের ডাটা হতে পারে কোনো পূর্ণসংখ্যা (যেমন- ৪২, ৫৩ ইত্যাদি), কোনো ভগ্নাংশ (যেমন- ৮.১৪ ইত্যাদি) অথবা কোনো অক্ষর বা character (যেমন- a, b, c ইত্যাদি)। সি-তে প্রধানত ৪ ধরনের ডাটা টাইপ থাকে। এগুলো হলো character (লিখতে হয় char), integer (লিখতে হয় int), float, double। এখন দেখা যাক কোন ডাটা টাইপের জন্য মেমরিতে কী পরিমাণ জায়গা নির্ধারণ করা হয়। প্রথমে বলা দরকার, মেমরির জায়গার ক্ষুদ্রতম একক হলো বিট। ৮ বিটে ১ বাইট, ১০২৪ বাইটে ১ কিলোবাইট, ১০২৪ কিলোবাইটে ১ মেগাবাইট, ১০২৪ মেগাবাইটে ১ গিগাবাইট ইত্যাদি। char টাইপ ডাটার জন্য ১ বাইট নির্ধারণ হয় এবং এ ধরনের ভেরিয়েবলে শুধু character রাখা যায়। int টাইপ ডাটার জন্য ২ বাইট নির্ধারণ হয় এবং এ ধরনের ভেরিয়েবলে শুধু পূর্ণসংখ্যা রাখা যায়। কিন্তু এই সংখ্যার মানের একটি লিমিট আছে। ৩২ বিটে কাজ করলে একেটটা ভেরিয়েবলে -৩২৭৬৮ থেকে +৩২৭৬৭ পর্যন্ত মান রাখা যায়। এটি বের করার একটি সূত্র আছে, তা হলো -2^n থেকে 2^n-1 পর্যন্ত। এখানে n হলো মোট বিটসংখ্যা। একটি int টাইপ ভেরিয়েবল মোট ২ বাইট (১৬ বিট) জায়গা নেয়। তাহলে একটি সাধারণ int ভেরিয়েবলের মানের সীমা 2^15 থেকে 2^15-1 পর্যন্ত। এখানে খেয়াল রাখতে হবে ভেরিয়েবল যদিও ১৬ বিট জায়গা নিচ্ছে, কিন্তু সেটি ব্যবহার করছে ১৫ বিট এবং সবার বাম দিকের ১টি বিট ব্যবহার করা হয় ভেরিয়েবলটির মান ধনাত্মক না ঋণাত্মক সেটা নির্ধারণ করার জন্য। float-এর জন্য ৪ বাইট নির্ধারণ হয় এবং এতে ভগ্নাংশ রাখা যায়। double এও ভগ্নাংশ রাখা যায়, তবে তা ৮ বাইট জায়গা নেয়।
ভেরিয়েবল ডিক্লেয়ারেশন
কোনো ভেরিয়েবল ডিক্লেয়ার করার সাধারণ নিয়ম হলো data type_name;। যেমন- int id_no; float mark; ইত্যাদি। তবে একই ধরনের অনেকগুলো ভেরিয়েবল ডিক্লেয়ার করতে হলে বারবার ডাটা টাইপ লিখতে হয় না। যেমন- int id, batch, code; এখানে তিনটি ভেরিয়েবল ডিক্লেয়ার করা হয়েছে এবং এদের ডাটা টাইপ একই ধরনের। আবার কোনো ভেরিয়েবল ডিক্লেয়ার করার সময় তার মান নির্ধারণ করে দেয়া যায়। যেমন- int id=248;। ভেরিয়েবল ডিক্লেয়ার করার সময় একই নাম একাধিকবার ব্যবহার করলে কম্পাইলার এরর দেখাবে। আর প্রোগ্রামে কোনো ভেরিয়েবল ব্যবহার করার জন্য অবশ্যই তাকে আগে ডিক্লেয়ার করে নিতে হবে। তা না হলে কম্পাইলার এরর দেখাবে। সবসময় কোনো প্রোগ্রামের শুরুতে ভেরিয়েবল ডিক্লেয়ার করা উচিত, অন্যথায় মাঝেমধ্যে এরর দেখাতে পারে।
ভেরিয়েবল ইনপুট
আমরা জানি scanf() ফাংশন দিয়ে কোনো ডাটা ইনপুট নেয়া যায়। কিন্তু বিভিন্ন টাইপের ভেরিয়েবলের জন্য ভিন্ন ধরনের কোড লিখতে হয়। scanf() ফাংশনের ভেতরে একটা format_specifier দিতে হয়, যাতে কম্পাইলার বুঝতে পারে যে ইউজার কোন ধরনের ডাটা ইনপুট দিচ্ছেন। একটি int টাইপের ভেরিয়েবলের ইনপুট নেয়ার স্টেটমেন্ট হলো scanf(‘‘%d’’,&a); এখানে ডাবল কোটেশনের ভেতরে %d ব্যবহার করা হয়েছে এবং এর মাধ্যমেই কম্পাইলার বুঝতে পারে যে কোন টাইপের ডাটা ইনপুট দেয়া হচ্ছে। char-এর জন্য %c, int-এর জন্য %d, float, double-এর জন্য %f ব্যবহার করা হয়। আর a ভেরিয়েবলের আগে যে & ব্যবহার করা হয়েছে এর নাম অ্যাড্রেস অপারেটর। এর মাধমে a ভেরিয়েবলটির জন্য মেমরিতে যে অ্যাড্রেস নির্ধারণ করা হয়েছে তা কম্পাইলারকে জানানো হয়। অর্থাৎ ওপরের স্টেটমেন্টের মানে হলো এই, প্রথমে ইউজার একটি int টাইপের ডাটা ইনপুট দিলেন এবং &a দিয়ে এটাও বলে দেয়া হলো যে ইনপুট নেয়া সংখ্যাটি a ভেরিয়েবলের অ্যাড্রেসে রাখা হোক বা a ভেরিয়েবলে রাখা হোক।
ভেরিয়েবল আউটপুট/প্রিন্ট
আমরা জানি কোনো কিছু প্রিন্ট করার জন্য যে ফাংশন ব্যবহার করা হয় তা হলো printf();। কোনো ভেরিয়েবলকে প্রিন্ট করতে হলে ডাবল কোটেশনের ভেতরে f_s রাখতে হয় এবং কোটেশনের বাইরে কমা দিয়ে ভেরিয়েবলের নাম লিখতে হয়। যেমন- printf (‘‘%d%d\n’’, a, b); এই স্টেটমেন্ট দিয়ে দুটি ভেরিয়েবলের প্রিন্ট করার কমান্ড দেয়া হচ্ছে। ডাবল কোটেশনের ভেতরে দুটো ভেরিয়েবল a এবং b-এর জন্য দুটো f_s ব্যবহার করা হয়েছে এবং কোটেশনের বাইরে কমান্ড দিয়ে ভেরিয়েবল দুটির নাম লেখা হয়েছে। এখানে লক্ষণীয়, প্রথম f_s টি প্রথম ভেরিয়েবল অর্থাৎ a-এর জন্য কাজ করবে এবং দ্বিতীয়টি পরের ভেরিয়েবল অর্থাৎ b-এর জন্য কাজ করবে। আর \n দিয়ে নিউ লাইন বোঝায়। অর্থাৎ যখন এটি প্রিন্ট করা হবে তখন cursor নিচের লাইনে চলে যাবে।
এবারে একটি প্রোগ্রাম উদাহরণ হিসেবে দেয়া হয়েছে, যাতে ভেরিয়েবলের ব্যবহার ভালোভাবে বোঝা যায়।
#include
#include
int main()
{
int a,b,c;
char ch;
printf(‘‘enter two integers:\n’’);
scanf(‘‘%d%d’’, &a, &b);
c=a+b;
printf(‘‘enter any character:\n’’);
scanf(‘‘%c’’, &ch;);
printf(‘‘sum of the two integers are: %d\n’’, c);
printf(‘‘your entered character is %c\n’’, ch);
getch();
return 0;
}
কজ ওয়েব
ফিডব্যাক : wahid_cseaust@yahoo.com