A SMALL AND IMPORTANT FUN PROGRAM OF LUDO
পোস্ট পড়ার মাঝখানে কোনো শব্দ না বুজলে একদম শেষে যান সেখানে শব্দার্থ দিয়েছি।
আজকে আপনাদের সাথে একটি মজাদার কোড শেয়ার করব। এখন থেকে মাঝে মধ্য আমি কিছু মজার মজার C++/C/Python এর ছোট ছোট প্রোগ্রাম আপনাদের সাথে শেয়ার করব। আশা করি আজকের পোস্ট টি আপনাদের কাছে ভাল লাগবে এবং ভবিষ্যতে আরও পোস্ট করার আগ্রহ পাব।
#include <iostream> #include <cstdlib> #include <ctime> #include <string> using namespace std; int main() { srand(time(0)); string x; cout<< "Do you want to roll a dice(Yes/No) :" ; cin >> x; if (x== "yes"|| x== "Yes" ) { cout<<"You Rolled & Got:"<< rand()%6+1;} else if (x=="no" || x=="No") { cout<<"Program Ended"; } else{ cout<<"Please Type (Yes or No)"; } return 0; }
আজকের এই ছোট প্রোগ্রাম টি হচ্ছে ছক্কা খেলার মূলমন্ত্র। ছক্কা খেলার সময় আপনারা যে ডাইস বা ছক্কা নিক্ষেপ করেন সেটি (১-৬) পর্যন্ত দেখায়। ঠিক একই ভাবে ফোন এর মধ্যে ছক্কার গেইম গুলোতেও ছক্কা নিক্ষেপ ১-৬ পর্যন্ত শো করে। এটি মূলত করা হয় থাকে ২-৩ লাইনের কিছু ছোট কোড এর মাধ্যমে। আজকে এই প্রোগ্রামটি কিভাবে কাজ করে বিস্তারিত বলব আশা করি এতে করে অনেক বিষয় শিখতে পারবেন।
#include <iostream>#include <cstdlib> #include <ctime> #include <string>
কোডের শুরুতেই এইভাবে অনেক লেখা আছে এগুলোর অর্থ কি। আপনি যদি কোনো প্রগ্রামিং ভাষা ব্যাবহার করে প্রোগ্রাম লিখতে জান তখন আপনি যে কম্পাইলার ( প্রগ্রামিং লেখার সফটওয়্যার) ব্যাবহার করবেন এবং যে ভাষায় প্রোগ্রাম লিখবেন তাতে কিছু জিনিস আগে থেকে সেট করে দেয়া থাকে। এগুলোকে বলে হেডার ফাইল (header file) বা লাইব্রেরী এবং এগুলোর মাঝে কিছু ফাংশন থাকে। যেমন cmath এই লাইব্রেরী তে কিছু ফাংশন আছে যেমন pow(x,y)
এবং এই লাইব্রেরী ফাংশন এর কাজ হল কোনো কিছুর উপর পাওয়ার দেয়া। যদি আপনি লিখতে চান ২^৪ তাহলে আপনাকে প্রথমে
#include <cmath>
এই লাইন টি একদম শুরুতে লিখতে হবে । এর মানে হল cmath হেডার ফাইল টি declare করা। এটি ইউস করলেই কেবল মাত্র আপনি pow (x,y) এই লাইব্রেরী ফাংশন টি লিখতে পারবেন।
pow(2,4)
এই লাইনের অর্থ হল ২^৪. অর্থাৎ আশা করি বুজতে পেরেছেন ২^৪ লিখার জন্য প্রথমে আমাকে cmath লাইব্রেরী টি declare করতে হয়েছে এবং এর কারণে এর আন্ডারে থাকা পাওয়ার (pow) ফাংশটি ব্যাবহার করতে পেরেছি। যার মাধ্যমে আমি ২^৪ লিখতে পেরেছি এবং যার মান হল ১৬.
এত কিছু বলার অর্থ হল আমি #include দিয়ে এইভাবে অনেক হেডার ফাইল declare করেছি এই প্রোগ্রামটি করতে এবং এই সবগুলোর কোনো না কোনো কাজ আছে। এবং সবগুলো আমি বিস্তারিত আলোচনা করব।
#include <iostream>
C++ কোডের মূল কাজ হল এটি। প্রগ্রাম হল মূলত ইনপুট এবং আউটপুট এর কাজ। কম্পিউটার আপনার থেকে কোনো লেখা বা সংখ্যা ইনপুট নিবে এবং প্রোগ্রাম এর কোড অনুযায়ী কাজ করে আউটপুট দিবে। যেমন আপনি যখন কেলকুলেটরে ১+২= লিখেন তখন কেলকুলেটর আপনার কাছ থেকে সেটি ইনপুট নে এবং যোগ করে আপনাকে আউটপুট দেয় ৩. C++ ভাষার মধ্যে ইনপুট এবং আউটপুট হল একটি লাইব্রেরী ফাংশন এবং এগুলো আগে থেকে সেট করে দেয়া থাকে। এগুলো ব্যাবহার করতে আপনাকে প্রথমে iostreame এই হেডার ফাইলটি declare করতে হবে এবং কিভাবে করে সেটি একটু আগেই দেখালাম। C++ এর মধ্যে ইনপুট নেয়ার জন্য cin>> এই চিহ্ন ব্যাবহার করে এবং আউটপুট এর জন্য cout<< এই চিহ্ন ব্যাবহার করে। আউটপুট যদি কোনো লেখা হয় তবে cout<< দেয়ার পরে ডাবল কোটেশন এর মধ্যে লেখা হয় আর সংখ্যা হলে এমনিতেই লিখে। এবং একসাথে একাধিক ইনপুট বা আউটপুট নিতে একবার cout অথবা cin লিখে যথাক্রমে <> এই চিহ্ন গুলো ব্যাবহার করা হয়।
cout << "trickbd" << 1234; cin>> x >> y;
এর পরে হল স্ট্রিং এর ব্যাবহার। আপনি ইনপুট হিসেবে নিতে পারেন সংখ্যা এবং লিখা। সংখ্যার মধ্যে আছে দশমিক, স্বাভাবিক ইত্যাদি কিন্তু এগুলোর জন্য কোনো হেডার ফাইল লাগে না। কারণ এগুলো সব iostream এই হেডার ফাইলের ভেতর আছে। যদি লিখা ইনপুট নিতে চান এর জন্য char লাইব্রেরী ফাংশন ব্যাবহার করতে পারেন কিন্তু এর জন্য ও আপনাকে হেডার ফাইল লাগবে না এটি ও iostream এর মধ্যে আছে।
#include <string>
কিন্তু যদি আপনি বড় কোনো লেখা ইনপুট নিতে চান যেমন আপনার নাম সেক্ষেত্রে আপনাকে string হেডার ফাইলটি declare করতে হবে কারণ এর মাধ্যমেই বড় বড় লেখা ইনপুট নেয়া যায়।
#include <cstdlib> #include <ctime>
আজকের প্রোগ্রাম এর জন্য মূলত দরকার এই দুটি হেডার ফাইল কারণ এর মধ্যে গুরুত্তপূর্ণ কিছু লাইব্রেরী ফাংশন আগে থেকে দেয়া আছে। এর মধ্যে একটি হল rand () ফাংশন। এটি ব্যাবহার করা হয় রেন্ডম নাম্বার জেনারেট করতে। আপনি যদি এটি আউটপুট এর মধ্যে লিখেন তবে আপনাকে প্রোগ্রামটি একবার এক এক রকম নাম্বার দেখাবে। ধরুন প্রথমবার ৫ এর পরে ১ লাখ এর পরে ৩৮২ এইরকম।
cout<< rand();
কিন্তু আজকের প্রোগ্রাম টি হল ছক্কা বানানোর এবং আপনি জানেন ছক্কার নাম্বার হয়ে থাকে ১-৬ কিন্তু এই লাইব্রেরী ফাংশন ব্যাবহার করলে যদি আপনাকে ১ লক্ষ আউটপুট দেখায় তাহলে সেটি কেমন দেখায়। আপনার দরকার ১-৬। আপনি একটি কাজ করতে পারেন সেটি হল ভাগশেষ এর ব্যাবহার। আজকে আপনার গণিতের বিদ্যা কাজে লাগাতে হবে। আপনি হয়ত জেনেও জানেন না যে কোনো সংখ্যা কে কোনো সংখ্যা দিয়ে ভাগ করলে ভাগশেষ কোনদিন ওই সংখ্যা বা তার চেয়ে বেশি কোনো সংখ্যা আস্তে পারে না। আপনি যদি কোনো সংখ্যাকে ৫ দিয়ে ভাগ করেন তবে ভাগশেষ কোনো দিন ৫ বা ৫ এর বড় হবে না কিন্তু ০,১,২,৩,৪ হতে পারে। চাইলে খাতা কলমে দেখতে পারেন নিজে নিজে অংক বানিয়ে। এই লজিক কাজে লাগিয়ে যদি আমি rand () এই ফাংশন কে ৬ দিয়ে ভাগ করে ভাগশেষ গুলো দেখাই তবে আমার কাজ হয়ে যাচ্ছে। তবে একটি সমস্যা হল ভাগশেষ গুলো হতে পারে ০, ১,২,৩,৪,৫ । এবং c++ এর মধ্যে ভাগশেষ দেখাতে % এই চিহ্ন ব্যাবহার করা হয়। এই ছক্কার মধ্যে আমার ০ এর দরকার নেই এবং ৬ লাগবে। আরেকটা কাজ করতে পাড়ি আমি যদি ফলাফলের সাথে ১ যোগ করে দেই তাহলেই আমার সমস্যার সমাধান হয়ে গেল। কারণ প্রোগ্রাম যদি ০ আউটপুট দে তবে ১ যোগ করলে সেটি হবে ১ এবং ৫ আউটপুট দিলে ১ যোগ করলে হবে ৬. কাজটি করার পর লাইনটি দেখাবে কিছুটা এইরকম।
cout<< rand(); প্রথমে এইরকম ছিল তারপর ভাগশেষ দেখালাম cout<< rand()%6; এবং ১ যোগ করার পর ফাইনালি লাইন টিকে দেখাবে এইরকম। cout<< rand()%6+1;
rand() এই লাইব্রেরী ফাইলটি সঠিক ভাবে কোনো ঝামেলা ছাড়া ব্যাবহার করার জন্য শুরুতে
srand(time(0));
এই লাইনটি লিখেছি এবং এর জন্য মূলত ctime এবং rand () এর জন্য cstdlib এই হেডার ফাইলগুলো ব্যাবহার করা হয়েছে।
এবার শুরু থেকে প্রত্যেক লাইন বাই লাইন প্রোগ্রামটি বুঝাই আপনাকে। প্রথমে আমি #include দেয়ার মাধ্যমে প্রয়োজনীয় সকল হেডার ফাইলগুলো declare করেছি। আপনি যদি প্রোগ্রামার হন বা বিগিনার তবে আপনি আশা করি বুজতে পেরেছেন। তারপরে একটি লাইন লিখেছি
Using namespace std; যদি এটি না লেখেন তবে প্রতিবার ইনপুট আউটপুট নেয়ার আগে আপনাকে std:: এটি লিখতে হত। তাই এত কষ্ট না করে এটি একবারে লিখে দিয়েছি। তারপরে main () লিখেছি এটি প্রত্যেক প্রোগ্রাম এর মধ্যে লিখতে হয় এবং এর মাঝেই আমাদের লেখা প্রোগ্রামটি থাকে। Main () লিখার পর { } এর ব্রেকেট এর মাজখানে প্রোগ্রামটি লিখতে হবে।
আপনি নতুন হলে বলে নেই প্রতিলাইন লেখার পর আপনাকে ; এই চিহ্ন টি দিতে হবে এটিই নিয়ম।
এবং কম্পাইলার উপর থেকে নিচে প্রোগ্রামটি পরে এবং সে অনুযায়ী কাজ করে। শুধু মাত্র হেডার ফাইল declare করার সময় এই চিহ্ন (;) দিতে হয় না।
srand(time(0)); string x; cout << "Do you want to roll a dice(Yes/No) :" ; cin >> x;
এরপর এতটুকু লাইন বুঝাই আপনাকে। প্রথম লাইনটি এর কথা আগেই বলেছি। String x এর অর্থ হল আপনি একটি চলক নিচ্ছেন বীজগণিতের মত যার মান আপনার জানা নেই। আপনি যা ইনপুট দেন সেটি হবে এর মান। যেহেতু string লেখা আছে এর অর্থ হল এর মধ্যে বড় বড় লেখা ইনপুট দিতে পারবেন। এর পরে cout দিয়ে একটি লাইন লিখেছি। আপনি প্রোগ্রাম চালু করলে কম্পিউটার যখন উপর থেকে পড়ে পড়ে আসবে তখন cout দেখার সাথে সাথেই মনিটরে এর মধ্যে যা আছে সেটি দেখাবে। অর্থাৎ আপনার স্ক্রিনে দেখাবে আপনি কি একটি ? রোল করতে চান? Yes/no এগুলো আমি লিখেছি তাই এইরকম ই দেখাবে। আপনি যা লিখেন সেটি দেখাবে এবং খেয়াল করুন এই লেখাটি ” ” এই চিহ্ন এর মাঝে লিখেছি যদি এটি কোনো সংখ্যা হত তখন এটি দেয়ার দরকার পড়ত না। এবং শেষে ; এই চিহ্ন।
এখন এই লেখা দেখার পর আপনি নিশ্চয় yes বা no লিখবেন এবং সেটি হল কম্পিউটার এর ইনপুট।
ইনপুট নিতে এভাবে লিখে Cin>>x; এর মাধ্যমে ইনপুট দিবেন। আপনি যা লিখবেন সেটি x এর মান বা এর মধ্যে জমা থাকবে।
এর পরে আমি ব্যাবহার করেছি if, else if, else
এগুলো লাইব্রেরী ফাংশন এবং এগুলোর কাজ হল শর্ত অনুযায়ী কাজ করা। এগুলো লেখার পর প্রথম () বন্ধনী দিয়ে আপনি শর্ত দিবেন। এবং {} বন্ধনী দিয়ে কাজ দিবেন। যদি শর্ত পূরণ করে তবে কাজ করবে আর নাহয় করবে না। Else এর ক্ষেত্রে কোনো শর্ত দিয়ে হয় না। এটি জমিদার এর মত কেউ কোনো শর্ত পূরণ না করলে এ নিজের কাজ নিজে করবে।
if ( x== "yes"|| x== "Yes" ) { cout<< "You Rolled & Got:"<< rand()%6+1;} else if ( x=="no" || x=="No" ) { cout<< "Program Ended"; } else{ cout<< "Please Type (Yes or No)"; }
দেখুন else if এর মধ্যে প্রথম বন্ধনী দিয়ে শর্ত দেয়া আছে। যদি x এর মান ছোট হাতের no অথবা ( || ) No হয় তবে cout অর্থাৎ আউটপুট দেখাবে programe ended। আরেকটি জিনিস খেয়াল করুন যেহেতু শর্ত এর মধ্য লেখা আছে তাই ” ” আবারও এই চিহ্ন দিয়েছি যদি সংখ্যা হত তবে দেয়ার দরকার ছিল না। x==”no” এর অর্থ x এর মান যদি no হয় অর্থাৎ ইনপুট no হয়। অথবা এর জন্য( || )এই চিহ্ন ব্যাবহার করা হয়। শর্তের জন্য সমান চিহ্ন হিসেবে = একে ২ বার লিখতে হয়। একে relational operator বলে। আস্তে আস্তে শিখবেন এইসব। no আমি ২ বার লিখেছি কারণ আপনি ইনপুট হিসেবে বড় হাতে বা ছোট হাতের অক্ষর লিখতে পারেন সে বিষয়টি চিনতা করে। চাইলে যেভাবেই লিখেন না কেন একরকম রেজাল্টই দেখাবে এই কাজটি করা যেত কিন্তু আপনি জটিল করতে চাইনি আর। এই if এর শর্ত পূরণ করলে এর {} বন্ধনীর ভেতর থাকা কাজটি করবে। যদি না করে তবে এর নিচের লাইন else if এর মধ্যে যাবে এবং যদি এর শর্ত পূরণ করে তবে এর {} বন্ধনীর ভেতর থাকা কাজটি করবে। আশা করি বুঝতে পারছেন সে কাজটি কি। সেটি হল random ভাবে ১-৬ এর মধ্যে সংখ্যা প্রিন্ট করা। একদম শেষের লাইনে else আছে আপনি যদি if এবং else if এর মধ্যে থাকা শর্ত ছাড়া অন্য কোনো কিছু ইনপুট দেন তবে else এর মধ্যে থাকা কাজটি করবে। এবং শেষে return ০ দেয়া আছে সেটির কাজ জানার দরকার নেই।
প্রোগ্রামটি এখানেই শেষ আশা করি বুজতে পারলেন কিছুটা। বিগীনার হলেও বুজতে পারার কথা এবং নিয়মিত হলে কোনো কথাই নেই। আপনার কাজ হবে এই কোডটি কপি করে আপনার কম্পাইলার দিয়ে রান করা এবং এর ডিটেইলস চেইন্জ করে করে কোডটি নিয়ে খেলা। এতে করে অনেক কিছু শিখতে পারবেন। কোন লাইনটি কিজন্য লিখেছি সেটি জানতে কমেন্ট করতে পারেন। আজকের পোস্ট এর কিছু শব্দ বুজতে কষ্ট হলে নিচে শব্দার্থ দিলাম দেখে নিন।
- Header File: বা লাইব্রেরী এর মধ্যে অনেকগুলো ফাংশন সেট করা থাকে সেগুলোর ভিন্ন ভিন্ন কাজ আছে। যেমন iostream হেডার ফাইল এর ভেতর আছে cin এবং cout লাইব্রেরী ফাংশন।
- String : এটি একটি লাইব্রেরী এবং এর আছে string নামে লাইব্রেরী ফাংশন যার মাধ্যমে বড় বড় লেখা ইনপুট নেয়া যায়।
- If,else if, else: এগুলো লাইব্রেরী ফাংশন এর মধ্যে প্রথম বন্ধনী তে শর্ত থাকে এবং ৩য় বন্ধনীতে কাজ থাকে। শর্ত পূরণ করলেই কাজ করে। এক না একাধিক শর্তের জন্য বার বার if না লিখে প্রথমবার if লিখে তারপর পর্যায়ক্রমে else if, else if এইভাবে লিখতে থাকে। একদম শেষে গিয়ে কোনো শর্ত না মানলে কি কাজ করবে তার জন্য else লিখা থাকে।