Tuesday, 5 September 2017

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: ");
    scanf("%d%d%d", &num1, &num2, &num3);
    

    if(num1 > num2)
    {
        if(num1 > num3)
        {
            /* If num1 > num2 and num1 > num3 */
            max = num1;
        }
        else
        {
            /* If num1 > num2 but num1 > num3 is not true */
            max = num3;
        }
    }
    else
    {
        if(num2 > num3)
        {
            /* If num1 is not > num2 and num2 > num3 */
            max = num2;
        }
        else
        {
            /* If num1 is not > num2 and num2 > num3 */
            max = num3;
        }
    }
    
    /* Print maximum value */
    printf("Maximum among all three numbers = %d", max);

    return 0;
}

2.একটি সংখ্যা পজেটিভ , নেগেটিভ নাকি জিরো তা নির্ণয় করো।

#include <stdio.h>

int main()
{
    int num;
    
    /* Input number from user */
    printf("Enter any number: ");
    scanf("%d", &num);
    

    if(num > 0)
    {
        printf("Number is POSITIVE");
    }
    if(num < 0)
    {
        printf("Number is NEGATIVE");
    }
    if(num == 0)
    {
        printf("Number is ZERO");
    }

    return 0;
}
 
3.কোন সংখ্যাকে ৫ ও ১১ দিয়ে ভাগ করা যাবে কি না? তা নির্ণয়ের প্রোগ্রাম লেখো।

#include <stdio.h>

int main()
{
    int num;

    /* Input number from user */
    printf("Enter any number: ");
    scanf("%d", &num);


    /*
     * If  num modulo division 5 is 0 
     * and num modulo division 11 is 0 then
     * the number is divisible by 5 and 11 both
     */
    if((num % 5 == 0) && (num % 11 == 0))
    {
        printf("Number is divisible by 5 and 11");
    }
    else
    {
        printf("Number is not divisible by 5 and 11");
    }

    return 0;
}

4.কোন সংখ্যা জোড় কি বেজোড় তা নির্ণয়ের প্রোগ্রাম লিখো।



#include <stdio.h>

int main()
{
    int num;

    /* Input number from user */
    printf("Enter any number to check even or odd: ");
    scanf("%d", &num);
    
    /* Check if the number is divisible by 2 then it is even */
    if(num % 2 == 0)
    {
        /* num % 2 is 0 */
        printf("Number is Even.");
    }
    else
    {
        /* num % 2 is 1 */
        printf("Number is Odd.");
    }

    return 0;
}

5.একটি বছর লিপ ইয়ার কি না? তা নির্ণয়ের প্রোগ্রাম লিখো।





#include <stdio.h>

int main()
{
    int year;

    
    printf("Enter a year: ");
    scanf("%d", &year);
    
    
    if((year % 4 == 0)&&(year%200 !=0) ||(year%400==0))
    {
       
        printf("%d is a Leap Year.",year);
    }
    else
    {
        
        printf("%d is not a leap year",year);
    }

    return 0;
}
 
 
6.একটি ক্যারেক্টার অ্যালফাবেট কি না? তা নির্ণয়ের প্রোগ্রাম লিখো।

#include <stdio.h>

int main()
{
    char ch;
    
    /* Input a character from user */
    printf("Enter any character: ");
    scanf("%c", &ch);
    

    if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))
    {
        printf("Character is an ALPHABET.");
    }
    else
    {
        printf("Character is NOT ALPHABET.");
    }

    return 0;
}


Monday, 4 September 2017

ইফ এলস নিয়ে কিছু সহজ সমস্যা!! (IF ELSE Exercise)





  1.  তিনটি সংখ্যার মধ্যে বড় সংখ্যা নির্ণয়ের প্রোগ্রাম লিখো।
  2. একটি সংখ্যা পজেটিভ , নেগেটিভ নাকি জিরো তা নির্ণয় করো।
  3.  কোন সংখ্যাকে ৫ ও ১১ দিয়ে ভাগ করা যাবে কি না? তা নির্ণয়ের প্রোগ্রাম লেখো।
  4. কোন সংখ্যা জোড় কি বেজোড় তা নির্ণয়ের প্রোগ্রাম লিখো। 
  5. একটি বছর লিপ ইয়ার কি না? তা নির্ণয়ের প্রোগ্রাম লিখো।
  6.  একটি ক্যারেক্টার অ্যালফাবেট কি না? তা নির্ণয়ের প্রোগ্রাম লিখো।
  7. একটি অ্যালফাবেট VOWEL নাকি CONSONENT ? তা নির্ণয়ের প্রোগ্রাম লিখো।
  8. যেকোন ক্যারেক্টার ইউজারের কাছ থেকে ইনপুট নাও। এবার ক্যারেক্টার টি  ALPHABET বা DIGIT বা Special Character  কিনা? তা নির্ণয়ের প্রোগ্রাম লিখো।
  9. একটি অক্ষর বড় হাতের অক্ষর নাকি ছোট হাতের তা নির্ণয়ের প্রোগ্রাম লিখো।
  10. ইউজারের কাছ থেকে টাকা ইনপুট নাও এবং ডলারে কনভার্ট করার প্রোগ্রাম লিখ। যদি ডলারের পরিমাণ $10 এর কম হয় তবে প্রতি ডলার ৮০ টাকা। আর যদি ডলারের পরিমাণ $5 এর বেশি হয় তবে প্রতি ডলার ৮৫ টাকা ধরে। 
  11. একটি ত্রিভুজ এর তিনটি কোণের মান ইনপুট নাও। এবং ত্রিভুজটি সবগুলা বাহু সমান কি না? তা নির্ণয়ের প্রোগ্রাম লিখো।
12. একজন ছাত্রের ৫ বিষয়ের পরীক্ষার নম্বর ইনপুট নাও।


  • যদি ৫ বিষয়ের নম্বরের গড় ৮০%  এর সামান বা  উপরে থাকে  তাহলে আউটপুট দেখাও A+.
  • যদি ৫ বিষয়ের নম্বরের গড় ৭০%  এর সামান বা  উপরে থাকে  তাহলে আউটপুট দেখাও A.
  • যদি ৫ বিষয়ের নম্বরের গড় ৬০%  এর সামান বা  উপরে থাকে  তাহলে আউটপুট দেখাও A-.
  • যদি ৫ বিষয়ের নম্বরের গড় ৫০%  এর সামান বা  উপরে থাকে  তাহলে আউটপুট দেখাও B.
  • যদি ৫ বিষয়ের নম্বরের গড় ৫০%  এর কম থাকে  তাহলে আউটপুট দেখাও    F .

প্রোগ্রামে অপারেটরের ব্যবহার

আমরা আগের পোস্টে অপারেটর নিয়ে আলোচনা করেছিলাম। আজকে আমরা লজিক্যাল অপারেটর ব্যবহার করে কিছু প্রোগ্রাম দেখবো।

আমরা নেস্টেড ইফ এলস ব্যবহার করে ৩ টি সংখ্যা থেকে বড় সংখ্যা নির্ণয় করেছিলাম। program 3.1 এ।




বোঝার সুবিধার্তে আমি আগের প্রোগ্রামটি আবার হুবহু তুলে ধরছি ।


#include <stdio.h>

int main()
{
    /* ৩ টি ইন্টজার ভেরিয়েবল ডেক্লিয়ার */
    int num1, num2, num3;

    /* ইউজারের কাছ থেকে ইনপুট গ্রহণ */
    printf("Enter three numbers: ");
    scanf("%d%d%d", &num1, &num2, &num3);

    if(num1 > num2)
    {
        if(num1 > num3)
        {
            /* যদি num1>num2 এবং num1>num3 হয় */
            printf("Num1 is max.");
        }
        else
        {
            /* যদি num1>num2 হয় কিন্তু num1<num3 হয় */
            printf("Num3 is max.");
        }
    }
    else
    {
        if(num2 > num3)
        {
            /* যদি num1<num2 হয় এবং num2>num3 */
            printf("Num2 is max.");
        }
        else
        {
            /* যদি num1<num2 এবং num2<num3 */
            printf("Num3 is max.");
        }
    }

    return 0;
}
এই প্রগ্রামটি আমরা && অপারেটর ব্যবহার করেও করতে পারি।

#include<stdio.h>
int main()
{
   int num1,num2,num3;
   scanf("%d %d %d",&num1,&num2,&num3);

   if(num1>num2 && num1>num3)
   {
       printf("Num1 is max");
   }
   else if(num2>num1 && num2>num3)
   {
       printf("Num2 is max");
   }
   else
   {
       printf("Num3 is max");
   }
   return 0;
}
 
উপরের দুইটা প্রোগ্রামের কাজ একই। প্রথম প্রোগ্রামে (3.1) এ আমরা নেস্টেড কন্ডিশন ব্যবহার করেছি। কিন্তু প্রোগ্রাম (3.2) তে আমরা && (অ্যান্ড অপারেটর) ব্যবহার করে দুটি শর্ত একসাথে জোড়ে দিয়েছি। && এর পুর্বের এবং পরের দুইটি শর্ত সত্য হলেই তার পরের { } এর ভিতরের কাজ করবে। কোন একটি শর্ত মিথ্যা হলেই কম্পাইলার পরবর্তী ধাপে চলে যাবে। এবার দেখে নেই কিভাবে উপরের প্রোগ্রামটি (3.2) কাজ করছে।



  • মনেকরি,  num1 = 10, num2 = 20, num3 = 15
  •  কম্পাইলার  if(num1>num2 && num1>num3) এ আসার পর দেখবে num1>num2 এই অংশটা মিথ্যা num1>num3 এই অংশটাও মিথ্যা তাই এখানে কোন কাজ করবে না। else if  এ চলে যাবে।
  •  else if এ আসার পর (num2>num1 && num2>num3) এই কন্ডি↕শন চেক করবে। এবার দেখবে num2>num1 এই অংশ সত্য আবার num2>num3 এই অংশ ও সত্য। তাই { } এর ভিতরের কাজ করবে।
এরপর কম্পাইলার return 0; তে আসবে এবং প্রোগ্রাম বন্ধ হয়ে যাবে।


এবার আরেকটি প্রোগ্রাম দেখিঃ

#include<stdio.h>
int main()
{
   int a = 5,b = 10,c = 15;

   if(b>a && b>c)
   {
       printf("b is max");
   }
   else if(a>b && a>c)
   {
       printf("a is max");
   }
   else
   {
       printf("c is max");
   }
   return 0;
}
এখন তুমি বলো উপরের প্রোগ্রামের আউটপুট কী হবে?


  •  if(b>a && b>c)  এই লাইনে আসার পর কম্পাইলার দেখবে b>a কন্ডিশনের এই অংশটি সত্য। কিন্ত্য && এর পর b>c এই অংশটি মিথ্যা কারণ 10 তো 15 এর চেয়ে বড় নয়। তাই একটি মিথ্যা হওয়ার কারণে কম্পাইলার  এখানে কোন কাজ করবে না। && অপারেটরের উভয় পাশের শর্ত সত্য হলেই শুধুমাত্র কমান্ড গ্রহণ করবে।
  •   এবার কম্পাইলার else if এ চলে আসবে দেখবে , a>b শর্তটি মিথ্যা a>c শর্তটিও মিথ্যা কম্পাইলার এবার ও এখানে কোন কাজ করবে না।
  •   else এ চলে আসবে এবং { } এর ভিতরের নির্দেশ মতো কাজ করবে।


এবার আমরা আরেকটা অপারেটর নিয়ে কাজ করবো। একে বলা হয় অর অপারেটর। ( ।। )  পাশাপাশি দুইটা লম্বা দাড়ি একসাথে দিলে যেমন হয় অনেকটা সেরকম। অর অপারেটর এর দুইপাশের যেকোন একটি শর্ত সত্য হলেই সেটি নির্দেশ অনুসরণ করে কাজ করে।

 

#include<stdio.h>
int main()
{
   int a = 5,b = 10;

   if(a==5 || b==5)
   {
       printf("This is 5\n");
   }
   else
   {
      printf("This is 10\n);
   } 
   return 0;
}
উপরের প্রোগ্রামের আউটপুট কী হবে বলো তো?
যেহেতু a==5 এই শর্তটি সত্য তাই || এর পর b==5 এই শর্ত মিথ্যা হওয়ার পরও আউটপুট আসবে

This is 5

এতক্ষণে নিশ্চয়ই অপারেটর , নেস্টেড ইফ এলস এবং ইফ এলস নিয়ে আর কোন শংশয় নেই।

তারপর ও কোন কিছু না বোঝলে কমেন্ট করবে।আগামী পর্বে থাকবে কিছু সহজ সমস্যা।

happy Coding ☺😎

অপারেটর দিয়ে অপারেশন (অপারেটর পরিচিতি)

টাইটেল দেখে কি কিছুটা আশর্য হয়েছো? না তোমাকে এবার কোন ডক্তারি অপারেশন করতে হবে না। তবে প্রোগ্রামিং এর কিছু অপারেশন আমরা করবো। আর মজার ব্যাপার হলো তোমরা আলরেডি অনেক অপারেশন করে ফেলেছো।



সি তে অনেকগুলা অপারেটর আছে।

সি লজিক্যাল অপারেটর

সি প্রোগ্রামিং এ &&, || এবং ! অপারেটরসমূহকে লজিক্যাল(Logial) অপারেটর বলা হয়। সি প্রোগ্রামিং এ সিদ্ধান্ত গ্রহণে(in decision making ) সচারচর লজিক্যাল অপারেটর ব্যবহৃত হয়।
অপারেটর অপারেটরের অর্থ উদাহরণ(int a=11, b=5, c =15) ফলাফল
&& Logial AND - উভয় অপারেন্ড true হলে True  (a==b) && (b>c) True
|| Logical OR - যেকোনো একটি অপারেন্ড true হলে True (b==c) || (a>c) False
! Logical NOT - অপারেন্ড false হলে True !(b==c) True

সি রিলেশনাল অপারেটর

সি প্রোগ্রামিং এ রিলেশনাল অপারেটর(relational operator) দুটি অপারেন্ডের মধ্যে সম্পর্ক যাচাই করে।
অপারেটর অপারেটরের অর্থ উদাহরণ(int a=11, b=5) ফলাফল
== Equal to a == b False
> Greater than a > b True
< Less than a < b False
!= Not equal to a != b True
>= Greater than or equal to a >= b True
<= Less than or equal to a <= b False

সি এসাইনমেন্ট অপারেটর

ভ্যারিয়েবলে ভ্যালু এসাইন করা বা জমা রাখার জন্য এসাইনমেন্ট(assignment) অপারেটর ব্যবহৃত হয়। সবচেয়ে বেশী ব্যবহৃত এসাইনমেন্ট অপারেটর হলো =
অপারেটর উদাহরন(int a=11, b=5) একই রকম ফলাফল
= a = b a = b 5
+= a += b a = a+b 16
-= a -= b a = a-b 6
*= a *= b a = a*b 55
/= a /= b a = a/b 2
%= a %= b a = a%b 1

সি এরিথমেটিক অপারেটর

এরিথমেটিক অপারেটর গাণিতিক হিসাব নিকাশ যেমন- যোগ, বিয়োগ, গুন এবং ভাগ ইত্যাদি কার্য সম্পন্ন করে।
অপারেটর অপারেটেরের অর্থ উদাহরণ(int a=11, b=5) ফলাফল
+ যোগ বা ইউনারী(unary) যোগ a + b 16
- বিয়োগ বা ইউনারী বিয়োগ a - b 6
* গুন a * b 55
/ ভাগ a / b 2
% ভাগের পরে ফলাফল ভাগশেষ(মডিউলো অপারেটর) a % b 1

Sunday, 3 September 2017

লজিক্যাল স্টেটমেন্ট (NESTED IF-ELSE)

গত পর্বের দেওয়া প্রোগ্রামগুলো আশা করি সবাই efficient  করে নতুনভাবে করেছো। আজকে আমরা আলোচনা করবো নেস্টেড ইফ এলস নিয়ে।



Nested if-else কি?
নাম শুনে কঠিন মনে হলেও আসলে এটা তেমন কিছু না। একটা if কিংবা else if অথবা else এর ভিতরে আরেকটা  if কিংবা else if অথবা else বসিয়ে দিলেই তা নেস্টেড হয়ে যায়।

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

#include <stdio.h>

int main()
{
    /* ৩ টি ইন্টজার ভেরিয়েবল ডেক্লিয়ার */
    int num1, num2, num3;

    /* ইউজারের কাছ থেকে ইনপুট গ্রহণ */
    printf("Enter three numbers: ");
    scanf("%d%d%d", &num1, &num2, &num3);

    if(num1 > num2)
    {
        if(num1 > num3)
        {
            /* যদি num1>num2 এবং num1>num3 হয় */
            printf("Num1 is max.");
        }
        else
        {
            /* যদি num1>num2 হয় কিন্তু num1<num3 হয় */
            printf("Num3 is max.");
        }
    }
    else
    {
        if(num2 > num3)
        {
            /* যদি num1<num2 হয় এবং num2>num3 */
            printf("Num2 is max.");
        }
        else
        {
            /* যদি num1<num2 এবং num2<num3 */
            printf("Num3 is max.");
        }
    }

    return 0;
}
উপরের প্রোগ্রামে  scanf   পর্যন্ত নিশ্চয় বোঝতে পারছো। ধরে নেই ইউজার num1 = 5     num3 = 15  num2 = 10     ইনপুট দিয়েছেন।

  • প্রথমে কম্পাইলার বাইরের if কন্ডিশন (শর্ত) -> if(num1 > num2) চেক করবে। যেহেতু num1=5 এবং num2=10,সুতরাং num1>num2 এই শর্তটি মিথ্যা।
  • তাই কম্পাইলার এই if এ কোন কাজ করবেনা সম্পূর্ণ if ব্লকের পরে বাইরের else এ চলে যাবে।
  • এখন কম্পাইলার বাইরের else  কন্ডিশন (শর্ত) এ আসবে। তার পর else এর ভিতরের if(num2 > num3) চেক করবে। যেহেতু num2 = 10 এবং num3 = 15,সুতরাং num2 > num3 এই শর্তটি ও মিথ্যা হবে।
  • সুতরাং বাইরের else এর ভিতরের if মিথ্যা হবে, এখন কম্পাইলার ভিতরের else এ চলে যাবে।
  • এই else এ আসার পর দেখবে শুধু   printf("Num3 is max.");   এই স্টেটমেন্ট দেওয়া আছে। তাই আউটপুট আসবে   Num3 is max.
  •  কম্পাইলার return 0;  তে চলে যাবে , এবং প্রোগ্রাম শেষ হয়ে যাবে।
আশাকরি , বোঝতে পেরেছো। আর যদি কোন সমস্যা হয় তাহলে অবশ্যই কমেন্ট করবে।

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 :)

Wednesday, 30 August 2017

লজিক্যাল স্টেটমেন্ট (if ,else if and else)

কোন সমস্যাকে যুক্তির ভিত্তিতে সমাধান করতে আমরা if , else if , else ব্যবহার করি । এদেরকে লজিক্যাল স্টেট্মেন্ট বলা হয়।


যেমন: if ব্যবহার করে সমাধান করা যায় এমন একটি প্রোগ্রাম আমরা দেখবো,

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

উপরের প্রোগ্রামে আমরা number নামের ভেরিয়েবলটির মধ্যে একটি মান ইনপুট নিয়েছি । তারপর চেক করেছি আমাদের ইনপুট নেওয়া নাম্বারটি ১০ কি না?! যদি ১০ হয় তাহলে প্রোগ্রামটি This is Ten লেখাটি প্রিন্ট করবে।
আর যদি ইনপুট নেওয়া নাম্বারটি ১০ না হয় তাহলে কি হবে ?
প্রোগ্রাম রান করবে ঠিকই কিন্তু কিছুই প্রিন্ট করবে না।
কিন্তু আমরা চাই , নাম্বারটি ১০ না হলে যাতে কম্পিউটার আমাদের জানিয়ে দেয় যে এটি ১০ না। তাহলে , নিচের প্রোগ্রামটি দেখোঃ


#include <stdio.h>
int main( )
{
    int number;
    scanf("%d", &number);
    if(number == 10)
    {
        printf("This is Ten\n");
    }
    else
    {
        printf("This is not Ten\n");
    }
    return 0;
}
এবার কিন্তু ১০ ইনপুট না দিলে আমরা অউটপুট হিসেবে This is not Ten এই লেখাটি দেখতে পাবো! এবার চলো প্রোগ্রামটি কিভাবে কাজ করছে দেখে নেয়া যাক।
প্রথমে প্রোগ্রামটি রান করার পর ইউসারের কাছে একটি নাম্বার ইনপুট চাইবে, ধরে নাও আমরা 10 ইনপুট দিয়েছি, তাহলে প্রোগ্রামটি if(number == 10) এই লাইনে আসার পর দেখবে number এর মান 10 কিনা, যেহেতু আমরা 10 ইনপুট দিয়েছি তাই if(number == 10) কথাটি সত্য, সুতরাং This is Ten প্রিন্ট করবে।
আর যদি আমরা 10 ইনপুট না দিয়ে অন্য কিছু দিতাম? মনেকরো 20 ইনপুট দিলাম তাহলে প্রোগ্রামটি if(number == 10) এই লাইনে আসার পর দেখবে number এর মান 10 কিনা, যেহেতু আমরা 20 ইনপুট দিয়েছি তাই if(number == 10) কথাটি মিথ্যা, এখন প্রোগ্রামটি else এ চলে যাবে, এবং দেখবে সেখানে printf(“This is not Ten\n”); এই স্টেমেন্ট রয়েছে সুতরাং This is not Ten প্রিন্ট করবে।
 আচ্ছা আমরা এখন চাই আমরা যে মান ইনপুট দিবো সেই মান স্ক্রিনে দেখাবে, অনেকটা এই রকম যদি ১০ ইনপুট দেই তাহলে লেখাটা আসবে This is number 10.
 হয়তো ভাবছো Ten এর জায়গায় 10 লিখে দিলেই তো হয় কিন্তু মজাটা হচ্ছে এবার আমরা এ ব্যপার টা কম্পিউটারের হাতে ছেড়ে দিবো। তাহলে নিচের প্রোগ্রামটি লিখে ফেলো ঝটপটঃ


#include <stdio.h>

int main( )
{
    int number;
    scanf("%d", &number);
    if(number == 10)
    {
        printf("This is %d\n",number);
    }
    else
    {
        printf("This is not %d\n",number);
    }
    return 0;
}


যেহেতু number একটি ইন্টিজার টাইপ ভেরিয়েবল তাই ফরম্যাট স্পেসিফায়ার হিসেবে আমরা %d ব্যবহার করেছি।
যদি আমরা number ভেরিয়েবল টা ডাবল টাইপের নিতাম তাহলে ফরম্যাট স্পেসিফায়ার হিসেবে %lf ব্যবহার করতাম । পরের কোন পোস্টে ফরম্যাট স্পেসিফায়ার নিয়ে বিস্তারিত আলোচনা করবো।