Thursday, 31 August 2017

লজিক্যাল স্টেটমেন্ট (if , else if and else) পর্ব-২

আগের পর্বে আমরা একটি প্রোগ্রাম নিয়ে আলোচনা করেছিলাম, যেখানে কোন নাম্বার ইনপুট দিলে তা 10 কি না? তা দেখায় এবং 10 ছাড়া অন্য নাম্বার দিলেও তা দেখায়। যদি মনে না থাকে তাহলে আগের পর্ব আবার ভালো করে পড়ে নিন।
আজ আমরা একটা প্রোগ্রাম লিখবো যেটা  কোন নাম্বার পজেটিভ নাকি নেগেটিভ তা দেখাবে। আমরাজানি, যদি কোন সংখ্যা 0 এর চেয়ে ছোট হয় , তাহলে তা নেগেটিভ। 0 এর থেকে বড় হলে পজেটিভ। আর 0 এর সমান হলে ?? তা তো 0 (শুণ্য ) তাই না।

#include <stdio.h>
int main()
{
    int number;
    scanf("%d",&number);
    
    if(number>0)
    {
        printf("This is positive\n");
    }
    if(number<0)
    {
        printf("This is negative\n");
    }
    if(number==0)
    {
        printf("This is zero\n");
    }
    return 0;
}

উপরের প্রোগ্রামটি টাইপ করে রান করো, বিভিন্ন মান ইনপুট দাও যেমন 0, -20, 5 । এবার আরেকটি প্রোগ্রাম লিখোঃ

#include <stdio.h>
int main()
{
    int number = 10;

    
    if(number>5)
    {
        printf("Yes\n");
    }
    if(number>2)
    {
        printf("Yes\n");
    }
    
    return 0;
}

বলতে পারবে এই প্রোগ্রামের আউটপুট কি? একবার চেস্টা করে দেখো? মজার ব্যপার হচ্ছে আউটপুট হলো:
 Yes
 Yes
 কারণ কি? আমরা number এর মান দিয়েছি 10; তাই প্রোগ্রামটি if(number>5) এই লাইনে আসার পর দেখবে number এর মান ২ এর চেয়ে বড় কিনা?
 যেহেতু number 2 এর চেয়ে বড় তাই প্রিন্ট করবে Yes.
 তারপর প্রোগ্রামটি if(number>2) এই লাইনে যাবে আবার প্রিন্ট করবে Yes.
 কিন্তু যে সংখ্যা ৫ এর চেয়ে বড় তা অবশ্যই ২ এর চেয়ে বড়। তাই আমাদের ১ম শর্ত মিলে যাওয়ার পর ২য় শর্ত চেক করার প্রয়োজন নেই। যদি কোন সময় এ রকম অবস্থা আসে যে, আমাদের যেকোন একটা শর্ত মিলে যাওয়ার পর আর পরের কোন শর্ত চেক করতে হবে না , তখন আমরা if  ব্যবহার না করে else if ব্যবহার করবো। 

#include <stdio.h>
int main()
{
    int number = 10;

    
    if(number>5)
    {
        printf("Yes\n");
    }
    else if(number>2)
    {
        printf("Yes\n");
    }
    
    return 0;
}
এবার প্রোগ্রামটি রান করে দেখো একটাই Yes প্রিন্ট হবে। এখন আমরা চাই নাম্বারটা ২ এর চেয়ে ছোট হলে No প্রিন্ট করবে।

#include <stdio.h>
int main()
{
    int number = 10;

    
    if(number>5)
    {
        printf("Yes\n");
    }
    else if(number>2)
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }

    return 0;
}
লক্ষ্য করে দেখো আমি যখন number এর মান ২ এর ছোট হলে No প্রিন্ট করতে বলেছি তখন কোন শর্ত লিখে দেই নি। শুধু else লিখেছি। এর মানে হলো if এবং else if এর শর্ত মিথ্যা হলে else এ যা আছে তা প্রিন্ট হবে। এতক্ষণ আমি যা আলোচনা করলাম তার উদ্দেশ্য if , else if এবং else এর কাজ বোঝানো। আশাকরি if , else if এবং else এর কাজ বুঝে গেছো।

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

এবার আমরা মড অপারেটর ব্যবহার করে উপরের সমস্যাটি সমাধান করবো।

আমরাজানি, কোন সংখ্যাকে ২ দিয়ে ভাগ করলে যদি ভাগশেষ ০ হয় তাহলে সংখ্যা টা জোড়। আর শূন্য না হলে বেজোড়।

এবার নিচের প্রোগ্রামটা দেখে নেইঃ

#include <stdio.h>
int main()
{
    
    int number;

    scanf("%d",&number);

    if(number%2==0)
    {
        printf("Number is Even\n");
    }
    if(number%2!=0)
    {
        printf("Number is Odd\n");
    }

    return 0;
}
২য় if এর মধ্যে != এইটা দেখে কি ভাবছো? যদি আগে থেকে জেনে থাকো তাহলে নিশ্চয় বোঝে গেছো কেনো এটা ব্যবহার করা হয়েছে, হ্যা, আমরা যেভাবে কোন কিছু একটা আরেকটার সমান কি না তা যাচাই করার জন্য == ব্যবহার করি, ঠিক তেমনি কিছু একটা আরেকটার অসমান কি না তা যাচাই করার জন্য != ব্যবহার করি।

এবার দেখে নেই কিভাবে কোডটি কাজ করছেঃ

প্রথমে ইউজারের কাছ থেকে নাম্বারটা ইনপুট নেওয়ার পর কম্পাইলার যখন ১ম if এ আসবে,
তখন দেখবে ইনপুট এ দেওয়া নাম্বার টা ২ দিয়ে ভাগ করলে ভাগশেষ ০ হয় কিনা? যদি এই শর্তটা সত্য হয় তবে  Number is Even
এই লেখাটা আউটপুট দিবে।

তারপর কম্পাইলার ২য় if এ আসবে।
আবার দেখবে ইনপুট দেওয়া নাম্বারটা ২ দিয়ে ভাগ করলে ভাগশেষ ০ ছাড়া অন্য কিছু হয় কিনা?(শুন্য নয় কিনা) যদি এই শর্তটা সত্য হয় তবে  Number is Odd
এই লেখাটা আউটপুট দিবে।

কিন্তু , যদি উপরের প্রথম if সত্য হয় তাহলে ২য় if অবশ্যই মিথ্যা হবে।

 তাই 
if(number%2==0) সত্য হলে আউটপুট আসবে, Number is Even
 এবং
if(number%2!=0) এই শর্তটি মিথ্যা হবে। তাই কম্পাইলার এখানে কোন কাজ করবে না। return 0; তে চলে যাবে। এবং প্রোগ্রাম বন্ধ হয়ে যাবে।
 আবার, যদি প্রথম শর্ত মিথ্যা হয় তবে 
if(number%2==0) এখানে কম্পাইলার কোন আউটপুট দিবে না, ২য় if এ চলে যাবে।
যদি ২য় if সত্য হয় তবে Number is Odd এই অউটপুট দিবে।
 আর যদি ২য় শর্ত ও মিথ্যা হয় তাহলে কি হবে? তাহলে কম্পাইলার return 0 তে চলে যাবে , এবং কোনকিছুই আউটপুট দিবে না।
 উপরের প্রোগ্রামটি আমরা নিচের মতো করেও লিখতে পারিঃ

#include <stdio.h>
int main()
{
    
    int number;

    scanf("%d",&number);

    if(number%2==0)
    {
        printf("Number is Even\n");
    }
    else
    {
        printf("Number is Odd\n");
    }

    return 0;
}
এই প্রোগ্রামটা ঠিক আগের প্রোগ্রামের মতই কাজ করবে। এবং প্রোগ্রাম দুটিও প্রায় একই রকম। পার্থক্যটা হলো Program 2.8 এর ২য় শর্ত if(number%2!=0) টা বদলে Program 2.9 এ আমরা শুধু else ব্যবহার করেছি। তাতে আমাদের প্রোগ্রামটা আগের থেকে আরোও সিম্পল এবং efficient
হয়েছে।

কারণ যদি ১ম শর্ত সত্য হয় তাহলে এখন আর কম্পাইলার ২য় শর্ত চেক করবে না, return 0; তে চলে যাবে, এবং প্রোগ্রাম বন্ধ হয়ে যাবে।
আর যদি ১ম শর্ত মিথ্যা হয় তাহলে ২য় শর্ত মানে else এ চলে যাবে , এবং else এর ভিতরে যে কমান্ড দেওয়া হএছে সে অনুযায়ী আউটপুট দেবে।

তোমার জন্য একটা কাজ রয়েছে তা হলো, উপরের সব প্রোগ্রাম 2.9 এর আগ পর্যন্ত যা দেওয়া হয়েছে তা efficient করে লেখা।
 কিছু নির্দেশনাঃ
১/ শর্ত যদি একটা হয় তবে একটা মাত্র if ব্যবহার করবে।
২/ শর্ত যদি দুইটা হয় তবে একটা if এবং একটা else ব্যবহার করবে।
৩/ শর্ত যদি তিনটা হয় তবে একটা if এবং একটা else if এবং একটা else ব্যবহার করবে।
 ৪/ শর্ত যদি চারটা হয় তবে একটা if এবং দুইটা else if এবং একটা else ব্যবহার করবে।
 ৫/শর্ত যদি পাঁচটা টা হয় তবে একটা if এবং তিনটা else if এবং একটা else ব্যবহার করবে।
 এবার তুমিই বলো ছয়টা শর্তের জন্য কি হবে? একটা if এবং চারটা else if এবং একটা else তাই তো।
তার মানে যতোগুলো শর্ত তার প্রথমটা if শেষেরটা else আর মধ্যের সবগুলো এর জন্য else if ব্যবহার করবে, তখন তোমার প্রোগ্রাম সুন্দরভাবে কাজ করবে এবং দক্ষ হবে।
আজ এ পর্যন্ত কোন কিছু না বোঝলে অবশ্যই কমেন্ট করবে।

Happy Coding :)

Related Posts:

  • Solution of If-else problem (part-1) Problem-1: তিনটি সংখ্যার মধ্যে বড় সংখ্যা নির্ণয়ের প্রোগ্রাম লিখো। Solution: #include <stdio.h> int main() { int num1, num2, num3, max; /* Input three numbers from user */ printf("Enter three numbers… Read More
  • প্রোগ্রামে অপারেটরের ব্যবহারআমরা আগের পোস্টে অপারেটর নিয়ে আলোচনা করেছিলাম। আজকে আমরা লজিক্যাল অপারেটর ব্যবহার করে কিছু প্রোগ্রাম দেখবো। আমরা নেস্টেড ইফ এলস ব্যবহার করে ৩ টি সংখ্যা থেকে বড় সংখ্যা নির্ণয় করেছিলাম। program 3.1 এ। বোঝার সুবিধার্তে আম… Read More
  • অপারেটর দিয়ে অপারেশন (অপারেটর পরিচিতি) টাইটেল দেখে কি কিছুটা আশর্য হয়েছো? না তোমাকে এবার কোন ডক্তারি অপারেশন করতে হবে না। তবে প্রোগ্রামিং এর কিছু অপারেশন আমরা করবো। আর মজার ব্যাপার হলো তোমরা আলরেডি অনেক অপারেশন করে ফেলেছো। সি তে অনেকগুলা অপারেটর আছে। সি লজি… Read More
  • লজিক্যাল স্টেটমেন্ট (NESTED IF-ELSE)গত পর্বের দেওয়া প্রোগ্রামগুলো আশা করি সবাই efficient  করে নতুনভাবে করেছো। আজকে আমরা আলোচনা করবো নেস্টেড ইফ এলস নিয়ে। Nested if-else কি? নাম শুনে কঠিন মনে হলেও আসলে এটা তেমন কিছু না। একটা if কিংবা else if অথবা else… Read More
  • ইফ এলস নিয়ে কিছু সহজ সমস্যা!! (IF ELSE Exercise)  তিনটি সংখ্যার মধ্যে বড় সংখ্যা নির্ণয়ের প্রোগ্রাম লিখো। একটি সংখ্যা পজেটিভ , নেগেটিভ নাকি জিরো তা নির্ণয় করো।  কোন সংখ্যাকে ৫ ও ১১ দিয়ে ভাগ করা যাবে কি না? তা নির্ণয়ের প্রোগ্রাম লেখো। কোন সংখ্যা জোড় কি বেজো… Read More

0 comments:

Post a Comment