Header Ads

কন্ডিশন

আগের অধ্যায়ে দেখেছি ডাটা টাইপ নিয়ে, এখন আমরা জানি কোথায় কিরকম ডাটা ব্যবহার করতে হবে। এই অধ্যায়ে আমরা কন্ডিশন নিয়ে দেখব। কন্ডিশন মানে যুক্তি। যুক্তি ও নিয়ম মেনেই আমাদের চলতে হয়। যেমন, কেও যদি বলে শুক্রবার ছুটির দিন, তাহলে এটি যুক্তিযোগ্য কিন্তু কেও যদি বলে সোমবার ছুটির দিন তাহলে স্বাভাবিকভাবে এটি কিন্তু যুক্তিযোগ্য নয় কারণ এই তথ্যটি মিথ্যা। এইভাবে যুক্তি ছাড়া যেমন আমাদের সঠিক কাজ হবে না তেমনি প্রোগ্রামিং ও যুক্তি ছাড়া হবে না। বলা যায় একেবারেই অচল। কারণ, মানুষ অনেক সময় যুক্তি না মেনেও কাজ করতে পারে, কিন্তু যন্ত্র যেহেতু কিছুই বুঝে না তাই যুক্তিতে ভুল হলে সঠিক কাজ পাওয়ার আশা নেই। তাই যুক্তি/কন্ডিশন খুবই গুরুত্বপূর্ণ প্রোগ্রামিংয়ে। আমরা এখন কিছু সমস্যা সমাধান করে প্রোগ্রামিং এর কন্ডিশন আরো একটু ভালো করে বুঝে নেওয়ার চেষ্টা করব।

প্রথম সমস্যাটি হচ্ছে, আপনার পরীক্ষার প্রাপ্ত নাম্বার ইনপুট দেওয়া হবে, আপনাকে বলতে হবে আপনি পাশ করেছেন নাকি ফেইল করেছেন। আমরা জানি পরীক্ষায় পাশ করতে হলে নূন্যতম 33 পেতে হবে। এটি কিন্তু একটি কন্ডিশন। এখন যদি একটু সাজিয়ে লিখি, আপনার পরীক্ষায় প্রাপ্ত নাম্বার যদি 32 এর বেশি হয় তাহলে আপনি পাশ করেছেন। তাহলে আমরা এখন এমন একটি প্রোগ্রাম দেখব যেটি আমাদের পরীক্ষায় প্রাপ্ত নাম্বার integer হিসেবে ইনপুট নিবে এবং যদি পাশ করি তাহলে আউটপুট দেখাবে Passed! মানে উপরে সাজিয়ে যে লাইনটি লিখলাম তাই এখন যন্ত্রের ভাষায় লিখে দিব।

#include <iostream>


using namespace std;


int main()

{

  int marks;


  cout << "Enter your marks: ";

  cin >> marks;


  if (marks > 32){

    cout << "Passed!" << endl;

  }


  return 0;

}

Code: 3.0

সি++ ভাষাতে কন্ডিশন চেক করার জন্য if ব্যবহার করা হয়। আপনি if এর প্রথম ব্র্যাকেট ব্লক এর ভিতরে যে কন্ডিশন রাখবেন তা যদি সত্যি হয় তাহলে if এর দ্বিতীয় ব্র্যাকেট ব্লকের ভিতরে আপনি যে কাজ লিখে দিবেন তা করবে অন্যথায় ঐ পর্যন্ত যাবেই না। আমি এই প্রোগ্রামে if এর ভিতরে লিখে দিয়েছি Passed! প্রিন্ট করতে হবে। এখন আপনি যদি 33 বা 33 এর থেকে বড় যে নাম্বারই ইনপুট দিন না কেন কন্ডিশন সত্যি হয়ে যাবে কারণ marks ভেরিয়েবল এখন 32 এর থেকে বড় এবং Passed! প্রিন্ট করে দিবে। এই > চিহ্নটির রিলেশনাল অপারেটর হিসেবে নাম হচ্ছে greater than এবং < এটি হচ্ছে less than অপারেটর। 

এখন কারো মনে হয়ত খটকা লাগতে পারে, যদি 32.1 হয় প্রাপ্ত নাম্বার তাহলে কি হবে? কারণ এটিও ত 32 এর থেকে বড়। যেহেতু integer ইনপুট নিয়েছি সেহেতু আপনি 32.1 ইনপুট দিলেও ভেরিয়েবল 32 ই ধরে নিবে। কারণ সে পূর্ণসংখ্যা আর তাই সে ভগ্নাংশ সংখ্যা রাখতে পারবে না আর তাই প্রোগ্রামের কন্ডিশনে 32 এর বড় হলেই পাশ ধরে নেওয়ার সাহস দেখিয়েছি। মূল কথা হচ্ছে প্রায় সময়ই পরীক্ষায় প্রাপ্ত নাম্বার পূর্ণসংখ্যা হিসেবেই দেওয়া হয় কিন্তু যদি এমন পরিস্থিতি হয়ে যে ভগ্নাংশ নিয়ে কাজ করতে হবে তাহলে তখন কিন্তু integer নিয়ে কাজ করলে শতভাগ সঠিক উত্তর পাবেন না।

এখন কি হবে যদি ইনপুট হিসেবে 25 দেই? আগেই বলেছি কন্ডিশন মিথ্যা হলে if এর ভিতরে যাবে না। তারমানে কিছুই প্রিন্ট করবে না। তাহলে আমরা আবার কন্ডিশন দিতে পারি নিচে, if (marks < 33){cout << "Failed!" << endl;} Failed! প্রিন্ট করার জন্য। কারণ, প্রাপ্ত নাম্বার 32 এর বড় না হলে অবশ্যই আপনি ফেইল করেছেন। কিন্তু আমরা অন্যভাবেও করতে পারি, আর তার জন্য আমাদের ভাষায় লিখলে হবে এমন, যদি পরীক্ষায় আপনার প্রাপ্ত নাম্বার 32 এর বেশি হয় তাহলে আপনি পাশ করেছেন অন্যথায় আপনি ফেইল করেছেন। "যদি" মানে "if" এবং "অন্যথায়" মানে "else"। এখন এটি অর্থপূর্ণ করার জন্য, যিনি এই ভাষা তৈরি করেছেন তিনি এভাবে লিখেছেন কিন্তু তিনি যদি if এর জায়গায় money লিখে রাখতেন তাহলে আমাদের করার কিছু ছিলো না, আমাদের ও money লিখতে হত। আর এটি কিন্তু ভেরিয়েবল না, তাই আপনি এটির ইচ্ছামত নাম দিতে পারবেন না। এটি কন্ডিশন চেক করার জন্য একটি মাধ্যম তাই সিন্টেক্স ঠিক রেখে আমাদের চেক করতে হবে। এবার প্রোগ্রাম টি দেখে নেই। 

#include <iostream>


using namespace std;


int main()

{

  int marks;


  cout << "Enter your marks: ";

  cin >> marks;


  if (marks > 32){

    cout << "Passed!" << endl;

  }else {

    cout << "Failed!" << endl;

  }


  return 0;

}

Code: 3.1

এখন, যদি আপনার প্রাপ্ত নাম্বার 32 এর বেশি হয় তাহলে প্রিন্ট করবে Passed! আর যদি 33 এর কম হয় তাহলে প্রিন্ট করবে Failed!। এটি কাজ করছে কীভাবে? আপনি যদি 32 ইনপুট দিয়ে থাকেন তাহলে এখন marks এর কাছে আছে 32। কন্ডিশন (marks > 32 বা, 32 > 32) চেক করার পর দেখবে এটি মিথ্য কারণ 32 কখনো 32 এর থেকে বড় হতে পারে না। তাই যেহেতু if কন্ডিশন মিথ্যা হয়ে গেছে মানে marks এখন 32 এর থেকে বড় নয় তাহলে অবশ্যই 33 এর থেকে ছোট এবং আপনি ফেইল করেছেন আর এখন else ব্লক অবশ্যই সত্যি। আবার যদি ইনপুট 50 দেন তাহলে প্রথম কন্ডিশন ই সত্যি হয়ে গেছে তাই দ্বিতীয়টিতে আর যাবে না।  

পরের সমস্যাতে যাই, এখন আপনাকে দুটো ইন্টিজার নাম্বার ইনপুট দেওয়া হবে, আপনাকে এই দুটো নাম্বার কে বড় থেকে ছোটক্রমে লিখতে হবে। যেমন, নাম্বার দুটো যদি হয় 5 10 তাহলে আপনাকে প্রিন্ট করতে হবে 10 5। আবার, নাম্বার দুটো যদি হয় 9 8 তাহলে প্রিন্ট করতে হবে 9 8। তাহলে প্রোগ্রাম করে দেখি। 

#include <iostream>


using namespace std;


int main()

{

  int n, m;


  cout << "Enter two values: ";

  cin >> n >> m;


  if (n > m){

    cout << n << ' ' << m << endl;

  }

  if (n < m) {

    cout << m << ' ' << n << endl;

  }


  return 0;

}

Code: 3.2

এবার প্রথম কন্ডিশনটি যদি সত্যি হয় তাহলে আমাদের নাম্বার দুটো আসলে বড় থেকে ছোটক্রমে সাজানোই আছে এবং অবশ্যই দ্বিতীয় কন্ডিশনটি মিথ্যা। এখন শুধু আমরা প্রথম নাম্বার টি আগে প্রিন্ট করে স্পেস দিয়ে তারপর দ্বিতীয় নাম্বারটি প্রিন্ট করে দিব। আর যদি দ্বিতীয় কন্ডিশনটি সত্যি হয় তাহলে অবশ্যই প্রথম কন্ডিশনটি মিথ্যা এবং প্রথম নাম্বারটি ছোট, সেক্ষেত্রে দ্বিতীয় নাম্বারটি আগে প্রিন্ট করে স্পেস দিয়ে প্রথম নাম্বারটি প্রিন্ট করে দিব। এখন যদি ইনপুট দেওয়া দুটো নাম্বারই সমান হয় তাহলে কি হবে? ইনপুট দিয়ে দেখতে পারেন, যদি কাঙ্ক্ষিত উত্তর না পান তাহলে কাঙ্ক্ষিত উত্তর না পাওয়ার কারণ বের করে ঠিক করতে হবে। এটি প্রোগ্রামিং এর অত্যান্ত গুরুত্বপূর্ণ একটি বিষয়, কারণ আপনি যত বড় প্রোগ্রামারই হোন না কেন, লজিকালি ভুল হবেই আর এই ভুল খুঝে বের করে ঠিক করে নেওয়া কে বলে ডিবাগিং। এরপর আপনার কাজ হবে দুটো নাম্বারকে ছোট থেকে বড়ক্রমে প্রিন্ট করা। আপনার জন্য আরেকটি কাজ হচ্ছে swapping ব্যবহার করে এই কাজটি করা।

আমি যখন যে অতিরিক্ত কাজ গুলো দিচ্ছি সেগুলো কিন্তু গুরুত্বপূর্ণ তাই চেষ্টা করবেন সব নিজে নিজে করে ফেলতে। আর না পারলে আবার ভালো করে পড়ে নিন এরপরেও সমস্যা হলে কমেন্ট করতে পারেন অথবা অভিজ্ঞ কারো সাহায্য নিতে কৃপণতা করবেন না। এখন আপনি তিনটি পাশাপাশি শহর বেঁছে নিলেন, ধরে নিলাম ঢাকা, টাংগাইল এবং ময়মনসিংহ। আপনি আছেন ঢাকার মাঝখানে এবং সেখান থেকে 49 কিলোমিটার পরে শুরু হয়েছে টাংগাইল শহর এবং টাংগাইল শেষ হয়েছে 200 কিলোমিটার দূরত্ব শেষ হওয়ার পরে। মানে, 50 থেকে 200 কিলোমিটারের জায়গাটি হচ্ছে টাংগাইল এবং 0 থেকে 49 কিলোমিটারের জায়গাটি হচ্ছে ঢাকা। 201 থেকে ময়মনসিংহ শুরু হয়ে 250 তে যাওয়ার পর জায়গাটি হচ্ছে ময়মনসিংহ শহরের মাঝামাঝি এবং এটি হচ্ছে আপনার গন্তব্যের শেষ সীমানা। নিচের ছবিটি দেখলে আশাকরি আরো পরিস্কার ধারণা পাবেন। 

এখন আপনি ঢাকা মানে 0 কিলোমিটার থেকে যাত্রা শুরু করলেন এবং নির্দিষ্ট একটি সময় পর দেখলেন আপনি d কিলোমিটার পথ পারি দিয়েছেন। এখন আপনাকে বলতে হবে আপনি কোন শহরে আছেন। ধরে নিলাম আপনি 100 কিলোমিটার দূরত্ব অতিক্রম করেছেন, তাহলে অবশ্যই আপনি এখন টাংগাইল শহরে আছেন। আইডিয়াটা হচ্ছে, আপনি ঢাকা তে থাকবেন কখন? অবশ্যই যদি আপনার অতিক্রম করা দূরত্ব 50 কিলমিটারের কম হয়। যদি 50 এর বেশি বা সমান হয় তাহলে হয়ত টাঙ্গাইলে আছেন নয়ত ময়মনসিংহ। এখন দেখবেন 200 এর কম বা সমান কিনা। যদি হয় তাহলে টাংগাইলে আছেন অন্যথায় আছেন ময়মনসিংহ।

#include <iostream>


using namespace std;


int main()

{

  int distance;


  cout << "Enter the distance you covered: ";

  cin >> distance;


  if (distance < 50){

    cout << "You are in First city" << endl;

  }

  if (distance <= 200){

    cout << "You are in Second city" << endl;

  }

  else {

    cout << "You are in Third city" << endl;

  }


  return 0;

}

Code: 3.3

এখন, আপনি 50 100 220 ইত্যাদি ইনপুট দিয়ে দেখলেন সঠিক আউটপুট দিচ্ছে কিন্তু 49 ইনপুট দেওয়ার পর দেখাচ্ছে একইসাথে আপনি প্রথম ও দ্বিতীয় দুই শহরেই আছেন। এটি কি আসলে সম্ভব? নিশ্চয়ই কোন ভুল হয়েছে। ভুল বের করার আগে বলে নেই, আপনি যতটি if কন্ডিশন দিবেন সবগুলোই চেক করা হবে। কিন্তু যদি if এর সাথে else থাকে তাহলে if কন্ডিশন সত্যি হলে else আর দেখা হয় না। এখানে আমরা তাই করেছি এবং distance ভেরিয়েবল দুইটা if এর ভিতরে গিয়েই সত্যি হয়ে যাচ্ছে কারণ আমরা ত শুধু দেখতেছি নির্দিষ্ট দূরত্বের থেকে আমার অতিক্রম করা দূরত্ব কম বা, সমান কিনা( <= এটিকে বলা হয় less than or equal অপারেটর এবং greater than or equal অপারেটর হচ্ছে >= এটি)। এই সমস্যা সমাধানের উপায় হচ্ছে else if। আপনার যখন দুই এর অধিক কন্ডিশন চেক করার দরকার হবে তখন এটি ব্যবহার করতে হবে। আগের প্রোগ্রাম সবই ঠিক আছে শুধু আমাদের দ্বিতীয় if এর জায়গায় else if দিয়ে দিলেই হবে। এভাবে কিন্তু আমাদের কাজ ও সময় দুটোই কম লাগবে কারণ ইনপুট 20 হলে কিন্তু প্রথম কন্ডিশন সত্যি এবং বাকি দুটো চেক করবে না কিন্তু সবগুলোই if দিলে প্রথম টি সত্যি হলেও বাকিগুলো চেক করবে। 

#include <iostream>


using namespace std;


int main()

{

  int distance;


  cout << "Enter the distance you covered: ";

  cin >> distance;


  if (distance < 50){

    cout << "You are in First city" << endl;

  }

  else if (distance <= 200){

    cout << "You are in Second city" << endl;

  }

  else {

    cout << "You are in Third city" << endl;

  }


  return 0;

}

Code: 3.4

এবার আশাকরি ইনপুট যেমনই হোক প্রত্যাশিত আউটপুটই আসছে। আচ্ছা, ইনপুট যদি 250 এর থেকে বেশি হয় তাহলে কি হবে? আপনার ইচ্ছামত যেমন খুশি কন্ডিশন দিয়ে প্রোগ্রাম টি সাজিয়ে নিতে পারেন তবে শর্ত হচ্ছে, ইনপুট 0 এর কম বা, 250 এর বেশি হলে কোন শহরের কথাই প্রিন্ট করবে না। 

এখন, আপনারা দুই বন্ধু একইসাথে 0 কিলোমিটার থেকে যাত্রা শুরু করে দেখলেন আপনি d1 দূরত্ব অতিক্রম করেছেন এবং আপনার বন্ধু d2 দূরত্ব অতিক্রম করেছেন। এখন এই দুইটি দূরত্ব ইনপুট নিয়ে বলতে হবে আপনারা আলাদা আছেন নাকি একসাথেই আছেন। 

#include <iostream>


using namespace std;


int main()

{

  int d1, d2;


  cin >> d1 >> d2;


  if (d1 != d2){

    cout << "They are not in same place" << endl;

  }

  else {

    cout << "They are in same place" << endl;

  }


  return 0;

}

Code: 3.5

!= এই অপারেটরের নাম হচ্ছে not equal। এর কাজ হচ্ছে d1 এবং d2 যদি অসমান হয় তাহলে সত্য। আর যদি সমান হয় তাহলে মিথ্যা। মানে দুইপাশের নাম্বার অসমান হলে তবেই এটি সত্যি হবে। এক নজরে রিলেশনাল অপারেট গুলো, > greater than, < less than, >= greater than or equal, <= less than or equal, == equal and != not equal।

পরের সমস্যাটি হচ্ছে, আপনাকে তিনটি নাম্বার দেওয়া হবে। আপনাকে এই তিনটি নাম্বার থেকে বড় নাম্বারটি বের করতে হবে। তিনটি নাম্বার যদি হয় a b c তাহলে তিনটি সংখ্যাই বড় হতে পারে তাই এখন আমরা তিনটি সংখ্যাই বড় ধরে সাজাব। 
a যদি বড় হয় তাহলে a কে অবশ্যই b ও c এর থেকে বড় হতে হবে, a > b এবং a > c।
b যদি বড় হয় তাহলে b কে অবশ্যই a ও c এর থেকে বড় হতে হবে, b > a এবং b > c।
c যদি বড় হয় তাহলে c কে অবশ্যই a ও b এর থেকে বড় হতে হবে, c > a এবং c > b।
এখানে যে, (a > b এবং a > c) এই লাইনে এবং লিখলাম, এই এবং/and কি সি++ ভাষাতেও লিখা যাবে? উত্তর হচ্ছে এভাবে সি++ ভাষাতে লিখার নিয়ম নেই। কিন্তু সি++ ভাষাতে কন্ডিশনাল অপারেটর হিসেবে আছে &&(মনুষ্য ভাষায় and) অপারেটর। এটি এবং/and এর কাজ করে। তাহলে আমরা কন্ডিশনে এভাবে লিখতে পারি, (a > b && a > c)। 

#include <iostream>


using namespace std;


int main()

{

  int a, b, c;


  cout << "Enter three numbers: ";

  cin >> a >> b >> c;


  if (a > b && a > c){

    cout << "Max: " << a << endl;

  }

  else if (b > a && b > c){

    cout << "Max: " << b << endl;

  }

  else {

    cout << "Max: " << c << endl;

  }


  return 0;

}

Code: 3.6

এখানে && অপারেটর ব্যবহার করলাম কেন? কারণ উপরে বলেছি, a যদি বড় হয় তাহলে a কে অবশ্যই b এবং c এর থেকে বড় হতে হবে। && অপারেটরের কাজ হচ্ছে এর দুইপাশের একটিও যদি মিথ্যা হয় তাহলে সবই মিথ্যা। যেমন শুক্রবার এবং শনিবার ছুটির দিন এই তথ্যটি সত্যি কিন্তু শুক্রবার এবং সোমবার ছুটির দিন এই তথ্যটি মিথ্যা যদিও এখানে একটি তথ্য সত্যি। আপনি যদি আই সি টি বইয়ের and গেইট, or গেইট ও not গেইট পড়ে থাকেন তাহলে আশাকরছি আগেই বুঝে গিয়েছেন। এখন বিভিন্নরকম ইনপুট দিয়ে দেখতে পারেন সঠিক আউটপুট আসে কিনা। অবশ্যই আসবে কিন্তু এই প্রোগ্রামেও লজিক্যালি একটু ভুল আছে। সেটি কি? 2 2 1 ইনপুট দিয়ে দেখেন তাহলেই বুঝে যাবেন। বড় হিসেবে নিশ্চয়ই 1 কে দেখাচ্ছে? কিন্তু 1 এখানে সবথেকে ছোট। একটু ভেবে দেখুন, a আর b কিন্তু সমান। তাহলে কি প্রথম দুইটি কন্ডিশন কি সত্যি হবে? আবার বড় সংখ্যা কিন্তু আছে a আর b তেই। আমরা আসলে greater than অপারেটর ব্যবহার না করে যদি greater than or equal অপারেটর ব্যবহার করতাম তাহলে এই সমস্যাটি হত না এবং আমাদের প্রোগ্রাম শতভাগ সঠিক আউটপুট দিবে। এখন আপনার জন্য সহজ একটি কাজ হচ্ছে তিনটি নাম্বার থেকে ছোট নাম্বারটি বের করা। 

তিনটি নাম্বার থেকে বড় নাম্বার আর ছোট নাম্বার বের করলাম কিন্তু যদি বলি তিনটি নাম্বার ই বড় থেকে ছোটক্রমে সাজাতে হবে। এখন কীভাবে হবে? এর আগে দুইটি নাম্বার নিয়ে বড় থেকে ছোটক্রমে সাজিয়েছি তাই তিনটি নাম্বার এর জন্য কি পারবেন? এর জন্য যা দরকার তা হচ্ছে else if এবং &&। এই দুটোই আমরা ইতিমধ্যে শিখে ফেলেছি। তাহলে নিচে যাওয়ার আগে একবার নিজে চেষ্টা করে দেখতেই পারেন।

আমরা আগে দুটো সংখ্যা নিয়ে কাজ করেছিলাম তাই আমাদের কাছে বিন্যাসের বিষয়টি ধরা পড়েনি কিন্তু এখন যদি তিনটি সংখ্যাকে বিন্যাস করি তাহলে কতভাবে বিন্যাস করা যায়? আমরা জানি তিনটি সংখ্যাকে ছয় ভাবে বিন্যাস করা যায়। তাহলে নিচে বিন্যাস করে দেখি। 
a কে বড় ধরে b কে মাঝখানে রেখে c কে ছোট ধরলে, a b c। 
a কে বড় ধরে c কে মাঝখানে রেখে b কে ছোট ধরলে, a c b।
b কে বড় ধরে a কে মাঝখানে রেখে c কে ছোট ধরলে, b a c।
b কে বড় ধরে c কে মাঝখানে রেখে a কে ছোট ধরলে, b c a।
c কে বড় ধরে a কে মাঝখানে রেখে b কে ছোট ধরলে, c a b।
c কে বড় ধরে b কে মাঝখানে রেখে c কে ছোট ধরলে, c b a।
এখন তিনটি সংখ্যা যেভাবেই আসুক এই ছয়টি কন্ডিশনে পরবেই তাই উত্তর ও পাওয়া যাবে শতভাগ সঠিক। এখন আগের মত কন্ডিশন সাজালে কিন্তু হবে না, একটু পরিবর্তন করতে হবে যেমন (a >= b && b >=c)। তাহলে প্রোগ্রাম করে দেখে নেওয়া যাক আমাদের লজিক শতভাগ সঠিক কিনা। রান করে অবশ্যই ভিন্নরকম অনেক ইনপুট দিয়ে চেক করে দেখবেন।

#include <iostream>


using namespace std;


int main()

{

  int a, b, c;


  cout << "Enter three numbers: ";

  cin >> a >> b >> c;


  if (a >= b && b >= c){

    cout << a << ' ' << b << ' ' << c << endl;

  }

  else if (a >= c && c >= b){

    cout << a << ' ' << c << ' ' << b << endl;

  }

  else if (b >= a && a >= c){

    cout << b << ' ' << a << ' ' << c << endl;

  }

  else if (b >= c && c >= a){

    cout << b << ' ' << c << ' ' << a << endl;

  }

  else if (c >= a && a >= b){

    cout << c << ' ' << a << ' ' << b << endl;

  }

  else {

    cout << c << ' ' << b << ' ' << a << endl;

  }


  return 0;

}

Code: 3.7

শেষে কন্ডিশন না দিয়ে else দেওয়ার কারণ, ছয়টি বিন্যাসের পাঁচটি চেক করা হয়ে গেছে, এখন নিশ্চয়ই শেষেরটি else if দিয়ে আলাদা করে চেক করার দরকার নেই(শেষে else না দিয়ে else if দিয়েও শেষ করা যায়)। এটি শেষ হলে আপনার জন্য সহজ ছোট্ট একটি কাজ হচ্ছে তিনটি নাম্বার কে এবার ছোট থেকে বড়ক্রমে সাজিয়ে লেখা।

নতুন সমস্যা, আপনাকে একটি character ইনপুট দেওয়া হবে। character টি হবে small letter (a to z) এবং আপনাকে বলতে হবে এটি Vowel নাকি Consonant? আমরা জানি vowel হচ্ছে পাঁচটি, a e i o u আর বাকিরা হচ্ছে consonant। এখন আমরা দেখব ইনপুট নেওয়া character টি এই পাঁচটি character এর কোন একটির সাথে মিলে কিনা? মিলে গেলে অবশ্যই ইনপুট নেওয়া character টি vowel অন্যথায় consonant। 

#include <iostream>


using namespace std;


int main()

{

  char ch;


  cout << "Enter the character: ";

  cin >> ch;


  // a e i o u


  if (ch == 'a'){

    cout << "Vowel" << endl;

  }

  else if (ch == 'e'){

    cout << "Vowel" << endl;

  }

  else if (ch == 'i'){

    cout << "Vowel" << endl;

  }

  else if (ch == 'o'){

    cout << "Vowel" << endl;

  }

  else if (ch == 'u'){

    cout << "Vowel" << endl;

  }

  else {

    cout << "Consonant" << endl;

  }


  return 0;

}

Code: 3.8

প্রোগ্রামটিতে ch নামের ভেরিয়েবলে character টাইপের একটি ইনপুট নিয়েছি। এখন যেহেতু ch এর মাঝে একটি letter আছে তাই আমরা ch কে vowel গুলোর সাথে পরীক্ষা করে দেখব মিলে কিনা। ধরে নিলাম ইনপুট হচ্ছে i তাহলে প্রথমে a এর সাথে চেক করবে। যেহেতু i==a সত্যি নয় সেহেতু নিচে চলে যাবে। এখন e এর সাথে চেক করবে এবং এটিও সত্যি নয়। এরপর নিচে চলে যাবে এবং এবার i==i সত্যি হয়েছে, তাই প্রিন্ট করে দিবে vowel এবং এরপর আর পরের কন্ডিশন গুলো চেক করবে না। আর যদি ইনপুট হয় b তাহলে এই পাঁচটির একটির সাথেও মিলছে না সেহেতু এটি অবশ্যই consonant। কতসুন্দরভাবে 21 টি consonant চেক না করেই বলে দেওয়া গেল। এখানে আমরা এত বারবার else if না লিখে কিন্তু একটি if এর ভিতরেও পাঁচটি কন্ডিশনই লিখে দিতে পারি। and অপারেটর দিয়ে যেমন দুইটি কন্ডিশন একটি if এর ভিতরে লিখে দিয়েছিলাম তেমনি কিন্তু প্রয়োজনমত দুইটির বেশি কন্ডিশন ও লিখা যাবে। কিন্তু, এখানে কি and অপারেটর ব্যবহার করা যাবে? বলেছি পাঁচটি character এর যেকোন একটির সাথে মিলে গেলেই হবে। and অপারেটর ব্যবহার করতে পারতাম যদি বলতাম পাঁচটি character এর সাথেই মিলতে হবে। সেটি আসলে এখানে সম্ভব নয় কারণ, vowel পাঁচটি পাঁচরকম। এখন তাহলে অথবা/or(সি++ ভাষাতে || এটিই or অপারেটর) অপারেটর ব্যবহার করতে হবে। 

#include <iostream>


using namespace std;


int main()

{

  char ch;


  cout << "Enter the character: ";

  cin >> ch;


  // a e i o u


  if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'){

    cout << "Vowel" << endl;

  else {

    cout << "Consonant" << endl;

  }


  return 0;

}

Code: 3.9

এখন যদি ইনপুট নেওয়া character টি vowel হয় তাহলে if কন্ডিশন সত্যি হবেই কারণ, একটির সাথে ত মিলবেই। যদি ইনপুট দেওয়ার শর্তে বলে capital letter (A to Z) ও দেওয়া হবে, তাহলে কীভাবে করবেন? 

পরবর্তী ও এই অধ্যায়ের শেষ সমস্যা। আপনাকে একটি নাম্বার ইনপুট দেওয়া হবে, বলতে হবে এটি পজিটিভ নাকি নেগেটিভ নাকি শূন্য? শূন্য কিন্তু পজিটিভ ও না আবার নেগেটিভ ও না। এতদূর আসার পর নিশ্চয়ই এটি পারবেন আপনারা। সহজ প্রবলেম। কিন্তু এরপরেও এটি নিয়ে আলোচনা করছি কারণ একটি নতুন অপারেটরের সাথে পরিচয় করিয়ে দেওয়ার জন্য। কন্ডিশনাল অপারেটর হচ্ছে তিনটি, && and অপারেটর, || or অপারেটর এবং ! not অপারেটর। এই not অপারেটরের কাজ হচ্ছে কোন ভেরিয়েবল এর ভ্যালু শূন্য কিনা তা চেক করা। শূন্য হলে এটি সত্য হয় অন্যথায় মিথ্যা। আবার কোন কন্ডিশন মিথ্যা হলে এটি সত্য হয় আর সত্য হলে মিথ্যা। কনফিউশন হয়ে গেছেন হয়ত, আর কথা না বলে প্রোগ্রাম টি দেখে নেই।

#include <iostream>


using namespace std;


int main()

{

  int n;


  cout << "Enter any number: ";

  cin >> n;


  if (!n){

    cout << "zero" << endl;

  }

  else {

    if (n < 0){

      cout << "negative" << endl;

    }

    if (n > 0) {

      cout << "positive" << endl;

    }

  }


  return 0;

}

Code: 3.10

এখানে প্রথমে if এর ভিতরে not অপারেটর দিয়ে চেক করেছি ইনপুট নেওয়া নাম্বারটি শূন্য কিনা। শূন্য হলে zero প্রিন্ট করবে অন্যথায় নাম্বারটি পজিটিভ অথবা নেগেটিভ তাই else ব্লকের ভিতরে গিয়ে আবার চেক করবে শূন্য এর ছোট হলে negetive আর যদি শূন্য এর থেকে বড় হয় তাহলে পজিটিভ। এই যে else ব্লকের ভিতরে গিয়ে আবার কন্ডিশন চেক করতেছি এটি হচ্ছে কন্ডিশনের ভিতরে কন্ডিশন। এভাবে আপনি প্রয়োজনমত কন্ডিশনের ভিতরে কন্ডিশন নিয়ে কাজ করতে পারবেন।

পরবর্তী অধ্যায়ে দেখব লুপ নিয়ে। তার আগে অবশ্যই এই অধ্যায় ভালো করে প্র্যাক্টিস করবেন আশাকরছি।

No comments

Powered by Blogger.