Computers · October 14, 2021 2

5. Variable vs Data Type -3

এই পর্বে আমরা ভেরিয়েবল ও ডাটা টাইপ কে ব্যবহার করে কোড লেখা শিখবো। তার আগে স্ক্রীনের উপর কিছু প্রিন্ট করা শিখি:

১। #include<iostream> এর অর্থ হলো input output stream নামের একটা header file ইনক্লুড করো যেখানে cin, cout এসবের কার্যাবলি নিয়ন্ত্রনের হিসাব নিকাশ আগে থেকে লেখা আছে, iostream এর মধ্যে এর ফাংশান বা কার্যাবলি আগে থেকে লেখা আছে বলে একে pre processor directory ও বলা হয়।
২। using namespace std এর অর্থ হলো এমন একটা স্ট্যান্ডার্ড namespace ইউজ করতেছি যেখানে নানা রকম ডাটা টাইপ, cout, endl ইত্যাদি বিভিন্ন keyword কে চিনিয়ে দেওয়া আছে। আর std হলো standard এর সংক্ষিপ্ত রুপ।
৩। ৩ নাম্বার লাইন ফাকা রেখে কোডটাকে দর্শনধারী বানানোর চেষ্টা করা হয়েছে অর্থাৎ কোড টা দেখে যেন পড়া যায় এবং তার মর্মোদ্ধার করা যায়, এজন্য ইন্ডেনটেশনের ব্যাপারটা খুব গুরুত্বপূর্ণ।
৪। ৪ নাম্বার লাইনে আছে আমাদের আসল বস বা main boss কারন কম্পাইলার যেকোনো কোডকে main function থেকেই পড়তে শুরু করে আর মেইন ফাংশনের কমান্ড অনুসরন করে কাজ করতে থাকে অর্থাৎ main function এ যখন যা করতে বলা হয় সে তখন তাই করতে থাকে।
৫। তো আমাদের মহান কম্পাইলার সর্বাগ্রে মেইন ফাংশনের মধ্যে ঢুকলো আর ঢুকেই দেখল :

cout<<“welcome to our dream world\n”;

এখানে cout হলো character output অর্থাৎ (<<) এই চিহ্নের পর থেকে (;) এর আগ পর্যন্ত যা যা কমান্ড দেওয়া হইছে সেগুলোর আউটপুট দেখাও বা প্রিন্ট করো আর কোটেশন মার্কের মধ্যে যা আছে তা হুবহু প্রিন্ট করো (ধন্যবাদ)।
আর একটা ‌‌‌\n এর অর্থ হলো একটা নিউ লাইন প্রিন্ট করো, দুইটা তিনটা \n মানে হলো দুইটা তিনটা নতুন লাইন প্রিন্ট করো। আর (;) এর অর্থ হলো “আমার যা বলার ছিলো বলা তো হলো” এখন তুমি বাক্যটা শেষ করে সমাপ্তি ঘোষণা করো।
তো এই কমান্ড দেখার পর কম্পাইলার স্ক্রিনের উপর প্রিন্ট করবে welcome to our dream world আর তারপর ‌\n কে দেখে একটা নতুন লাইন প্রিন্ট করবে।
৬। return 0 এর অর্থ হলো অনেক ঘ্যানর ঘ্যানর হইছে এখন কোড পড়া শেষ করে আামাকে উদ্ধার করো অর্থাৎ এটা হলো প্রোগ্রামের exit code.
এখন নিচের কোড টা আবার দেখলে আরো ক্লিয়ারলি বুঝতে পারবো:

এখন আমরা আরেকটা কোড লিখি:
আমাদের সবার প্রিয় ডেটা টাইপ তো int যিনি হলেন integer এর সংকুচিত মানে সংক্ষিপ্ত রুপ যার অর্থ পূর্ণসংখ্যা। এসব আমরা আগের পর্বে শিখে এসেছি। এখন তাহলে আমরা ২টা পূর্ণসংখ্যা যোগ করার কোড লিখি এবং সেই সাথে variable declaring ও assigning ও শিখে ফেলি:

#include<iostream> // input output stream নামের হেডার ফাইল ইনক্লুড করলাম
using namespace std; // একটা স্ট্যান্ডার্ড নেইমস্পেস ইউজ করতেছি

int main() // সবার আগে এখান থেকে কোড পড়া শুরু করো
{
int a, b; // variable declare করলাম
a = 5, b = 10; // variable a, b এর মধ্যে ডাটা assign করলাম
int sum = a+b; // a আর b কে যোগ করে sum এর মধ্যে রাখলাম
cout<<“The sum is: “<<sum<<endl; // প্রোগ্রামের আউটপুট প্রিন্ট করো
return 0;
}

কোডটা সবাই যার যার IDE বা কোড লেখার সফ্টওয়ারে লিখে কম্পাইল করে ফেলো (প্রগ্রামিং শিখতে হলে কিন্তু নিজে নিজে কোড লেখাই লাগবে, কারন “How to ride a bicycle” বই এর এ টু জেড মুখস্ত করে ফেল্লেই যেমন সাইকেল চালানো শেখা যায়না, তেমনি নিজে কোড না লিখে সারাদিন ধরে শুধু পড়ে গেলেই কোডিং শেখা যাবেনা )
আচ্ছা তো কোডটা ঠিকঠাক ভাবে লিখে কম্পাইল ও রান করলে a আর b এর যোগফল হিসেবে ৫+১০ = ১৫ পাবো আর ফাইনালি কি আউটপুট পাবো
সেটা ভাবি প্রোগ্রামারদের (ভাবি means future not ভাওয়াল বিশ্ববিদ্যালয়) বিচার বিশ্লেষণ করে দেখার জন্য টাস্ক দেয়া হলো।

এখন নিচের কোডটা গভীর মনোযোগ দিয়ে দেখি:

আচ্ছা এখানে আসলে ঘটতেছে টা কি? এখানে main function এর মধ্যে প্রথমে integer টাইপের a নামের একটা কিউট variable নিলাম যার মধ্যে ১০ পূর্ণ সংখ্যাকে রাখলাম তো একই ভাবে b নামের আরেকটা কিউট variable নিয়ে তার মধ্যে পূর্ণ সংখ্যা ২০ কে রাখলাম এখন এই ১০ আর ২০ কে যোগ করে sum নামের আরেকটা কিউট variable এর মধ্যে রাখলাম এবং তারপর cout কমান্ড এর মাধ্যমে এই sum কে প্রিন্টআউট করতে বললাম, আসলে sum এর মধ্যে রাখা ১০+২০ = ৩০ কে প্রিন্ট করতে বললাম।

সবগুলো ছবির প্রত্যেকটা কমান্ড আর পাশের রেড লেটারের ব্যাক্ষা গুলো খুব মনোযোগ দিয়ে শিখতে হবে, তাহলে অনেক কিছুই ফিল করা যাবে তাই কোড লিখতেও অনেক ভালোলাগবে।

এখন নিচের ছবিটি আরো বেশি মনোযোগ দিয়ে দেখি:

এখানে integer type এর data রাখার জন্য a ও b নামের দুইটা variable নিয়েছি আর d ও e নামের দুইটা variable নিয়েছি double type এর ডাটা রাখার জন্য। তো a আর b এর মধ্যে দুইটা পূর্ণসংখ্যা ১২ ও ৫ নিলাম, d ও e এর মধ্যে দুইটা দশমিক সংখ্যা ২.৩৪ ও ১০.৩৪২ নিলাম। আবার character type এর ডাটা T কে ch এর মধ্যে রেখেছি, এখন এই সমস্ত ডাটা প্রয়োজন মতো ব্যবহার করে আমরা নিজেদের কার্যোদ্ধার করতে পারি।
আচ্ছা আমরা যদি int এর মধ্যে double type এর আর double এর মধ্যে integer type এর ডাটা রাখি তাহলে কি হবে? তাহলে কি হবে সেটা সবাই নিজেরা নিজেরা চেক করে দেখতে পারো (কিউরিওসিটি বাড়াতে হবে বস)

ওকেই এখানে (উপরের চিত্রে) আমরা মূল প্রোগ্রামসহ আউটপুটের দিকে একটু বিশেষ নজর দিই:
এখানে প্রথমে a এর মধ্যে ১০ কে রাখলাম, তারপর a কে b এর মধ্যে রাখলাম। খুব ভালো কথা। a এর মধ্যে যেহেতু ১০ কে রেখেছি এবং প্রথম লাইনে a কে প্রিন্ট করতে বলেছি তাই আউটপুটের প্রথম লাইনে ১০ প্রিন্ট করেছে, তারপর a এর মধ্যে রাখা সেই ১০ কে আবার b এর মধ্যে রেখেছি তাই ২য় লাইনে b এর ১০ কে প্রিন্ট করেছে। এটাও খুব ভালো কথা, কিন্তু ১১নং লাইনে আবার b এর মধ্যে ২০ রেখেছি , এখন এই ২০ ওই আগের ১০ এর জায়গা দখল করেছে অর্থাৎ আগের ১০ এর উপর পরের ২০ ওভাররাইট হয়েছে তাই একেবারে শেষ লাইনে b এর ফাইনাল ভ্যালু হিসেবে ২০ কে প্রিন্ট করেছে।

এখন তো আমরা variable ডিক্লেয়ার করা এবং তার মধ্যে ডাটা রেখে সেগুলোকে ব্যবহার করাও শিখে গিয়েছি। এখন তাহলে arithmetic operation গুলো চট করে দেখে নিই:

:: আমার একটা প্রশ্ন আছে
:- বলে ফেলো
:: এতক্ষন তো আমরা ভ্যারিয়েবলের মধ্যে ৫, ১০, ২০ এভাবে ফিক্সড ভ্যালু অ্যসাইন করতেছিলাম, কিন্তু যদি আমার ৫, ১০, ২০ কে আর ভালো না লাগে বা প্রয়োজন মতো ভিন্ন ভিন্ন ভ্যালুর দরকার হতে পারে তখন আমার কি হবে? আমি কি বারবার কোড এডিট করে ভ্যালু গুলো চেইন্জ করব? কোড যদি অনেেেেেেক বড় হয় তাহলে তো ঐ ভ্যালু খুঁজতে গিয়ে জীবন তামা তামা হয়ে যাবে তখন আমি কি করব?
:- আচ্ছাহ ভয়ের কিছু নাই, ব্যবস্থা আছে, তার জন্য নিচের কোডটা মনোযোগ দিয়ে দেখি:

এখানে (উপরের চিত্রে) ৭ নং লাইনে cin>>a>>b; দেখতেছি, এখানে cin হলো character input অর্থাৎ cin হলো ডাটা ইনপুট নেওয়ার কমান্ড। এখন আমাদের কোড এডিট করে বারবার আর ভ্যালু চেইন্জ করা লাগবেনা, কিবোর্ড থেকে ইচ্ছা মতো ইনপুট নিতে পারবো। তাহলে সবাই উপরের কোড লিখে কম্পাইল ও রান করো আউটপুট দেখা যাবে সবই সঠিক শুধু ভাগের বেলায় আউটপুট কিছুু এদিকওদিক হচ্ছে। যেমন, a=20 ও b=50 নিলে ভাগের বেলায় a÷b = 20÷50 = 0.4 হওয়ার কথা কিন্তু আউটপুটে দেখতে পাচ্ছি 20/50 = 0 এখানে প্রথমত ২টা সমস্যা আছে একটা হলো ভাগফল রাখার জন্য ভ্যারিয়েবল div কে integer টাইপে নিয়েছি আরেকটা হলো এখানে a ও b দুইজনই integer টাইপের ডাটা। এ্যামতাবস্তায় করনীয় কি সেটা জানার জন্য নিচের কোডটা দেখি:

প্রথমত div কে double বা floating টাইপে নিতে হবে, এখানে double নাকি float এ নিবো তা এখানে আলোচনা করা হয়েছে আর দ্বিতীয় ব্যপারটা হলো টাইপ কাস্টিং। উপরের কোডটা মনোযোগ দিয়ে দেখলে এবং সেই সাথে নিজের IDE তে লিখে কম্পাইল ও রান করলে বিষয়টা আরো ক্লিয়ারলি অনুভব করা যাবে। আচ্ছা আর দশমিকের পর কতঘর পর্যন্ত প্রিন্ট করতে চাচ্ছি সেটা নিয়ন্ত্রন করার জন্য c++ language এ setprecision ব্যবহার করা হয়। এখানে শুধু setprecision ব্যবহার করলে কি হয় আর fixed সহ setprecision ব্যবহার করলে কি হয় তা আর ব্যক্ষা করলাম না, উপরের কোড দেখে আর নিজেরা ট্রাই করলে সহজেই বুঝে যাবে তবে IDE-র উপর ডিপেন্ড করে setprecision এরসাথে fixed ব্যবহার করা লাগতেও পারে আবার নাও লাগতে পারে। কিন্তু এখানে আরেকটা ইম্পর্ট্যান্ট বিষয় হলো setprecision ব্যবহার করলে <iomanip> লাইব্রেরি ইনক্লুড করা লাগে, এটাও স্ট্যান্ডার্ড লাইব্রেরির একটা অংশ যা ইনপুট আউটপুটের সামান্য হেরফেরও সহ্য করতে পারেনা তাই সূক্ষভাবে ডাটা প্রিন্ট করতে সাহায্য করে, যেমন এখানে দশমিকের পর কতঘর পর্যন্ত কি প্রিন্ট করবো তা কন্ট্রোল করতেছে।
আজ তাহলে এ পর্যন্তই থাক, আর সামান্য একটু বাকী আছে সেটা পরবর্তী পোষ্টে দেখি।