প্রোগ্রামিং সংক্রান্ত নানান বই ঘরে বসে অনলাইনে অর্ডার করতে ক্লিক করুন এখানে

বাংলা ভাষায় পাইথন দিয়ে প্রোগ্রামিং শেখার ফ্রি বই - http://pybook.subeen.com

[প্রোগ্রামিং বইঃ অধ্যায় তিন] কন্ডিশনাল লজিক।

তোমরা অনেকেই হয়তো জানো যে 'চাচা চৌধুরীর বুদ্ধি কম্পিউটারের চেয়েও প্রখর'! এটি শুনে প্রথম প্রথম চাচা চৌধুরীর ওপর ভক্তি-শ্রদ্ধা অনেক বেড়ে গেলেও একটু চিন্তা করলেই তোমরা বুঝতে পারবে যে আসলে তোমাদের সবার বুদ্ধি কম্পিউটারের চেয়ে প্রখর। আসলে কম্পিউটারের তো কোনো বুদ্ধিই নেই। প্রোগ্রামাররা যেভাবে প্রোগ্রাম লিখে দেয় কম্পিউটার সেভাবে কাজ করে। এখন আমরা প্রোগ্রামিংয়ের সহজ অথচ খুব গুরুত্বপূর্ণ একটি বিষয় শিখব। সেটি হচ্ছে কন্ডিশনাল লজিক। কোন শর্তে কী করতে হবে সেটি প্রোগ্রাম লিখে কম্পিউটারকে বোঝাতে হবে। কথা না বাড়িয়ে আমরা প্রোগ্রাম লেখা শুরু করে দিই। তোমরা কিন্তু অবশ্যই প্রতিটি প্রোগ্রাম কম্পিউটারে চালিয়ে দেখবে।
 #include <stdio.h>   
 int main()   
 {   
     int n;   
     n = 10;   
     if(n >= 0) {   
         printf("The number is positive\n");   
     }   
     else {   
         printf("The number is negative\n");   
     }   
     return 0;   
 }  
 প্রোগ্রাম: ৩.১  
ওপরের প্রোগ্রামটির কাজ কী? n-এর বিভিন্ন মান (যেমন: 0, -10, -2, 5, 988 ইত্যাদি) বসিয়ে তোমরা প্রোগ্রামটি চালাও। দেখা যাচ্ছে যে এর কাজ হচ্ছে n ধনাত্মক (positive) না ঋণাত্মক (negative) সেটি নির্ণয় করা। কোন সংখ্যা ধনাত্মক হতে গেলে একটি শর্ত পূরণ করতে হয়। সেটি হচ্ছে তাকে শূন্যের সমান বা তার চেয়ে বড় হতে হয়। তাহলে আমাদের লজিকটি দাঁড়াচ্ছে এ রকম যে, 'n যদি শূন্যের সমান বা বড় হয়, তবে nধনাত্মক, না হলে n ঋণাত্মক'। এই ব্যাপারটি সি ল্যাঙ্গুয়েজে প্রকাশ করতে হয় if এবং তার সঙ্গে else ব্যবহার করে। if-এর ভেতর একটি শর্ত (কন্ডিশন) লিখে দিতে হয় যা সত্যি হলেই কেবল তার ভেতরের অংশের কাজ হয় (মানে if-এর পর যে দ্বিতীয় বন্ধনী { } ব্যবহার করা হয়েছে তার ভেতরের সব কাজ)। আর কন্ডিশনটা লিখতে হয় প্রথম বন্ধনীর ভেতরে। if-এর ভেতরে যেই কন্ডিশনটা আছে সেটি যদি মিথ্যা হয়, তবে else-এর ভেতরের (দ্বিতীয় বন্ধনীর ভেতরে) অংশের কাজ হয়। সব প্রোগ্রামিং ল্যাঙ্গুয়েজেই এটি আছে, তবে লিখার ধরন হয়তো আলাদা।

এখন আমাদের দেখতে হবে, কন্ডিশনগুলো কীভাবে লিখতে হবে? তোমরা এতক্ষণে জেনে গেছ যে 'বড় কিংবা সমান' এই তুলনা করার জন্য >= চিহ্ণ ব্যবহার করা হয়। 'ছোট কিংবা সমান'-এর জন্য ব্যবহার করে <= চিহ্ন। দুটি সংখ্যা একটি আরেকটির সমান কি না সেটি পরীক্ষার জন্য ব্যবহার করে == চিহ্ন (লক্ষ করো এখানে দুটি সমান চিহ্ন আছে। শুরুর দিকে অনেকেই সমান কি না পরীক্ষার জন্য ভুল করে = (একটি সমান চিহ্ন যা দিয়ে আসলে কোনো ভেরিয়েবলে কোনোকিছু অ্যাসাইন করা হয়) ব্যবহার করে বিপদে পড়ে যায়)। দুটি সংখ্যা পরস্পর অসমান কি না, এটি পরীক্ষার জন্য != চিহ্ন ব্যবহার করে। আর ছোট কিংবা বড় পরীক্ষার জন্য < আর > চিহ্ন ব্যবহার করতে হয়। আরও ব্যাপার-স্যাপার আছে। একবারে সব না শিখে চলো আস্তে আস্তে প্রোগ্রাম লিখে শেখা যাক। এখানে ইন্ডেন্টেশনের ব্যাপারটিও কিন্তু খেয়াল কোরো। if কিংবা else-এর ভেতরের ব্লকের সব লাইন কিন্তু if বা else যেখানে শুরু, তার চার ঘর (চারটি স্পেস) ডান থেকে শুরু হয়েছে।
আমরা ওপরের প্রোগ্রামটি এভাবেও লিখতে পারতাম:
 #include <stdio.h>   
 int main()   
 {   
     int n;     
     n = 10;   
     if(n < 0) {   
         printf("The number is negative\n");   
     }   
     else {   
         printf("The number is positive\n");   
     }   
     return 0;   
 }  
 প্রোগ্রাম: ৩.২  
এখানে আমরা প্রথমে পরীক্ষা করেছি যে n শূন্যের চেয়ে ছোট কি না। যদি ছোট হয়, তবে n নেগেটিভ; আর সেটি না হলে (সেটি না হওয়া মানে n অবশ্যই শূন্যের সমান বা বড়) n পজিটিভ।

তোমাদের মধ্যে যারা একটু খুঁতখুঁতে স্বভাবের, তারা নিশ্চয়ই ভাবছ যে শূন্য তো আসলে পজিটিভ বা নেগেটিভ কোনোটাই না। শূন্যের চেয়ে বড় সব সংখ্যা হচ্ছে পজিটিভ আর ছোট সব সংখ্যা হচ্ছে নেগেটিভ। কম্পিউটারকে সেটি বোঝাতে গেলে আমরা নিচের প্রোগ্রামটি লিখতে পারি:
 #include <stdio.h>   
 int main()   
 {   
     int n = 10;    
     if(n < 0) {   
         printf("The number is negative\n");   
     }   
     else if (n > 0) {   
         printf("The number is positive\n");   
     }   
     else if (n == 0) {  
         printf("The number is zero!\n");   
     }   
     return 0;   
 }  
 প্রোগ্রাম: ৩.৩  
প্রোগ্রামটি একটু ব্যাখ্যা করা যাক:
if(n < 0): এখানে আমরা প্রথমে পরীক্ষা করেছি n শূন্যের চেয়ে ছোট কি না । ছোট হলে তো কথাই নেই। আমরা বলে দিচ্ছি যে সংখ্যাটি নেগেটিভ। else if(n > 0): আর যদি ছোট না হয়, তবে n শূন্যের চেয়ে বড় কি না সেটি পরীক্ষা করেছি if(n > 0)। এই শর্ত সত্যি হলে সংখ্যাটি পজিটিভ।
else if(n == 0): আর n > 0ও যদি সত্যি না হয় তবে কোন শর্তটি বাদ রইল? দুটি সমান কি না সেটি পরীক্ষা করা। তাহলে আমরা পরীক্ষা করছি যে n শূন্যের সমান কি না এবং সমান হলে বলে দিচ্ছি যে এটি শূন্য।

দুটি সংখ্যা তুলনা করার সময় প্রথমটা যদি দ্বিতীয়টির চেয়ে বড় না হয়, ছোটও না হয়, তবে তারা অবশ্যই সমান। তাই তৃতীয় কন্ডিশনটা আসলে আমাদের দরকার নেই। আমরা প্রথম দুটি কন্ডিশন মিথ্যা হলেই বলে দিতে পারি যে n-এর মান শূন্য।
 #include <stdio.h>   
 int main()   
 {   
     int n = 10;    
     if(n < 0) {   
         printf("The number is negative\n");   
     }   
     else if (n > 0) {   
         printf("The number is positive\n");   
     }   
     else {   
         printf("The number is zero!\n");   
     }   
     return 0;   
 }  
 প্রোগ্রাম: ৩.৪  
আবার সব সময় যে if ব্যবহার করলেই সঙ্গে else কিংবা else if ব্যবহার করতে হবে, এমন কোনো কথা নেই। নিচের প্রোগ্রামটি দেখো:
 #include <stdio.h>   
 int main()   
 {   
     int number = 12;   
     if(number > 10) {   
         printf("The number is greater than ten\n");   
     }   
     return 0;  
 }  
 প্রোগ্রাম: ৩.৫  
এখানে কেবল দেখা হচ্ছে যে সংখ্যাটির মান কি দশের চেয়ে বড় কি না।

নিচের প্রোগ্রামটি দেখে বলো তো আউটপুট কী হবে?
 #include <stdio.h>  
 int main()  
 {  
     int n = 10;  
     if (n < 30) {  
         printf("n is less than 30.\n");  
     }  
     else if(n < 50) {  
         printf("n is less than 50.\n");  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৩.৬  
আউটপুট হবে: n is less than 30. যদিও else if(n < 50) এটিও সত্য কিন্তু যেহেতু if (n < 30) সত্য হয়ে গেছে, তাই এর সঙ্গে বাকি যত else if কিংবা else থাকবে, সেগুলো আর পরীক্ষা করা হবে না। এখন তোমরা নিশ্চয়ই নিচের প্রোগ্রামটির আউটপুট বলতে পারবে।
 #include <stdio.h>  

 int main()  

 {  

     int n = 10;  

     if (n < 30) {  

         printf("n is less than 30.\n");  

     }  

     if(n < 50) {  

         printf("n is less than 50.\n");  

     }  

     return 0;  

 }  

 প্রোগ্রাম: ৩.৭  

এখন আমরা আরেকটি প্রোগ্রাম লিখব। কোনো সংখ্যা জোড় না বেজোড় সেটি নির্ণয় করার প্রোগ্রাম। কোনো সংখ্যা জোড় কি না সেটি বোঝার উপায় হচ্ছে সংখ্যাটিকে 2দিয়ে ভাগ করা। যদি ভাগশেষ শূন্য হয়, তবে সংখ্যাটি জোড়; আর ভাগশেষ শূন্য না হয়ে এক হলে সেটি বেজোড়। সি ল্যাঙ্গুয়েজে ভাগশেষ বের করার জন্য মডুলাস অপারেটর (modulus operator) আছে, যেটাকে '%' চিহ্ন দিয়ে প্রকাশ করা হয়। তাহলে আর চিন্তা নেই।

শুরুতে একটি সংখ্যা নেব: int number;
এবারে number-এর জন্য একটি মান ঠিক করি: number = 5;
এখন numberকে 2 দিয়ে ভাগ করলে যে ভাগশেষ পাব সেটি বের করি: remainder = number % 2;
এখন if-এর সাহায্যে remainder-এর মান পরীক্ষা করে আমরা সিদ্ধান্তে পৌঁছে যেতে পারি। remainder-এর কেবল দুটি মানই সম্ভব– 0 আর 1। পুরো প্রোগ্রামটি লিখে ফেলি:
 #include <stdio.h>   
 int main()   
 {   
     int number, remainder;   
     number = 5;   
     remainder = number % 2;   
     if(remainder == 0) {   
         printf("The number is even\n");   
     }   
     else {   
         printf("The number is odd\n");   
     }   
     return 0;   
 }  
 প্রোগ্রাম: ৩.৮  
প্রোগ্রামটি remainder ভেরিয়েবল ব্যবহার না করেও লেখা যায়:
 #include <stdio.h>   
 int main()   
 {   
     int number = 9;   
     if(number % 2 == 0) {   
         printf("The number is even\n");   
     }   
     else {   
         printf("The number is odd\n");   
     }   
     return 0;   
 }  
 প্রোগ্রাম: ৩.৯  
আচ্ছা, আমাদের যদি কেবল জোড় সংখ্যা নির্ণয় করতে হতো, তাহলে আমরা কী করতাম? else ব্লকটা বাদ দিয়ে দিতাম।

তোমাদের জন্য এখন একটি ছোট্ট পরীক্ষা। মডুলাস অপারেটর ব্যবহার না করে ভাগশেষ বের করতে পারবে? একবার করে গুণ, ভাগ ও বিয়োগ (*, /, -) ব্যবহার করে কিন্তু কাজটি করা যায়। তোমরা সেটি করার চেষ্টা করতে পারো।

এবার আরেকটি প্রোগ্রাম দেখা যাক। কোনো একটি অক্ষর ছোট হাতের (small letter বা lower case letter) নাকি বড় হাতের (capital letter বা upper case letter), সেটি বের করতে হবে। এর জন্য সবচেয়ে সহজ সমাধানটা হতে পারে এই রকম যে আমরা একটি character টাইপের ভেরিয়েবলের ভেতরে অক্ষরটা রাখতে পারি। তারপর একে একে সেটিকে 26টি lower case letter এবং 26টি upper case letter-এর সঙ্গে তুলনা করে দেখতে পারি। যখনই মিলে যাবে, তখনই বলে দেওয়া যায়, অক্ষরটা কোন ধরনের।
 char ch = 'p';  
 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 = 'W';  
     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;  
 }  
 প্রোগ্রাম: ৩.১০  
'&&'-এর বাঁ পাশে একটি কন্ডিশন এবং ডান পাশে একটি কন্ডিশন থাকবে, এবং দুটি কন্ডিশন সত্য হলেই সম্পূর্ণ কন্ডিশনটা সত্য হবে। ch >= 'a' && ch <= 'z' এটি পুরোটা একটি কন্ডিশন। এখন &&-এর বাঁ দিকে একটি কন্ডিশন আছে ch >= 'a' আর ডানদিকে আরেকটি কন্ডিশন ch <= 'z'। দুটি কন্ডিশনই যদি সত্য হয়, তবে পুরো কন্ডিশনটা সত্য হবে। এখন কম্পিউটার প্রতিটি অক্ষর বোঝার জন্য যেই কোড ব্যবহার করে তাতে a-এর চেয়ে b-এর মান এক বেশি, b-এর চেয়ে c-এর মান এক বেশি, c-এর চেয়ে d-এর মান এক বেশি … এরকম। তাই কোনো অক্ষর lower case হলে সেটি অবশ্যই 'a'-এর সমান কিংবা বড় হতে হবে। আবার সেটি 'z'-এর সমান কিংবা ছোট হতে হবে। একইভাবে A-এর চেয়ে B-এর মান এক বেশি, B-এর চেয়ে C-এর মান এক বেশি … এরকম। তাই কোনো ক্যারেক্টারের মান 'A' থেকে 'Z'-এর মধ্যে হলে আমরা বলতে পারি যে সেটি upper case। 'A'-এর সমান কিংবা বড় হতে হবে এবং 'Z'-এর সমান কিংবা ছোট হতে হবে। আরেকটি ব্যাপার। দ্বিতীয় if-এর আগে else ব্যবহার করা উচিত। তাহলে কম্পাইলার প্রথম if-এর ভেতরের শর্ত সত্য হলে আর পরের if-এর কন্ডিশন পরীক্ষা করবে না। তাতে সময় বাঁচবে।
 #include <stdio.h>  

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

আশা করি, তোমরা '&&'-এর ব্যবহার বুঝে গেছ।

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

নিচের প্রোগ্রামটির আউটপুট কী হবে? কোড দেখে বলতে না পারলে প্রোগ্রামটি চালাও।
 #include <stdio.h>  
 int main()  
 {  
     int num = 5;  
     if(num >= 1 || num <= 10) {  
         printf("yes\n");  
     }  
     else {  
         printf("no\n");  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৩.১২  
এটির আউটপুট হবে yes। এখন num-এর মান 50 করে দাও। আউটপুট কী হবে?

এবারেও আউটপুট yesই হবে। কারণ num-এর মান 50 হলে, প্রথম শর্তটি সত্য হবে (num >= 1) আর দ্বিতীয় শর্তটি (n <= 10) মিথ্যা হবে। তবে আমরা যেহেতু দুটি শর্তের মাঝে '||' ব্যবহার করেছি, তাই যেকোনো একটি শর্ত সত্য হলেই সম্পূর্ণ শর্তটি সত্য হবে। এখন আরও একটি সমস্যা। কোনো অক্ষর vowel নাকি consonant, সেটি নির্ণয় করতে হবে। আমরা জানি, vowelগুলো হচ্ছে a, e, i, o, u। এখন কোনো ক্যারেক্টার এই পাঁচটির মধ্যে পড়ে কি না সেটি নির্ণয় করার জন্য যদি আমরা এমন শর্ত দিই: ch >= 'a' && ch <= 'u' তাহলে কিন্তু হবে না। কারণ তাহলে a থেকে u পর্যন্ত সব অক্ষরের জন্যই শর্তটি সত্যি হবে কিন্তু আমাদের দরকার নির্দিষ্ট কিছু অক্ষর। তাই শর্তটি আমরা এভাবে লিখতে পারি:
 if(ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {  
     printf("%c is vowel\n", ch);  
 }  
 else {  
     printf("%c is consonant\n", ch);  
 }  

তাহলে এবার সম্পূর্ণ প্রোগ্রামটি তোমরা লিখে ফেলতে পারো।


পরের অধ্যায়

৬৮টি মন্তব্য:

  1. sir, after 3.9 "মডুলাস অপারেটর ব্যবহার না করে ভাগশেষ বের করতে পারবে? একবার করে গুণ, ভাগ ও বিয়োগ (*, /, -) ব্যবহার করে কিন্তু কাজটি করা যায়।" please kindly tell something more about the line, i cant understand it fully what to do.

    উত্তরমুছুন
  2. এটা তো নিজে নিজে বের করতে হবে। আপাতত না বুঝলে নাই। কয়েকসপ্তাহ বা কয়েকমাস পরে নিজে আবার চেষ্টা করতে হবে। অন্য কেউ বলে দিলে কোনো লাভ নাই। :)

    উত্তরমুছুন
    উত্তরগুলি
    1. স্যার/ভাই (whatever you prefer) মডুলাস এর কাজটা ঠিক বুঝলাম না...এ বিষয়ে একটু আলোচনা করলে ভাল হত

      মুছুন
    2. স্যার, আমি ৩.৯ সমস্যাটিতে মডুলাস অপারেটর ব্যবহার না করে শুধু ভাগ আর গুন করে কাজটা করেছি বিয়োগ করিনাই, মানে আমার বিয়োগ করা লাগে নাই। তাহলে কি কাজটা হবে স্যার ?

      কোড :

      #include

      int main()
      {
      int n;

      scanf("%d", &n);

      if((n / 2) * 2 == n){
      printf("The number is even.\n");
      }
      else{
      printf("The number is odd.\n");
      }

      return 0;
      }

      মুছুন
  3. আমি মনে হয় মডুলাসের সমস্যা টা পেরেছি:

    #include
    int main()
    {
    double divR,divMul,num1,num2,rem;
    int divMin;

    printf("Enter the number you want to divide: ");
    scanf("%lf",&num1);
    printf("Enter the number you want to divide by: ");
    scanf("%lf",&num2);

    divR=num1/num2;
    divMin=divR;
    divMul=divR-divMin;
    rem=divMul*num2;

    printf("The reminder of the number %0.2lf when divided by %0.2lf is: %0.2lf \n",num1,num2,rem);
    return 0;
    }

    উত্তরমুছুন
  4. শামির মোন্তাজিদ, আপনি মডুলাস এর সমস্যা টা সমাধান করেছেন বুঝলাম। কিন্তু এই কোড টা লিখে দেয়ার মানে কি?
    যারা নতুন শিখছে তাদের চেষ্টা করতে দিন।
    আমি জানি আপনি সমস্যা সমাধানের পর আনন্দ ধরে রাখতে পারেননি। তাই কমেন্ট করে বসলেন। তবুও এ ব্যাপারটা আপনার ভেবে দেখা উচিত ছিলো।
    যাইহোক আপনার কাজ হবে কমেন্ট টা মুছে দেয়া।
    - সারিক সাদমান(আসা করি আপনি আমাকে চিনতে পেড়েছেন)

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

    উত্তরমুছুন
  6. শামীর, এখানে Even, odd নির্ণয়ের program লিখতে বলা হয়েছিল, মডুলাস অপারেটর use না করে । program-টা এরকম হওয়া উচিত :-

    #include

    int main()
    {
    printf("\t\t\tEVEN or ODD\n\n");

    int GivNum, DivAns, remain;

    printf("Please, Enter Number:\t");
    scanf("%d", &GivNum);

    DivAns = GivNum/2;
    remain = GivNum - DivAns*2;

    if(remain == 0){
    printf("\nThe Number is Even\n\n");
    }
    else {
    printf("\nThe Number is Odd\n\n");
    }

    return 0;
    }

    উত্তরমুছুন
  7. ভাইয়া প্রোগ্রাম ৩.৯ এ if(number % 2 == 0) ঐ লাইনটা আমি if(number % 2 == 1) এভাবে লিখেছি। কিন্তু প্রোগ্রামটা রান করলে নম্বরটা কে জোড় বলা হচ্ছে কিন্তু ৯ তো জোড় নয়। if(number % 2 != 0)আবার এভাবে লিখলে বলা হচ্ছে জোড়। বিষয়টা আমার কাছে পরিষ্কার না।

    উত্তরমুছুন
    উত্তরগুলি
    1. if(number % 2 == 1) এইটা লিখলে এর মানে হবে ভাগশেষ ১ আর এর মানে এটি বিজোড় সংখ্যা। আর if(number % 2 == 0) এর মানে হল ভাগশেষ ০। মানে জোড়। আর ২য় টা তে, if(number % 2 != 0) এইটা লিখা মানে হল ভাগশেষ ০ এর সমান নয়। এর মানে ০ না হলে এইটা জোড় বলবে।

      মুছুন
  8. পুরো প্রোগ্রামটা লিখলে বুঝতে পারব কোথায় ভুল হচ্ছে।

    উত্তরমুছুন
  9. আমি Conditional logic এবং এ পর্যন্ত যা শিখেছি তা ব্যবহার করে আমি সাধারণ একটি Calculator বানানোর চেষ্টা করেছি... আমি একই সাথে মডুলাস এর সমস্যা টাও সমাধান করার চেষ্টা করেছি...


    #include

    int main()
    {
    int n1, n2, res, reminder, quotient;
    char sym;

    printf("Plese enter the first number: ");
    scanf("%d", &n1);

    printf("please enter the symble: ");
    scanf("%c", &sym);
    scanf("%c", &sym);

    printf("Please enter the last number: ");
    scanf("%d", &n2);

    if (sym == '+') {
    printf("\n %d + %d = %d \n", n1, n2, n1+n2);
    }
    else if (sym == '-') {
    printf("\n %d - %d = %d\n", n1, n2, n1-n2);
    }
    else if (sym == '*') {
    printf("\n %d * %d = %d \n", n1, n2, n1*n2);
    }
    else if (sym == '/') {
    quotient = n2 / n1;
    res = quotient * n1;
    reminder = n2 - res;
    printf("\nThe Quotient is: %d\n", quotient);
    printf("And the Reminder is: %d\n", reminder);
    }
    return 0;
    }

    উত্তরমুছুন
    উত্তরগুলি
    1. Ashik Ahmed why did u used scanf for the 'SYMBEL'(line 11,12 of your program) two times?? and Tamim bhaia do u have any suggestion why it does not work when used once only?? i'm new, and the book is helping me.thanks bhaia.

      মুছুন
    2. The problem is, when you press enter, the newline character ('\n') goes as the input to the first character. That's why we need another one.

      মুছুন
    3. #include

      int main()
      {
      int num1,num2;
      char sym;
      printf("\n\n\n\t\t................CALCULATOR...................\n\n\n");

      printf("1st Number\t");
      scanf("%d",&num1);

      printf("\nSymbol\t");
      scanf("%c",&sym);
      scanf("%c",&sym);

      printf("\n2nd Number\t");
      scanf("%d",&num2);


      if (sym == '+') {
      printf("\n\n%d + %d = %d",num1,num2,num1+num2);
      }
      else if (sym == '-') {
      printf("\n\n%d - %d = %d",num1,num2,num1-num2);
      }
      else if (sym=='*') {
      printf("\n\n%d * %d = %d",num1,num2,num1*num2);
      }
      else if (sym=='/') {
      if (num2==0) {
      printf("\n\nMATH ERROR");
      }
      else {
      printf("\n\n%d / %d = %d",num1,num2,num1/num2);
      }
      }
      else {
      printf("\n\nPlease enter correct SYMBOL");
      }

      }

      মুছুন
  10. Okay... . hope here is the solution.. :)

    #include

    int main()
    {
    int n1, n2, res, reminder, quotient;
    char sym;

    printf("Plese enter the first number: ");
    scanf("%d", &n1);

    printf("please enter the symble: ");
    scanf("%c", &sym);
    scanf("%c", &sym);

    printf("Please enter the last number: ");
    scanf("%d", &n2);

    if (sym == '+') {
    printf("\n %d + %d = %d\n", n1, n2, n1+n2);
    }
    else if (sym == '-') {
    printf("\n %d - %d = %d\n", n1, n2, n1-n2);
    }
    else if (sym == '*') {
    printf("\n %d * %d = %d\n", n1, n2, n1*n2);
    }
    else if (sym == '/'){
    if(n1 == 0) {
    printf("\nThe result is: Infinity\n");
    }
    else {
    reminder = n2 % n1;
    quotient = n2 / n1;
    printf("\n The quotient is: %d\n", quotient);
    printf("And the reminder is: %d\n", reminder);
    }
    }
    return 0;
    }

    উত্তরমুছুন
  11. I figured out that it's more interesting to combined many program together...
    I tried to combined some of my programs... & it's not possible to post here.. it's over 4096 letters..

    উত্তরমুছুন
  12. Sorry for making this program likes a SMS. But I did it so that I can be posted.
    #include

    int main(){
    int selection;
    printf("Select what u wanna do:\n 1.Calculation.\n 2.Letter assement.\n");
    scanf("%d", &selection);
    if(selection==1) { int sel2;
    printf("Select de type of calculation u wanna do:\n 1.All Real Number.\n 2.Only Integers.\n");
    scanf("%d", &sel2);
    if(sel2==1) {{
    double n1, n2, res;
    char sym;
    printf("Enter de 1st number: ");
    scanf("%lf", &n1);
    printf("Enter the symble: ");
    scanf("%c", &sym);
    scanf("%c", &sym);
    printf("Enter the last number: ");
    scanf("%lf", &n2);
    if (sym== '+') {
    printf("\n %0.2lf + %0.2lf = %0.2lf\n", n1, n2, n1+n2);}
    else if (sym== '-') {
    printf("\n %0.2lf - %0.2lf = %0.2lf\n", n1, n2, n1-n2);}
    else if (sym== '*') {
    printf("\n %0.2lf * %0.2lf = %0.4lf\n", n1, n2, n1*n2);}
    else if (sym== '/') {
    if(n1==0) {
    printf("\nThe result is: Undefined.\n");}
    else{
    printf("\n %0.2lf / %0.2lf = %0.4lf\n", n2, n1, n2/n1);}}}};
    if(sel2==2) {
    int n1, n2, res, rem, quo;
    char sym;
    printf("Enter de 1st number: ");
    scanf("%d", &n1);
    printf("Enter de symble: ");
    scanf("%c", &sym);
    scanf("%c", &sym);
    printf("Enter the last number: ");
    scanf("%d", &n2);
    if (sym== '+') {
    printf("%d + %d = %d", n1, n2, n1+n2 );}
    else if (sym== '-') {
    printf("%d - %d = %d", n1, n2, n1-n2);}
    else if (sym== '*') {
    printf("%d * %d = %d", n1, n2, n1*n2);}
    else if (sym== '/') {
    if(n1==0) {
    printf("\nThe result is: Undefined.\n");}
    else {
    rem= n2 % n1;
    quo= n2 / n1;
    printf("...\nThe Quotient is: %d\n", quo);
    printf("And the Reminder is: %d\n", rem);}}}}
    else if(selection==2) {
    char ch;
    printf("Enter a letter: ");
    scanf("%c", &ch);
    scanf("%c", &ch);
    if(ch >= 'a' && ch <= 'z') {
    printf("`%c' is in lower case ", ch);};
    if(ch >= 'A' && ch <= 'Z') {
    printf("`%c' is in higher case ", ch);};
    if(ch == 'a' || ch == 'A' || ch == 'e' || ch == 'E' || ch == 'i' || ch == 'I' || ch == 'o' || ch == 'O' || ch == 'u' || ch == 'U') {
    printf("and it is a vowel.\n");};
    if((ch >= 'b' && ch <= 'd') || (ch >= 'B' && ch <= 'D') || (ch >= 'f' && ch <= 'h') || (ch >= 'F' && ch <= 'H') || (ch >= 'j' && ch <= 'n') || (ch >= 'J' && ch <= 'N') || (ch >= 'p' && ch <= 't') || (ch >= 'P' && ch <= 'T') || (ch >= 'v' && ch <= 'z') || (ch >= 'V' && ch <= 'Z')) {
    printf("and it is a consonant.\n");
    };}
    return 0;
    }

    উত্তরমুছুন
  13. Thanks Subeen vaia for writing a book like this... Now I at least know something about C programming. But now I can't find enough time to read the book. I'd be very happy if you let me have a PDF version ( a link for download maybe ) of this book so that I can read this when I'm stuck in a traficjam, with te help of my cell phone..... That'll be really helpful for me....

    উত্তরমুছুন
    উত্তরগুলি
    1. You can find a pdf book link in the facbook page of this book. Just search through the old posts. Btw, it's not recommended to read the book while stuck in traffic jam, as it's not a story book. Read only when you can concentrate 100%.

      মুছুন
    2. I found a PDF demo version of this book till this chapter by searching on google. All I know about C programming is learnt from that PDF demo. And most of the time when I was reading the book I was stuck in a traffic jam. Even after this if you recommend me not to do that, I'll not do that anymore....

      মুছুন
    3. এই মন্তব্যটি লেখক দ্বারা সরানো হয়েছে।

      মুছুন
  14. Vaia, what's the wrong in this program?

    #include

    int main()

    {
    int number, remainder;

    printf("Enter the number:\n");

    scanf("%d\n", number);

    remainder = number % 2;

    if(remainder==0) {
    printf("The number is even\n");
    }

    else {
    printf("The number is odd\n");
    }

    return 0;
    }

    উত্তরমুছুন
  15. Vaia, To find out even or odd number without using modulus operator, I did this program:

    #include
    int main()
    {
    int num1, num2;
    scanf("%d", &num1);
    num2= num1/2;
    if(num1==num2*2)
    {
    printf("The number is even\n");
    }
    else
    {
    printf("The number is odd");
    }
    }

    what you say? Is this okay with it?

    উত্তরমুছুন
  16. #include

    int main()

    {

    int a, b, add, min, div, mul,remainder;
    char sym;
    printf("Plese enter the first number: ");
    scanf("%d", &a);

    printf("please enter the symbol: ");
    scanf("%c", &sym);
    scanf("%c", &sym);

    printf("Please enter the last number: ");
    scanf("%d", &b);

    add = a+b;
    min = a-b;
    div = a/b;
    mul= a*b;
    remainder= a%b;

    if(sym=='+')
    {
    printf("%d + %d = %d\n", a, b, add );
    }
    else if (sym=='-')
    {
    printf("%d - %d = %d\n", a, b, min );
    }
    else if(sym=='/'&& b==0 )
    {
    printf("The result is: undefined\n" );
    }

    else if (sym=='/')
    {
    printf("%d / %d = %d\n", a, b, div );
    printf("the remainder is:%d\n", remainder);

    }
    else if (sym=='*')
    {
    printf("%d * %d = %d\n", a, b, mul );
    }
    return 0;
    }

    Whats the problem in the program vaia? Why scanf for sym is written two times in the program?

    উত্তরমুছুন
    উত্তরগুলি
    1. To understand why scanf for sym is written twice, you can do an experiment. Change the part of the code so that instead of sym, you use sym1 and sym2.
      scanf("%c", &sym1);
      scanf("%c", &sym2);
      And then print their values:
      printf("sym1 = %c\n", sym1);
      printf("sym2 = %c\n", sym2);

      Then you will understand, I hope.

      মুছুন
  17. স্যার আমার laptop এর windows 7 এ Turbo C সাপোট করছে না............. এখন কি করা যাই????

    উত্তরমুছুন
    উত্তরগুলি
    1. C-এর অন্য কোনো কম্পাইলার ব্যবহার করতে হবে।

      মুছুন
  18. vaia....ei jinish solve hoy na kano?

    #include
    int main()
    {
    double n;
    scanf("%lf",&n);
    if(n % 2==0) {
    printf("The number is even\n");
    }
    else {
    printf("The number is odd\n");
    }
    return 0;
    }

    উত্তরমুছুন
    উত্তরগুলি
    1. double টাইপের ভেরিয়েবল ব্যবহার করায় সমস্যা হয়েছে বলে মনে হচ্ছে। অনেক সময় ডবল টাইপের ভেরিয়েবলে কোনো মান রাখলে সেটা খুব কাছাকাছি অন্য একটা মানে পরিবর্তিত হয় (যেমন n = 3 দিলে সেটা 3.00000000001 বা 2.999999999 হতে পারে)। তাই double বা float টাইপের ভেরিয়েবল নিয়ে কাজ করার সময় == ধরনের অপারেটর ব্যবহার করা উচিত নয়।

      তোমার প্রোগ্রামে int বা long টাইপের ভেরিয়েবল ব্যবহার করলে কাজ হবে। অথবা if ((int) n % 2 == 0) লিখতে পার।

      মুছুন
  19. program 3.9: an easy way-


    #include
    int main()

    {
    int number, result;
    printf("Enter the number: ");
    scanf("%d", &number);
    result = number / 2;
    if(result * 2 == number) {
    printf("The number is even\n");
    }
    else {
    printf("The number is odd\n");
    }
    return 0;

    }

    উত্তরমুছুন
  20. Using the knowledge that i learnt so far i made a Grading program where if you input a number like marks that we get in our exam it will output the grad....


    #include

    int main()
    {
    int n;
    printf("Enter the marks that you got: ");
    scanf("%d", &n);
    if(n == 0) {
    printf("This is not Impossible but also not Possible\n", n);
    }
    else if( n >= 1 && n<= 32) {
    printf("You grad is: F, Means you FAILED\n", n);
    }
    else if( n >= 33 && n <= 39) {
    printf("You grad is: D, Means you just PASSED, Very poor result\n", n);
    }
    else if( n >= 40 && n <= 49) {
    printf("You gead is: C, Very poor result\n", n);
    }
    else if( n >= 50 && n <= 59){
    printf("You grad is: B, Your result is not good enough\n", n);
    }
    else if( n >= 60 && n <= 69){
    printf("You grad is: A-, Your result is OK\n", n);
    }
    else if( n >= 70 && n <= 79){
    printf("You grad is: A, Your result is Good\n", n);
    }
    else if( n >= 80 && n <= 90){
    printf("You grad is: A+, Your did a very good result\n", n);
    }
    else if( n >= 90 && n <= 99){
    printf("You grad is: A+, Your did an Excellent result\n", n);
    }
    else if( n == 100){
    printf("This is not possible to achive\n", n);
    }
    return 0;
    }

    উত্তরমুছুন
    উত্তরগুলি
    1. Good work, but you don't need to use the second parameter 'n' in the printf function, as you are not using it to print anything. Better write like this way:

      printf("This is not possible to achive\n");

      Good job anyway!

      মুছুন
  21. ভাইয়া, Vowel এবং Consonant বের করার প্রোগ্রামটাতে একটু সমস্যা আছে। ওখানে ক্যাপিটাল ক্যারেক্টার চেক করতে বললে কিন্তু Vowel এর শর্তের সঙ্গে ম্যাচ করবে না :-)

    উত্তরমুছুন
    উত্তরগুলি
    1. ঠিক ধরেছো। ক্যাপিটাল ক্যারেক্টার চেক করতে হলে আলাদা শর্ত বসানো লাগবে অথবা শুরুতেই স্মল ক্যারেক্টারে কনভার্ট করতে হবে।

      মুছুন
  22. i think it's easiest:
    #include

    int main()
    {
    int n1, n2, a, b, remainder;
    printf("enter a number u want to divide: ");
    scanf("%d", &n1);
    printf("enter the number u want to divide by: ");
    scanf("%d", &n2);
    a = n1 / n2;
    b = a * n2;
    remainder = n1 - b;
    printf("the remainder is: %d", remainder);
    return 0;
    }

    উত্তরমুছুন
  23. ‎#include
    int main()

    {
    float CGPA;
    int semester;
    printf("enter Semester: ");
    scanf("%d", &semester);
    printf("enter CGPA: ");
    scanf("%f", &CGPA);
    if((semester>=6 && semester<= 10 )&& (CGPA>=2 && CGPA<= 3))
    {

    printf("Valid");
    }
    else if((semester>=1 && semester<=5) && (CGPA>=3 && CGPA<=3.5))
    {printf(" Valid");}
    else if((semester==12) && (CGPA ==3.2)) //PROBLEM
    {
    printf("VALID");
    }
    else if((semester>=13 && semester<=14) && (CGPA>=3.5 && CGPA<=4))
    {

    printf("VALID");}
    else
    {
    printf(" Invalid\n");
    }
    getch();
    system("PAUSE");

    return 0;
    }

    Sir, if I give input 12 for semester and 3.2 for CGPA, the output is Invaild. But according to the 3rd condition, the output would be Valid. what is the wrong of this program? please explain.

    উত্তরমুছুন
    উত্তরগুলি
    1. float এর পরিবর্তে double ডাটা টাইপ ব্যবহার কর।

      মুছুন
  24. yes I have made it, using the multiply, division and addition I find out the Even and Odd number.

    #include
    int main()
    {
    int number = 5, a, b,c;
    a= 2 *2;
    printf("%d\n", a);
    b=number / 2;
    printf("%d\n", b);
    c= number -a;
    printf("%d\n", c);
    if(c==0){
    printf("The number is even");
    }
    else{
    printf("The number is odd");
    }


    return 0;
    }

    উত্তরমুছুন
  25. স্যার, এই প্রগ্রামটি তে একটা সমস্যায় পড়েছি। আমরা জাটি কেরেক্টার টাইপের ভেরিয়েবলে একটি বর্ণ রাখা য়ায়। তো এই প্রোগ্রামটি তে 'A+' এর শুধু + টাই প্রিন্ট হচ্ছে তো আমি কিভাবে A+ প্রিন্ট করবো।

    #include

    void main()
    {
    int marks;
    char grade;

    scanf("%d", &marks);

    if(marks >=80){
    grade = 'A+'; // It's two character but print a recherche
    printf("%c", grade);
    }else if(marks >=70){
    grade = 'A';
    printf("%c",grade);
    }else if(marks >= 60 ){
    grade = 'B';
    printf("%c",grade);
    }else if(marks >=50){
    grade = 'C';
    printf("%c",grade);
    }else if(marks >=40){
    grade = 'd';
    printf("%c",grade);
    }else if(marks >=32){
    grade ='F';
    printf("%c",grade);
    }
    getch();
    }

    উত্তরমুছুন
  26. #include

    int main()
    {
    int a,b,c,d;
    char sign1,sign2,sign3;
    printf("please enter a number");
    scanf("%d",&a);
    printf("please enter another number");
    scanf("%d",&b);
    c=a/b;
    sign1='/';
    d=a-b*c;
    sign2='-';
    sign3='*';
    printf("%d %c %d=%d %c %d %c %d=%d",a,sign1,b,c,sign2,b,sign3,c,d);
    return 0;

    }

    উত্তরমুছুন
  27. ৩.১২ প্রোগ্রামে 'no' কখন আসবে?

    উত্তরমুছুন
  28. উবুন্টু অপারেটিং সিস্টেম এ কোন কোড কম্পাইল করতে পারছি না। HELP PLZZ

    উত্তরমুছুন
  29. এই মন্তব্যটি লেখক দ্বারা সরানো হয়েছে।

    উত্তরমুছুন
    উত্তরগুলি
    1. /* find out positive value bt not use modulas*/
      #include
      int main()
      {
      int a=10, b=2, c,D,M;

      c=a*b;
      printf("%d\n",c);
      c=20;
      D=c/a;
      printf("%d\n",D);
      M=D-a;
      printf("%d\n",M);
      if(M==0){
      printf("it is positive");
      }
      else{
      printf("it is negative");
      }
      return 0;
      }

      মুছুন
  30. /* find out positive value bt not use modulas*/
    #include
    int main()
    {
    int a=10, b=2, c,D,M;

    c=a*b;
    printf("%d\n",c);
    c=20;
    D=c/a;
    printf("%d\n",D);
    M=D-a;
    printf("%d\n",M);
    if(M==0){
    printf("it is positive");
    }
    else{
    printf("it is negative");
    }
    return 0;
    }

    উত্তরমুছুন
  31. /*find a negative or posittive value without using modulas*/
    #include
    int main()
    {
    int n1,n2, minas, M,D;
    n1=21, n2=9;
    minas=n1-n2;
    printf("%d\n",minas);
    M=minas*n1;
    printf("%d\n",M);
    D=M/n2;
    printf("%d\n",D);

    if(D==0){
    printf("it is positive");
    }
    else{
    printf("it is negative");
    }

    return 0;

    }

    উত্তরমুছুন
  32. #include
    int main()
    {
    int number, remainder;
    number = 30;
    remainder = number % 2;
    if(remainder == 0) {
    printf("The number is even\n");
    }
    else {
    printf("The number is odd\n");
    }
    return 0;
    }

    if 3 is an odd number then how could 30 be even number?

    উত্তরমুছুন
  33. #include

    int main()
    {
    char input;
    scanf("%c", &input);
    printf("you have entered %c.\n", input);
    if( input >= 'a' && input <='z' )
    {
    printf("%c is lower case.\n", input);
    }
    else if( input >= 'A' && input <= 'Z' )
    {
    printf("%c is upper case.\n");
    }
    else
    {
    printf("please enter a valid key.\n");
    }
    return 0;
    }

    where is the problem? if i enter aBC, it show me , you have entered a, a is lower case !!!!!

    উত্তরমুছুন
  34. মডুলাস ব্যবহার না কর‌ে জ‌োড়ব‌িজে‌াড় ব‌ের করার প্র‌োগ্রামটা অন্যভাব‌ে কর‌েছি ::

    #include
    int main()
    {
    double a,b,c;
    scanf("%lf",&a);
    c=a/2;
    b=(int)c;
    if(c==b){
    printf("the number is even");
    }
    else{
    printf("the number is odd");
    }
    return 0;
    }

    উত্তরমুছুন
  35. #include

    int main ()
    {
    int number=10;
    if(number % 2 == 0) { printf("The number is even\n");
    }
    else { printf("The number is odd\n");
    }
    return 0;
    }
    It shows that 'the number is odd' which is not true.Why is it happening?

    উত্তরমুছুন
    উত্তরগুলি
    1. #brother
      i wanna try this()
      // brother but i find this gonna be oppostie and it defines that the number is even#include
      int main()


      {
      int number=10;
      if( number %2==0){
      printf( " the number is even\n");
      }else {
      printf ( " the number is odd\n");}






      return 0;
      }

      মুছুন
  36. modulus operator ছাড়া,EVEN নাকি ODD টা বের করলামঃ

    #include
    int main ()
    {
    int n1,n2,n3;
    printf("Please Enter a Number: ");
    scanf("%d",&n1);
    n2=n1/2;
    n3=n2+n2;
    if(n1==n3) {
    printf("This number is EVEN");
    }
    else {
    printf("This number is ODD");
    }
    return 0;
    }

    উত্তরমুছুন
  37. ভাই মডুলাস ছাড়া জোড় নাকি বিজোড় বের করার চেষ্টা করসি।।
    #include
    #include

    int main()
    {
    int n1,n2,n3,n4;
    printf("Enter a number:");
    scanf("%d", &n1);

    n2=(n1*n3)+n4;
    n3=n2/n1;
    n4=n2-(n1*n3);

    if(n4==0){
    printf("the number is even\n");
    }
    else{
    printf("The number is odd\n");
    }


    getchar();
    return 0;
    }

    উত্তরমুছুন
  38. if(ch >= 'a' && ch <= 'z') { ৩.১০ নং প্রোগ্রামে char ch = 'W' এখানে এবং if condition এর মাঝে a এবং z এ সিংগেল কোটেশন ব্যবহারের কারন কি? পূর্বের কোন If else condition এ তো কোটেশন ব্যবহার করা হয় নি। কারন টা স্যার ব্যাখা করলে বুঝতে সুবিধা হবে

    উত্তরমুছুন
  39. মডুলাস অপারেটর ব্যবহার না করে ভাগশেষ বের করে ফেলেছি সুবিন ভাইয়া...দয়া করে বল কোড কি ঠিক আছে ?
    #include
    int main()
    {
    int n,value;
    printf("Enter a number : ");
    scanf("%d",& n);
    value = 2*(n/2)-n;
    if (value == 0){
    printf("The number is even");
    }
    else{
    printf("The number is odd");
    }
    return 0;
    }

    উত্তরমুছুন

এখানে বিষয়সংশ্লিষ্ট মন্তব্য কিংবা প্রশ্ন করা যাবে। বাংলায় মন্তব্য করার সময় বাংলা হরফে লিখতে হবে। আর রোমান হরফে লিখলে ইংরেজিতে লিখতে হবে। নতুবা মন্তব্য প্রকাশ করা হবে না। ধন্যবাদ।