আরো কিছু বাইনারি অপারেটর বাকি আছে কিন্তু সেগুলো জানার আগে চলো তোমাদেরকে লজিক্যাল অপারেটর এর আসল প্রয়োগটা দেখাই । আসো একটি উদাহরণ বিবেচনা করি:
মনে করো, আমাদের একটি বন্ধু একটি শর্ত বলবে যাকে আমরা ভ্যারিয়েবল দ্বারা প্রকাশ করছি । এখন, যদি বন্ধু সত্য কথা বলে থাকে, অর্থাৎ যদি সত্য হয়, তাহলে আমরা প্রিন্ট করবো . আর যদি তা মিথ্যা হয় তাহলে আমরা প্রিন্ট করবো ।
মনে করো শর্তটি হলো । আমরা দেখেই বলে দিতে পারবো যে এই শর্তটি সত্য, কিন্তু আপাতত মনে করো আমরা জানি না এটি সত্য হবে নাকি মিথ্যা । আমরা প্রোগ্রামের মাধ্যমে এটি চেক করে দেখবো ।
তাহলে আমাদের মূল লজিকটি হচ্ছে এরকম,
1যদি (5 > 3) তবে
2 প্রিন্ট Kotha Shotto
3অন্যথায়
4 প্রিন্ট Mittha Kotha
এখন, যদি এর english হলো এবং অন্যথায় এর english হলো , তাহলে প্রোগ্রামিং এর ভাষায় বিষয়টির সিন্ট্যাক্স হবে এরকমঃ
1if(5 > 3){
2 printf("Kotha Shotto");
3}
4else{
5 printf("Mittha Kotha");
6}
এর সিন্ট্যাক্সটা ব্যাখা করার আগে আসো পুরো প্রোগ্রামটাই লিখে ফেলিঃ
1#include <stdio.h>
2#include <math.h>
3
4int main()
5{
6 if(5 > 3){
7 printf("Kotha Shotto");
8 }
9 else{
10 printf("Mittha Kotha");
11 }
12 return 0;
13}
14
এর আউটপুট হবেঃ
Kotha Shotto
এবার আসো হলোটা কী সেটা বোঝার চেষ্টা করি । প্রথমত, আমরা এর ভেতরে একটি শর্ত দিয়েছি । এরপরে এর ব্লক এর ভেতরে একটি ফাংশন দিয়েছি । এরপরে ব্লকের ভেতরে আমরা আরেকটা দিয়েছি । কোন ব্লক এর কোড এক্সিকিউট হবে, তা নির্ভর করছে এই এর শর্তটির উপরে ( এক্ষেত্রে ) । যদি এ শর্তটি সত্য হয়, তাহলে এর ভেতরের কোড চলবে, আর যদি শর্তটি মিথ্যা হয় তাহলে এর ব্লক এর কোড চলবে । এক্ষেত্রে শর্তটি সত্য, তাই এর ব্লকের কোড চলেছে ।
যদি আমরা একটি শর্ত দেই যেটি মিথ্যা তাহলে কী হবে? এই কোডটি দেখোঃ
1#include <stdio.h>
2#include <math.h>
3
4int main()
5{
6 if(!(5 > 3)){
7 printf("Kotha Shotto");
8 }
9 else{
10 printf("Mittha Kotha");
11 }
12 return 0;
13}
14
শর্তটি সত্য ছিল, তাই একে NOT অপারেটর দিয়ে মিথ্যা করে দিলাম, এবার আউটপুট দেখোঃ
Mittha Kotha
এবার ঠিকই ব্লকের কোড রান হয়েছে ।
এই লেসনের শুরুতেই কিন্তু আমি বলেছিলাম আমরা লজিক্যাল স্টেটমেন্ট এর প্রয়োগ দেখবো, কিন্তু এখনো পর্যন্ত আমরা একবারও লজিক্যাল অপারেটর ব্যবহার করিনি । এখন চলো দেখি কীভাবে সেটা করা যায় ।
মনে করো, এবার আমাদের বন্ধু দুটি আলাদা আলাদা শর্ত বলবে, আমরা তার কথা কে সত্য বলে মেনে নেব যদি তার দুটো শর্তই সত্য হয় । যদি একটি শর্তও মিথ্যা হয়, তাহলে আমরা তার কথা কে মিথ্যা বলে ধরে নেবো । তোমরা তো লজিক্যাল AND, OR, NOT অপারেটর গুলো সম্পর্কে পড়েছো, তাই না? তাহলে বলো তো কোন অপারেটর এমনভাবে কাজ করে যাতে কেবলমাত্র সবগুলো শর্ত সত্যি হলেই আউটপুটে সত্য পাওয়া যায়?
AND অপারেটর! হ্যাঁ, AND অপারেটর দ্বারা যুক্ত সবগুলো শর্ত সত্যি হলেই কেবলমাত্র আউটপুটে সত্যি পাওয়া যায় ।
মনে করো, একটি শর্ত হলো আগেরটাই বা , আর আরেকটি শর্ত হলো । তো আমাদেরকে যাচাই করতে হবে দুটি শর্তই একই সাথে সত্য কি না । আগেই বললাম যে এ জন্য আমাদেরকে শর্ত দুটিকে দ্বারা যুক্ত করতে হবে । তো চলো এর কোড দেখে নেইঃ
1#include <stdio.h>
2#include <math.h>
3
4int main()
5{
6 if((5 > 3) && (9 < 3)){
7 printf("Kotha Shotto");
8 }
9 else{
10 printf("Mittha Kotha");
11 }
12 return 0;
13}
14
এবার আউটপুট আসবেঃ
Mittha Kotha
কারণ 5 > 3 সত্য, কিন্তু 9 < 3 মিথ্যা, এদেরকে AND দ্বারা যুক্ত করায় পুরোটাই মিথ্যা হয়েছে, তাই ব্লকের কোড রান হয়েছে ।
তোমাদের কি মনে আছে বাইনারি অপারেটরস লেসনে আমরা একটি প্রোগ্রাম লিখতে গিয়ে একটি সমস্যায় পড়েছিলাম ? সেখানে আমরা করছিলাম কিন্তু সেখানে এর মান যদি শুন্য হয়ে যায় তাহলে আমাদের প্রোগ্রাম আটকে যাচ্ছিল? প্রোগ্রামটি ছিল এরকম
1#include <stdio.h>
2
3int main()
4{
5 int a, b;
6 printf("Please enter two numbers ( a and b ): ");
7 scanf("%d%d", &a, &b);
8
9 printf("\n\n");
10
11 printf("a + b = %d\n", a + b);
12 printf("a - b = %d\n", a - b);
13 printf("a * b = %d\n", a * b);
14 printf("a / b = %d\n", a / b);
15 printf("a % b = %d\n", a % b);
16
17 return 0;
18}
আমরা এর কেবল ১৪ নম্বর লাইন নিয়ে এখন মাথা ঘামাবো, তাই চলো প্রোগ্রামটি থেকে অপ্রয়োজনীয় অপারেশন গুলো এখন বাদ দেইঃ
1#include <stdio.h>
2
3int main()
4{
5 int a, b;
6 printf("Please enter two numbers ( a and b ): ");
7 scanf("%d%d", &a, &b);
8
9 printf("\n\n");
10
11 printf("a / b = %d\n", a / b);
12 return 0;
13}
এখন চলো এখানের সমস্যাটি আমরা সমাধান করি । আমাদের মূল লক্ষ্য হলো করার আগে আমরা যাচাই করে দেখবো এর মান শুন্য কি না, যদি শুন্য হয় তাহলে আমরা প্রিন্ট করবো যে এর মান শুন্য তাই প্রোগ্রামটি এখন এক্সিট করবে । আর যদি এর মান শূন্য না হয় তাহলে আমরা করে এর মান প্রিন্ট করবো ।
তো তাহলে আমাদের শর্ত হলো শুন্য কি না? একে কোন রিলেশনাল অপারেটর দিয়ে প্রকাশ করা যায়? আমরা জানি, দুটি ভ্যালু সমান কি না তা যাচাই করা হয় অপারেটর দ্বারা । তাহলে আমাদের শর্তটি হলো , চলো এটি দিয়ে if-else ব্যবহার করে পুরো প্রোগ্রামটি লিখে ফেলিঃ
1#include <stdio.h>
2
3int main()
4{
5 int a, b;
6 printf("Please enter two numbers ( a and b ): ");
7 scanf("%d%d", &a, &b);
8
9 printf("\n");
10
11 if(b == 0){
12 printf("Value of b is 0, program cannot continue\n");
13 }
14 else{
15 printf("a / b = %d\n", a / b);
16 }
17 return 0;
18}
19
এখানে b এর মান শুন্য হলে স্টেটমেন্টটি এক্সিকিউট হয়ে প্রোগ্রামটি এক্সিট করবে । আর যদি b শুন্য না হয় তাহলে প্রোগ্রামটি স্বাভাবিকভাবে চলবে ।
মনে করো, আমি বাইরে নাস্তা করতে যাচ্ছি । এখন আমি ঠিক করলাম, যদি আমার কাছে ১০০ টাকার বেশি থাকে, তাহলে আমি খিচুড়ি খাবো, আর যদি কম থাকে তাহলে আমি চা খাবো । এর কোড কি তোমরা লিখতে পারবে? টাকার পরিমাণটা আমরা নিজেরা নির্দিষ্ট করে না দিয়ে চলো একে ইনপুট হিসেবে নেই । নিজে নিজে চেষ্টা করে দেখো, আমি দেখিয়ে দিচ্ছিঃ
1#include <stdio.h>
2
3int main()
4{
5 int money;
6 printf("Enter amout of money: ");
7 scanf("%d", &money);
8 if(money > 100){
9 printf("Eating khichuri");
10 }
11 else{
12 printf("Drinking tea");
13 }
14 return 0;
15}
16
এতে এরকম আউটপুট আসবেঃ
Enter amount of money: 500
Eating khichuri
এটা তো বুঝতে পারবে সহজেই। এখন মনে করো, আমার কাছে যদি ১০০ টাকার বেশি থাকে তাহলে আমি খিচুড়ি খাবো, যদি আমার কাছে ১০০ এর চেয়ে কম কিন্তু ৫০ এর চেয়ে বেশি টাকা থাকে, তাহলে আমি রুটি খাবো, আর যদি ৫০ টাকারও কম থাকে তাহলে আমি চা খাবো । এবার তো আমাদের একাধিক শর্ত চেক করতে হবে, এবার আমরা কীভাবে জিনিসটি লিখতে পারি?
এজন্য আমাদের ব্যবহার করতে হবে । ব্লকের শর্তের পরে আমরা এক বা একাধিক if ব্লক দিতে পারি যেটি এর শর্ত ছাড়াও আরো শর্ত পরীক্ষা করতে পারবে । নিচের উদাহরণটি দেখোঃ
1#include <stdio.h>
2
3int main()
4{
5 int money;
6 printf("Enter amout of money: ");
7 scanf("%d", &money);
8 if(money > 100){
9 printf("Eating khuichuri");
10 }
11 else if(money < 100 && money >50){
12 printf("Eating ruti");
13 }
14 else{
15 printf("Drinking tea");
16 }
17 return 0;
18}
19
দেখলে? এখানে, প্রথমে এর শর্ত পরীক্ষা হবে, যদি তা মিথ্যা হয় তাহলে এর শর্ত পরীক্ষা হবে, যদি তাও মিথ্যা হয় তাহলে আর কোনো শর্ত পরীক্ষা করার নেই, তখন ব্লকের কোড রান করবে ।
এছাড়াও এখানে খেয়াল করে দেখো, এর ভেতরের শর্তটি হলো । আর এর ভ্যালু যদি ১০০ থেকে ছোট হয় তখনই কেবলমাত্র if এর শর্ত পরীক্ষা হবে । অর্থাৎ এ যখন শর্তটি আসছে তখন ইতিমধ্যেই এর ভ্যালু ১০০ এর থেকে ছোট তা নিশ্চিতভাবে বলা যাচ্ছে । তাই ব্লকের ভেতরে আলাদা করে পরীক্ষা করার দরকার নেই । পূর্ণাঙ্গ কোডটি নিচে দেখোঃ
1#include <stdio.h>
2
3int main()
4{
5 int money;
6 printf("Enter amout of money: ");
7 scanf("%d", &money);
8 if(money > 100){
9 printf("Eating khuichuri");
10 }
11 else if(money >50){
12 printf("Eating ruti");
13 }
14 else{
15 printf("Drinking tea");
16 }
17 return 0;
18}
19
আমরা চাইলে এখানে একাধিক ব্যবহার করতে পারি ।
1#include <stdio.h>
2
3int main()
4{
5 int money;
6 printf("Enter amout of money: ");
7 scanf("%d", &money);
8 if(money > 100){
9 printf("Eating khuichuri");
10 }
11 else if(money > 60){
12 printf("Eat sandwich");
13 }
14 else if(money > 50){
15 printf("Eating ruti");
16 }
17 else if(money > 30){
18 printf("Eating biscuits");
19 }
20 else{
21 printf("Drinking tea");
22 }
23 return 0;
24}
25
এখানে, এর শর্ত মিথ্যা হলে প্রথম এর শর্ত পরীক্ষা হবে, তাও মিথ্যা হলে দ্বিতীয় এর শর্ত পরীক্ষা হবে এরকম । এছাড়াও, আমরা চাইলে কোনো শর্ত নাও রাখতে পারি ।
1#include <stdio.h>
2
3int main()
4{
5 int money;
6 printf("Enter amout of money: ");
7 scanf("%d", &money);
8 if(money > 100){
9 printf("Eating khuichuri");
10 }
11 else if(money > 60){
12 printf("Eat sandwich");
13 }
14 else if(money > 50){
15 printf("Eating ruti");
16 }
17 else if(money > 30){
18 printf("Eating biscuits");
19 }
20 return 0;
21}
22
তবে, এক্ষেত্রে যদি এর ভ্যালু ৩০ এর চেয়ে কম হয় তাহলে কিছুই প্রিন্ট হবে না । আমরা চাইলে শুধুমাত্র ব্লক রেখে অন্য সবকিছুই সরিয়ে দিতে পারিঃ
1#include <stdio.h>
2
3int main()
4{
5 int money;
6 printf("Enter amout of money: ");
7 scanf("%d", &money);
8 if(money > 100){
9 printf("Eating khuichuri");
10 }
11 return 0;
12}
13
এক্ষেত্রে এর ভ্যালু যদি ১০০ এর বেশি হয় তাহলে প্রিন্ট হবে, আর যদি ১০০ এর কম হয় তাহলে কিছুই প্রিন্ট হবে না ।
if-else নিয়ে ধারণা পরিষ্কার হলো তো এবার? যদি না হয়ে থাকে তাহলে ঠান্ডা মাথায় শুরু থেকে এখান পর্যন্ত আরেকবার পড়ো ।
এবার চলো if else ব্যবহার করে কিছু সমস্যার সমাধান করি ।
মনে করো, আমাদের এমন একটি প্রোগ্রাম লিখতে হবে, যা একটি সংখ্যা ইনপুট নেবে এবং তা জোড় নাকি বিজোড় তা প্রিন্ট করবে ।
ইনপুট নেয়া পর্যন্ত কাজ তো আমরা এমনিই পারবো । কিন্তু সংখ্যাটি জোড় নাকি বিজোড় তা পরীক্ষা করবো কী করে? আচ্ছা তোমরা কি জানো জোড় এবং বিজোড় সংখ্যার মধ্যে মূল পার্থক্য কী? এদের মধ্যে মূল পার্থক্য হলো, জোড় সংখ্যা গুলো ২ দ্বারা নিঃশেষে বিভাজ্য, অর্থাৎ ২ দ্বারা ভাগ করলে ভাগশেষ হয় শুন্য । আর বিজোড় সংখ্যা গুলো কে ২ দ্বারা ভাগ করলে ভাগশেষ শুন্য হয় না । তো ২ দ্বারা ভাগশেষ পরীক্ষা করে আমরা বলতে পারি যে সংখ্যাটি জোড় নাকি বিজোড় ।
তোমাদের কি মনে আছে কিভাবে ভাগশেষ বের করে? অপারেটর দিয়ে ! তো চলো কোড দেখে নেইঃ
1#include <stdio.h>
2
3int main()
4{
5 int number;
6 printf("Please enter a number: ");
7 scanf("%d", &number);
8 if(number % 2 == 0){
9 printf("%d is even", number);
10 }
11 else{
12 printf("%d is odd", number);
13 }
14}
15
বুঝতে পারলে? তোমরা বিভিন্ন ধরনের সংখ্যা ইনপুট দিয়ে দেখো প্রোগ্রামটি ঠিকমতো কাজ করছে কি না ।
আমরা সাধারণভাবে জানি, চার বছর পর পর লিপ ইয়ার আসে । তাহলে নিশ্চয়ই বছরগুলোকে 4 দ্বারা ভাগ করে ভাগশেষ শুন্য আসলে তা লিপ ইয়ার হবে? না এখানে একটু সমস্যা আছে । এজন্য এ বিষয়গুলো মাথায় রাখতে হবে ।
আমরা এভাবে লিপ ইয়ার নির্ণয় করতে পারিঃ
তাহলে চলো প্রোগ্রামটি লেখা শুরু করি । প্রথমত আমাদেরকে বছর এর সংখ্যাটি ইনপুট নিতে হবে ।
1#include <stdio.h>
2
3int main()
4{
5 int year;
6 printf("Enter year: ");
7 scanf("%d", &year);
8 return 0;
9}
10
এবার আমাদের পরীক্ষা করতে হবে কি 400 দ্বারা বিভাজ্য কি না ।
1#include <stdio.h>
2
3int main()
4{
5 int year;
6 printf("Enter year: ");
7 scanf("%d", &year);
8
9 if(year % 400 == 0){
10 printf("Year is leap year");
11 }
12
13 return 0;
14}
15
এবার আমাদের দেখতে হবে যে যদি 400 দ্বারা বিভাজ্য না হয় তবে তা 100 দ্বারা বিভাজ্য কি না?
1#include <stdio.h>
2
3int main()
4{
5 int year;
6 printf("Enter year: ");
7 scanf("%d", &year);
8
9 if(year % 400 == 0){
10 printf("Year is leap year");
11 }
12 else if(year % 100 == 0){
13 printf("Year is not leap year");
14 }
15
16 return 0;
17}
18
এবার আমাদের দেখতে হবে যে যদি 100 দ্বারা ও বিভাজ্য না হয় তাহলে তা 4 দ্বারা বিভাজ্য কি না? আর যদি তাও না হয় তাহলে তা লিপ ইয়ার নয় ।
1#include <stdio.h>
2
3int main()
4{
5 int year;
6 printf("Enter year: ");
7 scanf("%d", &year);
8
9 if(year % 400 == 0){
10 printf("Year is leap year");
11 }
12 else if(year % 100 == 0){
13 printf("Year is not leap year");
14 }
15 else if(year % 4 == 0){
16 printf("Year is leap year");
17 }
18 else{
19 printf("Year is not leap year");
20 }
21 return 0;
22}
23
আমরা কিন্তু চাইলে অপারেটর ব্যবহার করে দুটি ব্লকের কাজ একটি ব্লকেই করে ফেলতে পারি । কারণ যদি 400 দ্বারা বিভাজ্য না হয় তাহলে তাকে লিপ ইয়ার হতে হলে অবশ্যই 4 দ্বারা বিভাজ্য হতে হবে এবং 100 দ্বারা বিভাজ্য হওয়া যাবে না । তাহলে আমরা চেক করবো এবং তা সত্যি হলে লিপ ইয়ার, সত্যি না হলে লিপ ইয়ার নয় ।
1#include <stdio.h>
2
3int main()
4{
5 int year;
6 printf("Enter year: ");
7 scanf("%d", &year);
8
9 if(year % 400 == 0){
10 printf("Year is leap year");
11 }
12 else if(year % 100 != 0 && year % 4 == 0){
13 printf("Year is leap year");
14 }
15 else{
16 printf("Year is not leap year");
17 }
18 return 0;
19}
20
আশা করি তোমরা কন্ডিশনাল সম্পর্কিত বিষয়ে পরিষ্কার হয়েছো ।
Loading...
Loading...