November 29, 2016

অপারেটর (Operator)

অপারেটরঃ Operator হচ্ছে একটি symbol, যা কম্পাইলারকে একটি নির্দিষ্ট কাজ সম্পন্ন করার নির্দেশ দেয়। যেমনঃ “+” হচ্ছে একটি অপারেটর যা যোগ এর কাজ সম্পন্ন করে।
সি ল্যাঙ্গুয়েজে অনেক ধরণের অপারেটর আছে, যেমনঃ
  1. Arithmetic operators
  2. Assignment operators
  3. Increment/Decrements operators
  4. Relational operators
  5. Logical operators
  6. Conditional operators
  7. Bitwise operators
নিচে এগুলো সম্পর্কে বিস্তারিত আলোচনা করা হলঃ
Arithmetic operators: এই অপারেটরগুলো ম্যাথম্যাটিক্যাল ক্যালকুলেশনের জন্য ইউজ হয়। যেমনঃ যোগ, বিয়োগ, ভাগ ইত্যাদি। এই অপারেটরগুলো হলঃ
  • Addition
  • Subtractions
  • Multiplication
  • Division
  • Remainder


Arithmetic operators’ এর উদাহরণঃ
#include <stdio.h>
int main()
{
int a=8;
int b=5;
int result;
result=a+b;
printf("a+b= %d\n", result);

result=a-b;
printf("a-b= %d\n ", result);
result=a*b;
printf("a*b= %d\n ", result);
result=a/b;
printf("a/b= %d\n ", result);
result=a%b;
printf("a%b= %d\n ", result);
return 0;
}

অউটপুটঃ
a+b=13
a-b=3
a*b=40
a/b=1
a%b=3

এই প্রোগ্রামে, +, - এবং * অপারেটর যথাক্রমে যোগ, বিয়োগ এবং গুন এর কাজ করে আমাদেরকে আউটপুট 13, 3 এবং 40 প্রিন্ট করছে। কিন্তু ভাগের ক্ষেত্রে, 8/5 সমান 1.6 প্রিন্ট করার কথা, তা না করে কম্পাইলার আমাদেরকে আউটপুট 1 প্রিন্ট করছে কারণ a এবং b উভয়ই ইন্টিজার। তাই কম্পাইলার আমাদেরকে ইন্টিজারে আউটপুট প্রিন্ট করছে এবং ডেসিমল পয়েন্টের পরের ডিজিটগুলো আর প্রিন্ট করে নাই। অবশেষে a%b এর মান 3 প্রিন্ট করছে কারণ a=8 কে b=5 দ্বারা ভাগ করলে ভাগশেষ  3 থাকে।
Assignment operators: এই অপারেটরগুলো সি প্রোগ্রামে, ভেরিয়েবলের মান অ্যাসাইন করার জন্য ব্যবহার হয়।
এই অপারেটরগুলো হলঃ


সাধারণতঃ ‘=’ সাইন দিয়ে ভ্যালু অ্যাসাইন করা হয়। এই সাইনের ডান পাশের মান বাম পাশের ভেরিয়েবলে অ্যাসাইন করে। যেমনঃ num=5

Increment/Decrement operators: সি প্রোগ্রামে ভেরিয়েবলের মান বাড়াতে বা কমাতে এই অপারেটরগুলো ব্যবহার হয়। এই অপারেটরগুলো হলঃ

Increment এবং decrement অপারেটগুলো দুই প্রকারঃ
১। Postfix Increment অথবা Postfix Decrement অপারেটর
২। Prefix Increment অথবা Prefix Decrement অপারেটর
Postfix Increment অথবা Postfix Decrement অপারেটরঃ যদি অপারেটর ভেরিয়েবলের নামের পরে লেখা হয় তাহলে তাকে Postfix Increment অথবা Postfix Decrement অপারেটর বলে। Postfix Increment অপারেটর, যেমনঃ a++ প্রথমে ভেরিয়েবলের মান ইউজ হবে তারপর ভেরিয়েবলের মান 1 বৃদ্ধি করবে। Postfix Decrement অপারেটর, যেমনঃ a-- প্রথমে ভেরিয়েবলের মান ইউজ হবে তারপর ভেরিয়েবলের মান 1 কমবে।
Prefix Increment অথবা Prefix Decrement অপারেটরঃ যদি অপারেটর ভেরিয়েবলের নামের আগে লেখা হয় তাহলে তাকে Prefix Increment অথবা Prefix Decrement অপারেটর বলে। Prefix Increment অপারেটর, যেমনঃ ++a প্রথমে ভেরিয়েবলের মান ভেরিয়েবলের মান 1 বৃদ্ধি করবে তারপর ইউজ হবে । Prefix Decrement অপারেটর, যেমনঃ --a প্রথমে ভেরিয়েবলের মান 1 কমবে তারপর ইউজ হবে ।
Prefix এবং Postfix এর পার্থক্য বুঝার জন্য আমরা এখন একটা প্রোগ্রাম দেখবঃ
#include
int main()
{
int a,b,c;
a=4;
b=++a;
c=a++;
printf("a=%d\n",a);
printf("b= %d\n",b);
printf("c= %d",c);
return 0;
}
Output:
6
5
5
এই প্রোগ্রামে, মেইন ফাংশানের প্রথম স্টেটমেন্টে a,b,c নামে তিনটি ইন্টিজার টাইপের ভেরিয়েবল ডিক্লেয়ার করা হয়েছে। তার পরের স্টেটমেন্টে a ভেরিয়েবলের মান 4 অ্যাসাইন করা হয়েছে। এখন, b=++a এর মানে হচ্ছে প্রথমে a ভেরিয়েবলের মান 1 বৃদ্ধি পাবে এবং ভেরিয়েবল b তে অ্যাসাইন হবে অর্থাৎ ভেরিয়েবল b তে 5 অ্যাসাইন হবে তারপর, c=a++ এর মানে হচ্ছে প্রথমে ভেরিয়েবল a এর মান ভেরিয়েবল c তে অ্যাসাইন হবে তারপর ভেরিয়েবল a এর মান 1 বৃদ্ধি পাবে তাই ভেরিয়েবল c তে ও 5 অ্যাসাইন হবে এবং a ভেরিয়েবলের মান হবে 6
Relational operators: দুইটি ভেরিয়েবলের মধ্যে সম্পর্ক চেক করে দেখার জন্য এই অপারেটরগুলোর ব্যবহার হয়। সম্পর্ক যদি সত্য হয়ে তাহলে এটি 1 রিটার্ন করে, আর যদি সম্পর্ক মিথ্য হয় তাহলে এটি 0 রিটার্ন করে। কম্পিউটার 1 দ্বারা সত্য এবং 0 দ্ধারা মিথ্যা বুঝে নেয়। অপারেটরগুলো হলঃ

যেমনঃ “>” একটি Relational অপারেটর। যদি a ভেরিয়েবলর মান b ভেরিয়েবলের মান থেকে বেশি হয় অর্থাৎ a>b হয় তাহলে 1 রিটার্ন করবে অন্যাথায় 0 রিটার্ন করবে।
Logical operators: দুইটি ভেরিয়েবলের মধ্যে লজিকেল কাজ করার জন্য এই অপারেটরগুলো ব্যবহার হয়। অপারেটরগুলো হলঃ

Conditional operators: এই অপারেটরগুলো কন্ডিশন সত্য হলে একধরণের মান রিটার্ন করার জন্য আর কন্ডিশন মিথ্যা হলে অন্যধরণের মান রিটার্ন করার জন্য ব্যবহার হয়। Conditional অপারেটর হচ্ছে দুইটি symbol (?,:), এর মধ্যে তিনটি আর্গুমেন্ট নিবে নিচের সিনট্যাক্স দেখঃ
Expression1?expression2:expression3;
এখানে তিনটি  expression আছে, expression1 এ একটি কন্ডিশন থাকে যদি কন্ডিশন সত্য হয় তাহলে expression2 স্টেটমেন্ট এক্সিকিউট হবে, আর মিথ্যা হলে expression3 স্টেটমেন্ট এক্সিকিউট হবে। অর্থাৎ
নিচের প্রোগ্রামটি দেখঃ
#include
int main()
{
int a,b,c;
a=5;
b=6;
c=a>b?4:7;

printf("c=%d",c);
return 0;
}
Output:
c=7
এই প্রোগ্রামে, মেইন ফাংশানের ভিতরে আমরা ইন্টিজার টাইপের তিনটি ভেরিয়েবল যথাক্রমে a, b এবং c ডিক্লেয়ার করলাম। তারপর ভেরিয়েবল a এর মান অ্যাসাইন করলাম 5 এবং b এর মান অ্যাসাইন করলাম 6তারপর c=a>b?a:b; মানে হচ্ছে যদি কন্ডিশন (a>b) সত্য হয় তাহলে c ভেরিয়েবলে 4 অ্যাসাইন হবে, আর যদি কন্ডিশন (a>b) মিথ্যা হয় তাহলে c ভেরিয়েবলে 7 অ্যাসাইন হবে। এখানে কন্ডিশন মিথ্যা হওয়ার কারণে c ভেরিয়েবলে 7 অ্যাসাইন হবে তাই আউটপুট 7 পেয়েছি।


Bitwise operators: এই অপারেটরগুলো দুইটি ভেরিয়েবলের মধ্যে bitwise অপারেশনের জন্য ব্যবহৃত হয়। অপারেটরগুলো হলঃ

ডেটা ইনপুট এবং আউটপুট

     সি প্রোগ্রামে কি-বোর্ড থেকে আমরা যেকোন ডেটা ইনপুট নিতে পারি এবং আউটপুট কনসোলে প্রিন্ট করতে পারি। ডেটা ইনপুট এবং আউটপুট নেয়ার জন্য সি ল্যাঙ্গুয়েজে অনেক ইনপুট-আউটপুট ফাংশন আছে, তারমধ্যে scanf() এবং printf() অন্যতমসি-তে scanf() ফাংশন ব্যবহার করে ডেটা ইনপুট নেয়া হয় এবং আউটপুট প্রিন্ট করার জন্য printf() ফাংশন ব্যবহার হয়। এছাড়াও আমরা স্ট্রিং এর ক্ষেত্রে ইনপুট নিতে scanf() এর পরিবর্তে gets() ফাংশন এবং printf() এর পরিবর্তে puts() ফাংশন ব্যবহার করতে পারি। 
ইনপুট নেয়ার Syntax: 
scanf(“%d”, &variable name); /* int টাইপ ভেরিয়েবল এর ক্ষেত্রে*/ 
scanf(“%lf”, &variable name); /* double টাইপ ভেরিয়েবল এর ক্ষেত্রে*/ 
scanf(“%c”, &variable name); /* char টাইপ ভেরিয়েবল এর ক্ষেত্রে*/
scanf(“%f”, &variable name); /* float টাইপ ভেরিয়েবল এর ক্ষেত্রে*/
scanf(“%s”, &variable name); /* string টাইপ ভেরিয়েবল এর ক্ষেত্রে*/ 

আউটপুট প্রিন্ট এর Syntax: 
Printf(“%d”, variable name); /* int টাইপ ভেরিয়েবলের ক্ষেত্রে */ 
Printf(“%lf”, variable name); /* double টাইপ ভেরিয়েবলের ক্ষেত্রে */ 
Printf(“%c”, variable name); /* char টাইপ ভেরিয়েবলের ক্ষেত্রে */ 
Printf(“%f”, variable name); /* float টাইপ ভেরিয়েবলের ক্ষেত্রে */
Printf(“%s”, variable name); /* string টাইপ ভেরিয়েবলের ক্ষেত্রে */

int টাইপ ভেরিয়েবেলের ক্ষেত্রে ইনপুট এবং আউটপুটঃ 
#include <stdio.h> 
int main()
int x; 
printf(“input the value of variable\n”); 
scanf(“%d”,&x); /* ইনপুট এর syntax*/
printf(“\nthe value of x is %d\n\n”,x); /* output print*/ 
}
Output: 
input the value of variable 
the value of x is 3 

Double টাইপ ভেরিয়েবেলের ক্ষেত্রে ইনপুট এবং আউটপুটঃ 
#include <stdio.h> 
int main()
double x; 
printf("input the value of double variable\n"); 
scanf("%lf",&x); /* take input*/ 
printf("\nthe value of x is %lf\n\n",x); /* print output*/
Output: 
input the value of double variable 
2.5 
the value of x is 2.5000 
Float টাইপ ভেরিয়েবেলের ক্ষেত্রে ইনপুট এবং আউটপুটঃ

#include <stdio.h> 
int main()
float x; 
printf("input the value of float variable\n");
scanf("%f",&x); 
printf("\nthe value of x is %f\n",x); 
}

Output: 
input the value of float variable\n
3.1 
the value of x is 3.10000 

char টাইপ ভেরিয়েবেলের ক্ষেত্রে ইনপুট এবং আউটপুটঃ

#include <stdio.h> 
int main()
{
char x; 
printf("input the value of character variable\n"); 
scanf("%c",&x); 
printf("\nthe value of x is %c\n",x); 
}

Output: \n
input the value of character variable
the value of x is c 
String এর ক্ষেত্রে ইনপুট এবং আউটপুটঃ 

#include <stdio.h> 
int main()
{
char str[10]; 
printf("input the value of string variable\n"); 
scanf("%s",&str); 
printf("\nthe value of x is %s\n\n",str); 
Output:
input the value of string variable
I am programmer \n
the value of x is I am programmer





Disqus Shortname

Comments system