অধ্যায় তিন : কন্ডিশনাল লজিক


এখন আমরা প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ জিনিস জানব ।

কোন শর্তে কি করতে হবে তা কম্পিউটারকে প্রোগ্রামিং করে বোঝাব ।
ধরো, তোমাকে আমি একটি সংখ্যা দিলাম । এখন সংখ্যাটি ধনাত্মক ( positive ) কি না তা তুমি কিভাবে বলতে । আমি তো দেখতাম সংখ্যাটি শূন্যের চেয়ে বড় নাকি ছোট । যদি বড় হয় তবে সংখ্যাটি ধনাত্মক আর ছোট হলে ঋণাত্মক ।

এসো এই কাজটিই আমরা প্রোগ্রামিংয়ের মাধ্যমে করি ।

 #include <stdio.h>
 
 int main()
 {
     int num = 13;
     
     if (num > 0) {
     
         printf("%d is a positive 
number\n", num); } return 0; } প্রোগ্রাম : ৩.১

আমরা এখানে if নামের একটি কন্ডিশন ব্যবহার করেছি । if -এর সাথে একটি শর্ত দিয়েছি if (num > 0) , মানে যদি num, 0 -এর চেয়ে বড় হয় । লক্ষ করো শর্তটি প্রথম বন্ধনীর ভেতর লিখতে হবে । শর্তটি সত্য হলে কি করতে হবে তা দ্বিতীয় বন্ধনীর ভেতর লিখে দিতে হবে । এখানে শর্তটি সত্য হলে আমরা বলে দিচ্ছি num একটি ধনাত্মক সংখ্যা ।

এখানে দ্বিতীয় বন্ধনীর পর ইন্ডেটেশনের ব্যাপারটি খেয়াল করো । if কন্ডিশনের দ্বিতীয় বন্ধনীর পর printf() ফাংশনটি চারটি স্পেস দিয়ে শুরু করেছি ।

এখন তোমরা num -এর মান 0 , 0 -এর চেয়ে ছোট ( যেমন -3 ) দিয়ে দেখো কি হয় ?

তোমরা আউটপুটে কিছুই দেখতে পাবে না । কারণ তখন num > 0 শর্তটি মিথ্যা হয়ে যাবে । কন্ডিশনে দেওয়া শর্ত সত্য হলেই কেবল তার ভেতরের অংশের কাজ হবে ।

if কন্ডিশনে দেওয়া শর্ত মিথ্যা হলে কি করতে হবে তাও আমরা বলে দিতে পারি :

 #include <stdio.h>
 
 int main()
 {
     int num = 13;
     
     if (num > 0) {
     
         printf("%d is a positive 
number\n", num); } else { printf("%d is a negative
number\n", num); } return 0; } প্রোগ্রাম : ৩.২

যদি if কন্ডিশনে দেওয়া শর্ত মিথ্যা হয় তবেই কেবল else -এর ভেতরের অংশের কাজ হবে ।

আবার সংখ্যাটি 0 হলে কি করতে হবে তাও আমরা বলে দিতে পারি :

 #include <stdio.h>
 
 int main()
 {
     int num = 13;
     
     if (num > 0) {
     
         printf("%d is a positive 
number\n", num); } else if (num < 0) { printf("%d is a negative
number\n", num); } else if (num == 0) { printf("The number is zero !
\n"); } return 0; } প্রোগ্রাম : ৩.৩

else -এর সাথে শর্ত জুড়ে দেবার জন্য else if ব্যবহার করতে হয়েছে ।

ভালো করে দেখো , দুটি সংখ্যা সমান সমান কি না তা পরীক্ষার জন্য দুটি সমান চিহ্ন দিয়েছি । শুরুর দিকে অনেকেই একটি সমান চিহ্ন দিয়ে বিপদে পড়ে । আসলে একটি সমান চিহ্ন দিয়ে ভেরিয়েবলে কোনো কিছু অ্যাসাইন করা হয় ।

আচ্ছা , আমাদের ৩.৩ প্রোগ্রামে else if (n == 0) শর্তটি পরীক্ষা না করলে হত না ? কোনো সংখ্যা 0 -এর চেয়ে বড়ও না আবার ছোটও না হয় তবে কি হবে ? সংখ্যাটি অবশ্যই শূন্যের সমান হবে ।

 #include <stdio.h>
 
 int main()
 {
     int num = 13;
     
     if (num > 0) 
     {    
         printf("%d is a positive number
\n", num); } else if (num < 0) { printf("%d is a negative
number\n", num); } else { printf("The number is zero !
\n"); } return 0; } প্রোগ্রাম : ৩.৪


এখন নিচের প্রোগ্রামটি দেখে বলো তো আউটপুট কি হবে :

 #include <stdio.h>
 
 int main()
 {
     int num = 13;
     
     if (num < 31) {
         
         printf("%d is less than 31\n", 
num); } else if (num < 51) { printf("%d is less than 51\n",
num); } return 0; } প্রোগ্রাম : ৩.৫

প্রোগ্রামটির আউটপুট হবে : 13 is less than 31
যদিও else if (num < 51) এটিও সত্য কিন্তু যেহেতু if (num < 31) সত্য হয়ে গেছে , তাই এর সঙ্গে বাকি যত else if কিংবা else সেগুলো আর পরীক্ষা করা হবে না ।

এখন তোমরা নিশ্চয়ই নিচের প্রোগ্রামটির আউটপুট বলতে পারবে ।

 #include <stdio.h>
 
 int main()
 {
     int num = 13;
     
     if (num < 31) {
         
         printf("%d is less than 31\n", 
num); } if (num < 51) { printf("%d is less than 51\n",
num); } return 0; } প্রোগ্রাম : ৩.৬


আচ্ছা , আমরা যদি আমাদের প্রোগ্রামে কোনো সংখ্যা আরেকটি সংখ্যার সমান অথবা বড় , কিংবা সমান অথবা ছোট পরীক্ষা করতে চাইতাম তবে কি করতাম ? আবার দুটি সংখ্যা অসমান কি না এটিও যদি পরীক্ষা করতে চাইতাম তাহলেই বা কি করতাম ? এভাবে করা যেত :

 if (num >= 13) { //সমান অথবা বড় পরীক্ষার 
জন্য } if (num <= 13) { //সমান অথবা ছোট
পরীক্ষার জন্য } if (num != 13) { //অসমান কি না পরীক্ষার
জন্য }



এখন আমরা কোনো সংখ্যা জোড় না বিজোড় তা বের করার জন্য একটি প্রোগ্রাম লিখব ।
তোমাকে একটি সংখ্যা ধরো 17 দেওয়া হলো । সংখ্যাটি জোড় না বিজোড় তা তুমি কিভাবে বলবে ?
প্রথমে সংখ্যাটিকে 2 দিয়ে ভাগ দেব । কোনো ধনাত্মক পূর্ণসংখ্যাকে 2 দিয়ে ভাগ দিলে তার দুটি ভাগশেষ সম্ভব । ভাগশেষ হয় 0 হবে নয়তো 1 । ভাগশেষ 1 হলে সংখ্যাটি বিজোড় আর 0 হলে জোড় ।

সি ল্যাঙ্গুয়েজে ভাগশেষ বের করার জন্য মডুলাস অপারেটর ( modulus operator ) আছে । একে '%' চিহ্ন দিয়ে প্রকাশ করা হয় ।

remainder = number % 2;
যদি remainder -এর মান 0 হয় তবে সংখ্যাটি জোড় তা প্রিন্ট করো । 0 না হলে প্রিন্ট করো -সংখ্যাটি বিজোড় ।

তাহলে তোমরা পুরো প্রোগ্রামটা লিখে ফেলো ।


 #include <stdio.h>
 
 int main()
 {
     int number, remainder;
     
     number = 17;
     remainder = number % 2;
     
     if (remainder  == 0) {
         
         printf("The number is even\n");
         
     }
     
     else {
         
         printf("The number is odd\n");
         
     }
     
     return 0;
 }
 
 প্রোগ্রাম : ৩.৭

আচ্ছা, আমাদের যদি শুধু জোড় সংখ্যা নির্ণয় করতে হতো তাহলে আমরা কি করতাম ? else ব্লকটা বাদ দিয়ে দিতাম !
এখন তোমাদের জন্য দুটি ছোট্ট সমস্যা ।
৩.৭ প্রোগ্রামটি তোমরা remainder ভেরিয়েবল ব্যবহার না করে করো (মানে শুধু একটি ভেরিয়েবল ব্যবহার করে করতে হবে আর কি) ।
৩.৭ প্রোগ্রামটি কিন্তু মডুলাস অপারেটর (%) ব্যবহার না করেও করা যায় । কাজটি করার জন্য মাঠে নেমে পড়ো । তোমদের যদি ডাটা টাইপ সম্পর্কে পরিষ্কার ধারণা থাকে তাহলে এক কিকেই গোল !

এবার আরেকটা প্রোগ্রাম দেখা যাক । কোনো একটা অক্ষর ছোট হাতের ( small letter / lower case letter ) নাকি বড় হাতের ( capital letter / upper case letter ) , সেটি বের করতে হবে ।

এর জন্য সবচেয়ে সহজ সমাধানটা হতে পারে এই রকম যে আমরা একটি character টাইপের ভেরিয়েবলের ভেতরে অক্ষরটা রাখতে পারি । তারপর একে একে সেটিকে 26টি lower case letter এবং 26টি upper case letter -এর সঙ্গে তুলনা করে দেখতে পারি। যখনই মিলে যাবে , তখনই বলে দেওয়া যায় , অক্ষরটা কোন ধরনের ।

 char ch = 's';

 if (ch == 'a') {
     printf("%c is lower case\n", ch);
 }

 else if (ch == 'A') {
     printf("%c is upper case\n", ch);
 }

 else if (ch == 'b') {
     printf("%c is lower case\n", ch);
 }

 else if (ch == 'B') {
     printf("%c is upper case\n", ch);
 }

 else if (ch == 'c') {
     printf("%c is lower case\n", ch);
 }

 else if (ch == 'C') {
     printf("%c is upper case\n", ch);
 }
 ...এভাবে চলবে 

কিন্তু এই সমস্যার সমাধান করার জন্য এত কোড লিখার দরকার নেই । এটি সহজে করার জন্য আমাদের জানতে হবে অ্যান্ড অপারেটরের ( AND operator ) ব্যবহার । সি ল্যাঙ্গুয়েজে একে '&&' চিহ্ন দিয়ে প্রকাশ করা হয় ।

 #include <stdio.h>
 
 int main()
 {
     char ch = 'L';
     
     if (ch >= 'a' && ch <= 'z') {
         
         printf("%c is lower case.\n", 
ch); } if (ch >= 'A' && ch <= 'Z') { printf("%c is upper case.\n",
ch); } return 0; } প্রোগ্রাম : ৩.৮

'&&' -এর বাঁ পাশে একটি কন্ডিশন এবং ডান দিকে আরেকটি কন্ডিশন থাকবে । দুটি কন্ডিশন সত্য হলেই কেবল পুরো কন্ডিশনটা সত্য হবে এবং ভেতরের কাজ হবে । একটি সত্য একটি মিথ্যা হলে কিন্তু আর ভেতরের কাজ হবে না ।

এখন কম্পিউটার প্রতিটি অক্ষর বোঝার জন্য যেই কোড ব্যবহার করে তাতে a -এর চেয়ে b -এর মান এক বেশি , b থেকে c -এর মান এক বেশি , c থেকে d -এর মান এক বেশি... এই রকম ।
তাই কোনো অক্ষর lower case হলে সেটি অবশ্যই 'a' -এর সমান কিংবা বড় হতে হবে । আবার সেটি 'z' -এর সমান কিংবা ছোট হতে হবে ।
অনুরূপভাবে কোনো ক্যারেক্টারের মান 'A' থেকে 'Z' -এর মধ্যে হলেই আমরা বলতে পারি অক্ষর টি upper case ।

আরেকটি ব্যাপার । দ্বিতীয় if -এর আগে else ব্যবহার করা উচিত । তাহলে কম্পাইলার প্রথম if -এর শর্ত সত্য হলে আর পরের if -এর কন্ডিশন পরীক্ষা করবে না । এতে সময় বাঁচবে ।

এখন আমরা আরেকটি অপারেটরের ব্যবহার দেখব । সেটি হচ্ছে অর ( OR ) অপারেটর । একে প্রকাশ করা হয় '||' চিহ্ন দিয়ে (পরপর দুটি '|' ) । '&&' -এর ক্ষেত্রে যেমন দুইপাশের শর্ত সত্য হলেই কেবল পুরো শর্তটা সত্য হয় , '||' -ক্ষেত্রে যেকোনো এক পাশের শর্ত সত্য হলেই পুরো কন্ডিশনটা সত্য হবে ।

 #include <stdio.h>
 
 int main()
 {
     int n = 26;
     
     if (n>0 || n<10) {
         printf("yes\n");
     }
     else {
         printf("no\n");
     }
     
     return 0;
 }
 
 প্রোগ্রাম : ৩.৯


এখন তোমাদের জন্য একটি সমস্যা । কোনো অক্ষর vowel নাকি consonant , সেটি বের করতে হবে ।

 if ( ch=='a' || ch=='e' || ch=='i' || 
 ch=='o' || ch=='u') {
     printf("%c is vowel\n", ch);
 }
 else {
     printf("%c is consonant\n", ch);
 }

পরবর্তী অংশ -

পেজে প্রবেশের সময় : Fri May 16 2025 09:07:07 GMT+0000 (Coordinated Universal Time)

No comments:

Post a Comment