অপারেটর এর ধারনা


অপারেটর এর ধারনা অপারেটর
আমরা ইতোমধ্যেই দেখেছি যে কন্সটান্ট, ভ্যারিয়েবল, এরে এলিমেন্টস এবং ফাংশন রেফারেন্সসমূহ বিভিন্ন অপারেটর এর সাহায্যে একত্রিত করে এক্সপ্রেশন তৈরি করা হয়। সি তে যেসকল অপারেটর রয়েছে তাদেরকে বেশ কয়েক ভাগ্যে ভাগ করা যায়। যেমন এরিথমেটিক অপারেটর, ইউনারি অপারেটর, রিলেশনাল লজিক্যাল অপারেটর, এসাইনমেন্ট অপারেটর, কন্ডিশনাল অপারেটর ইত্যাদি। যে সকল ডাটা আইটেম এর উপর অপারেটর সমূহ কাজ করে, তাদের বলা হয় অপারেন্ড। 

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

সি তে টি এরিথমেটিক অপারেটর রয়েছে,এগুলো হলঃ 
  1. + (যোগ
  2. - (বিয়োগ
  3. * (গুন
  4. / (ভাগ
  5. % (ইন্টেজার ভাগ্যের পর ভাগশেষ)
% অপারেটরকে অনেক ক্ষেত্রে মডিউলাস অপারেটর বলা হয়। সি তে কোন এক্সপনেনশিয়াল অপারেটর নেই, কিন্তু এক্সপনেনশিয়াল অপারেশন করতে pow নামে একটি লাইব্রেরি ফাংশন রয়েছে। এরিথমেটিক অপারেটরগুলোর অপারেন্ডগুলো অবশ্যই সংখ্যা হতে হবে। সুতরাং অপারেন্ডগুলো ইন্টেজার বা ভগ্নাংশ সংখ্যা হতে হবে। 


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

অপারেন্ডগুলো ক্যারেক্টার টাইপ হলে সমস্যা নেই যেহেতু ক্যারেক্টার আসলে ইন্টেজার সংখ্যা দিয়েই প্রকাশ করা হয়। উদাহরণ হিসেবে বলা যায়, একটি ক্যারেক্টার এর সাথে যদি যোগ করা হয়, তাহলে তা আসলে ক্যারেক্টার এর সাংখ্যিক মানের সাথে যোগ করলে যে ক্যারেক্টারের মান দ্বারায় সেই ক্যারেক্টার বোঝানোর সামিল। যেমন A + 1 এর মান হবে B.
আপনি যদি A থেকে Z পর্যন্ত স্ক্রিন প্রিন্ট করতে চান, তাহলে এভাবে সংখ্যার ব্যাবহার করে করতে পারেন। যেমন আপনি চাইলে A এর মান থেকে শুরু করে Z এর মান পর্যন্ত লুপ চালিয়ে প্রতিবার ক্যারেক্টার ভ্যারিয়েবলে এক যোগ করে প্রিন্ট করতে পারেন। 


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

ভাগশেষ বা মডিউলাস অপারেটর এর অপারেন্ডগুলো ইন্টেজার হতে হবে এবং দ্বিতীয় অপারেন্ড অবশ্যই হতে পারবেনা। যেমন একটি ভ্যারিয়েবল num এর মান যদি হয় তাহলে num%3 এর মান হবে ২। একই ভাবে একটি সংখ্যা জোড় কি বেজোড় তা বোঝা সম্ভব তাকে দিয়ে ভাগ করলে ভাগশেষ নাকি হয়। 


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

ভাগ অপারেটর একটু ভিন্নভাবে কাজ করে। যেমন দিয়ে ভাগ যেহেতু অনির্নেয়, তাই দিয়ে ভাগ করলে আপনার প্রোগ্রাম রানটাইম এরর দেখাবে। এছাড়া আপনার অপারেন্ড দুটি যদি ইন্টেজার হয়, তাহলে ভাগফল সবসময় ইন্টেজার হবে। অর্থাৎ 3/2 এর মান 1.5 না হয়ে 1 হবে। একই ভাবে 11/3 এর মান 3 হবে। আপনি যদি এই ক্ষেত্রে ভগ্নাংশ মান চান, তাহলে অন্তত একটি অপারেন্ড ফ্লোটিং পয়েন্ট বা ডাবল টাইপ এর হতে হবে। যেমন 3/2.0 অথবা 3.0/2 অথবা 3.0/2.0 এর মান হবে 1.5. সুতরাং আপনি যদি দুটি ইন্টেজার ভ্যারিয়েবলের ভাগফল ভগ্নাংশ চান, তাহলে হয় যেকোন একটি ভ্যারিয়েবলকে float বা double কাস্ট করতে পারেন। 


ইউনারী অপারেটর অপারেটর

ইউনারী অপারেটরগুলো একটিমাত্র অপারেন্ড এর উপর কাজ করে এবং সেই অপারেন্ড এর মানকে পরিবর্তন করে দেয়। সাধারণত ইউনারি অপারেটরগুলো অপারেন্ড এর পুর্বে বসে, যদি কিছু কিছু ক্ষেত্রে ইউনারি অপারেটর অপারেন্ড এর পরে বসে। যেমন কোন অপারেন্ড এর পুর্বে মাইনাস ( - ) সাইন একটি ইউনারি অপারেটর। এই অপারেটর একটি পজিটিভ সংখ্যাকে নেগেটিভ একটি নেগেটিভ সংখ্যাকে পজিটিভ করে দেয়। যেমনঃ -743, -0.2, - (x + y) ইত্যাদি। 
আরও দুটি বহুল ব্যাবহৃত ইউনারি অপারেটর হল ইনক্রিমেন্ট ++ এবং ডিক্রিমেন্ট -- অপারেটর। ++ অপারেটর তার অপারেন্ড এর মান বাড়িয়ে দেয় আর -- অপারেটর তার অপারেন্ড এর মান কমিয়ে দেয়। যেমন একটি ভ্যারিয়েবল num এর মান যদি ১০ হয়, তাহলে num++ অথবা ++num করার পর তার ভ্যালু হবে ১১. একই ভাবে num-- অথবা --num করলে তার ভ্যালু দাঁড়াবে ৯। এক্ষেত্রে বলে নেয়া ভাল ++ -- অপারেন্ড এর আগে পরে যেকোন স্থানেই বসানো যায়। তবে আগে আর পরে বসানোর মাঝে কিছুটা পার্থক্য রয়েছে। নিচের উদাহরণটি দেখলে ব্যাপারটি পরিষ্কার হবেঃ 
#include <stdio.h>
 
int main() {
    int num1, num2, result1, result2;
 
    num1 = 1;
    num2 = 1;
 
    result1 = num1++;
    result2 = ++num2;
 
    printf("Result1 = %d, num1 = %d\n", result1, num1);
    printf("Result2 = %d, num2 = %d\n", result2, num2);
 
    return 0;
}






এই প্রোগ্রামটি রান করালে দেখা যাবে num1 এবং num2 দুইটি ভ্যারিয়েবলের মানই করে বেড়েছে, কিন্তু result1 এবং result2 এই দুটির মান ভিন্ন। কারণ হল, num1++ আগে num এর ভ্যালু result1 এসাইন করে, তারপর num1 এর ভ্যালু বাড়ায়। আর ++num2 আগে num2 এর ভ্যালু বাড়ায় তারপরে তা result2 তে এসাইন করে। 


বিটওয়াইজ অপারেটর অপারেটর, বিটওয়াইজ, বিট

যে সকল অপারেটর ব্যবহার করে বিট ম্যানিপুলেশন করা হয়, তাদের বিটওয়াইজ অপারেটর বলা হয়। সি তে ধরনের বিটওয়াইজ অপারেটর আছে -
  &
  বিটওয়াইজ AND
  |
  বিটওয়াইজ inclusive OR
  ^
  বিটওয়াইজ XOR (eXclusive OR)
  <<
  লেফট সিফট (left shift)
  >>
  লেফট সিফট (right shift)
  ~
  বিটওয়াইজ NOT (one's complement) (unary)


বিটওয়াইজ AND অপারেটর, AND, বিটওয়াইজ

সি তে বিটওয়াইজ AND অপারেটরকে একটি & দ্বারা প্রকাশ করা হয়। বিটওয়াইজ AND এর মাধ্যমে দুইটি সংখ্যার প্রতিটি বিট -এর লজিকাল AND বের করা হয়। 
     01001000 & 
     10111000
     ---------------
     00001000



বিটওয়াইজ OR অপারেটর, বিটওয়াইজ, OR

সি তে বিটওয়াইজ OR অপারেটরকে একটিদ্বারা প্রকাশ করা হয়। বিটওয়াইজ OR এর মাধ্যমে দুইটি সংখ্যার প্রতিটি বিট -এর লজিকাল OR বের করা হয়। 
বিটওয়াইজ OR
 bit a
 bit b
 a | b (a OR b)
 0
 0
 0
 0
 1
 1
 1
 0
 1
 1
 1
 1


বিটওয়াইজ XOR অপারেটর, বিটওয়াইজ, XOR

সি তে বিটওয়াইজ XOR অপারেটরকে একটিদ্বারা প্রকাশ করা হয়। বিটওয়াইজ XOR এর মাধ্যমে দুইটি সংখ্যার প্রতিটি বিট -এর লজিকাল XOR বের করা হয়। 
বিটওয়াইজ XOR
 bit a
 bit b
 a ^ b (a XOR b)
 0
 0
 0
 0
 1
 1
 1
 0
 1
 1
 1
 0


বিটওয়াইজ NOT বিটওয়াইজ NOT

সি তে বিটওয়াইজ NOT অপারেটরকে একটিদ্বারা প্রকাশ করা হয়। বিটওয়াইজ NOT এর মাধ্যমে দুইটি সংখ্যার প্রতিটি বিট -এর লজিকাল NOT বের করা হয়। 
bit a
~a (complement of a)
0
1
1
0



বিটওয়াইজ রাইট সিফট বিটওয়াইজ রাইট সিফট

সি তে বিটওয়াইজ রাইট সিফট অপারেটরকে একটি  >> দ্বারা প্রকাশ করা হয়। বিটওয়াইজ রাইট সিফট এর মাধ্যমে একটি সংখ্যার  লজিকাল রাইট সিফট বের করা হয়। 
 int i = 4; /*  100 -> 4*/
 int j = i >> 1; /* 10 -> 2 */


লজিকাল অপারেটর অপারেটর, লজিকাল

সি তে বিটওয়াইজ অপারেটর এর অনুরূপ লজিকাল অপারেটর ৪টি  
Bitwise
Logical
a & b
a && b
a | b
a || b
a ^ b
a != b
~a
!a




টার্নারি অপারেটর -  অপারেটর, টার্নারি

টার্নারি (?) অপারেটর ব্যবহার করে সহজে কনডিশনাল স্টেটমেন্ট লেখা যায়। টার্নারি অপারেটরে টি অংশ থাকে প্রথমে থাকে condition তারপর true block তারপর থাকে false block. টার্নারি অপারেটরে বেসিক স্ট্রাকচার নিম্নের মতঃ 

condition ? True_Block : False_Block


টার্নারি অপারেটর -  অপারেটর, টার্নারি

এই পাঠে আমরা প্রথমে দেখব if else ব্যবহার করে একটি নাম্বার জোড় নাকি বিজোড় তার কোড। তারপর দেখব সেই কাজটি কিভাবে টার্নারি অপারেটর ব্যবহার করে করা যায়।
 
#include <stdio.h>
int main()
{
    bool yes = true | false ;
    if(yes)
    {
        printf("Yes\n");
    }
    else
    {
        printf("No\n");
    }
    return 0;
}
 
টার্নারি অপারেটর দিয়ে এই কাজটি এক লাইনে করে ফেলা যায়।
 
#include <stdio.h>
int main(){

    bool yes = true | false ;

    printf("%s\n",yes ? "Yes" : "No"); 

    return 0; 

} 



ইন্টিজার যোগ অপারেটর, যোগ, ইন্টিজার

সি তে দুটি ইন্টিজার যোগ করতে + ব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ
int a = 15;

int b = 10;

int c = a + b;


ফ্লটিং পয়েন্ট সংখ্যা যোগ ফ্লটিং পয়েন্ট সংখ্যা যোগ

সি তে দুটি ফ্লটিং পয়েন্ট সংখ্যা যোগ করতে + ব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ
double a = 15;

double b = 10;

double c = a + b;


লং লং ইন্টিজার যোগ অপারেটর, যোগ, লং লং ইন্টিজার

সি তে দুটি লং লং ইন্টিজার যোগ করতে + ব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ
long long int a = 15;
long long int b = 10;
long long int c = a + b;


ফ্লটিং পয়েন্ট সংখ্যা বিয়োগ অপারেটর, ফ্লটিং পয়েন্ট সংখ্যা বিয়োগ

সি তে দুটি ফ্লটিং পয়েন্ট সংখ্যা বিয়োগ করতে - ব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ

double a = 15;

double b = 10;

double c = a - b;


ফ্লটিং পয়েন্ট সংখ্যা গুণ অপারেটর, ফ্লটিং পয়েন্ট সংখ্যা গুণ

সি তে দুটি ফ্লটিং পয়েন্ট সংখ্যা গুণ করতেব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ
double a = 15;

double b = 10;

double c = a * b;



ফ্লটিং পয়েন্ট সংখ্যা ভাগ অপারেটর, ভাগ, ফ্লটিং পয়েন্ট

সি তে দুটি ফ্লটিং পয়েন্ট সংখ্যা ভাগ করতেব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ
double a = 15;

double b = 10;

double c = a / b;


ইন্টিজার বিয়োগ অপারেটর, ইন্টিজার, বিয়োগ

সি তে দুটি ইন্টিজার এর বিয়োগ করতে - ব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ
int a = 15;

int b = 10;

int c = a - b;


ইন্টিজার গুণ অপারেটর, গুণ, ইন্টিজার

সি তে দুটি ইন্টিজার গুণ করতে * ব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ
int a = 15;
int b = 10;
int c = a * b;


ইন্টিজার ভাগ অপারেটর, ভাগ

সি তে দুটি ইন্টিজার এর ভাগ করতেব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ 
int a = 15;

int b = 10;

int c = a / b;


লং লং ইন্টিজার বিয়োগ অপারেটর, লং লং ইন্টিজার, বিয়োগ

সি তে দুটি লং লং ইন্টিজার বিয়োগ করতেব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ
long long int a = 15;

long long int b = 10;

long long int c = a - b;


লং লং ইন্টিজার গুণ অপারেটর, গুণ, লং লং ইন্টিজার

সি তে দুটি লং লং ইন্টিজার গুণ করতে * ব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ 
long long int a = 15;

long long int b = 10;

long long int c = a * b;


লং লং ইন্টিজার ভাগ অপারেটর, লং লং ইন্টিজার, ভাগ

সি তে দুটি লং লং ইন্টিজার গুণ করতেব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ  
long long int a = 20;

long long int b = 10;

long long int c = a / b;



ইন্টিজার মড অপারেটর, ইন্টিজার, মড

সি তে ইন্টিজারের মড বের করতেব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ 
int a = 20;

int b = 10;

int c = a % b;



লং লং ইন্টিজার মড অপারেটর, লং লং ইন্টিজার, মড

সি তে লং লং ইন্টিজারের মড বের করতেব্যবহার করতে হয়। নিম্নে  উল্লিখিত উপায়ে তা করতে হয়ঃ 
long long int a = 20;
long long int b = 10;
long long int c = a % b;


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

যে সকল অপারেটর দ্বারা দুইটি ডেটা এর মধ্যে তুলনা করা হয় তাদেরকে রিলেশনাল অপারেটর বলা হয়ে থাকে। যেমন, <, >, == ইত্যাদি। সি তে মোট ৬টি রিলেশনাল অপারেটর আছে। তারা হলঃ
 ==
 !=
 >
 <
 >=
 <=


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

দুটি সংখ্যার মধ্যে ছোট সংখ্যাটি বের করার জন্য লেস দেন অপারেটর ব্যবহার করা হয়ে থাকে। একে < দ্বারা চিহ্নিত করা হয়। সি তে তা নিম্নরূপে ব্যবহার করা হয়ঃ
int a = 10;

int b = 199;

int small ;



if(a < b){

    small = a ;

}else{

    small = b ;

}


গ্রেটার দেন অপারেটর অপারেটর, গ্রেটার দেন

দুটি সংখ্যার মধ্যে বড় সংখ্যাটি বের করার জন্য গ্রেটার দেন অপারেটর ব্যবহার করা হয়ে থাকে। একেদ্বারা চিহ্নিত করা হয়। সি তে তা নিম্নরূপে ব্যবহার করা হয়ঃ
int a = 10;

int b = 199;

int big ;



if(a > b){

    big = a ;

}else{

    big = b ;

}


লেস দেন ইকুয়াল অপারেটর অপারেটর, লেস দেন ইকুয়াল

দুটি সংখ্যার মধ্যে ছোট বা সমান সংখ্যাটি বের করার জন্য লেস দেন ইকুয়াল অপারেটর ব্যবহার করা হয়ে থাকে। একে <= দ্বারা চিহ্নিত করা হয়। সি তে তা নিম্নরূপে ব্যবহার করা হয়ঃ

int a = 10;

int b = 199;

int res ;



if(a <= b){

    res = a ;

}else{

    res = b ;

}



গ্রেটার দেন ইকুয়াল অপারেটর অপারেটর, গ্রেটার দেন ইকুয়াল

দুটি সংখ্যার মধ্যে বড় বা সমান সংখ্যাটি বের করার জন্য গ্রেটার দেন ইকুয়াল অপারেটর ব্যবহার করা হয়ে থাকে। একে >= দ্বারা চিহ্নিত করা হয়। সি তে তা নিম্নরূপে ব্যবহার করা হয়ঃ

int a = 10;

int b = 199;

int res ;



if(a >= b){

    res = a ;

}else{

    res = b ;

}




গ্রেটার দেন ইকুয়াল অপারেটর অপারেটর, গ্রেটার দেন ইকুয়াল

দুটি সংখ্যার মধ্যে বড় বা সমান সংখ্যাটি বের করার জন্য গ্রেটার দেন ইকুয়াল অপারেটর ব্যবহার করা হয়ে থাকে। একে >= দ্বারা চিহ্নিত করা হয়। সি তে তা নিম্নরূপে ব্যবহার করা হয়ঃ

int a = 10;

int b = 199;

int res ;



if(a >= b){

    res = a ;

}else{

    res = b ;

}




আনইকুয়াল অপারেটর অপারেটর, আনইকুয়াল অপারেটর

দুটি সংখ্যা সমান নয় কিনা তা বের করার জন্য আনইকুয়াল অপারেটর ব্যবহার করা হয়ে থাকে। একে != দ্বারা চিহ্নিত করা হয়। সি তে তা নিম্নরূপে ব্যবহার করা হয়ঃ 
int a = 2;

int b = 4;

int res ;



if(a != b){

    puts("YES THEY ARE NOT EQUAL");

}


যোগ টিউটোরিয়াল অপারেটর

#include <stdio.h>







int main(){

    int a , b ;



    while(scanf(" %d %d", &a , &b) == 2){

        printf("%d\n" , a+b);

    }



    return 0 ;

}


বিয়োগ টিউটোরিয়াল অপারেটর

#include <stdio.h>







int main(){

    int a , b ;



    while(scanf(" %d %d", &a , &b) == 2){

        printf("%d\n" , a-b);

    }



    return 0 ;

}


গুণ টিউটোরিয়াল অপারেটর

#include <stdio.h>







int main(){

    int a , b ;



    while(scanf(" %d %d", &a , &b) == 2){

        printf("%d\n" , a*b);

    }



    return 0 ;

}


ভাগ টিউটোরিয়াল অপারেটর

#include <stdio.h>







int main(){

    int a , b ;



    while(scanf(" %d %d", &a , &b) == 2){

        printf("%d\n" , a/b);

    }



    return 0 ;

}


ASCII Print টিউটোরিয়াল ASCII, অপারেটর

#include <stdio.h>







int main(){



    char ch ;

    for(ch = 'A' ; ch <= 'Z' ; ch++){

         printf("%c", ch);

    }



    return 0 ;

}


থেকে ১০০ পর্যন্ত বেজোড় সংখ্যা টিউটোরিয়াল operator

#include <stdio.h>







int main(){

    int i ;



    for(i = 0 ; i <= 100 ; i++){

        if(i % 2 == 1)

            printf("%d\n" , i);

    }



    return 0 ;

}


গড় বয়স নির্ণয় (analysis) গড়, অপারেটর


#include <stdio.h>





int main(){



      int t , cas = 0 , n , x ;

      scanf(" %d", &t) ;

      while(t--){

          int sum = 0 ;

          scanf(" %d", &n);

          for(int i = 0 ; i < n ; i++){

              scanf(" %d", &x);

               sum += x ;

          }

      

       printf("%d\n" , sum / n);

 }



 return 0;



}









মন্তব্যসমূহ