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

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

[প্রোগ্রামিং বইঃ অধ্যায় চার] লুপ (Loop)।

তোমরা এরই মধ্যে প্রোগ্রামের মধ্যে বিভিন্ন ধরনের শর্ত (condition) ব্যবহার করতে শিখে গেছ। এইসব শর্ত দিয়ে বিভিন্ন প্রোগ্রাম তৈরি করাও হয়তো শুরু করে দিয়েছ। খুব ভালো কথা। কিন্তু এখন আমরা আরেকটি সমস্যা ও তার সমাধানের পথ খুঁজব। একটি প্রোগ্রাম লিখতে হবে, যেটি 1 থেকে 10 পর্যন্ত সব পূর্ণসংখ্যা মনিটরে দেখাবে (প্রতি লাইনে একটি সংখ্যা থাকবে)। খুবই সহজ সমস্যা এবং সমাধানও অত্যন্ত সহজ। আমি জানি, তোমরা এক মিনিটের মধ্যেই নিচের প্রোগ্রামটি লিখে ফেলবে:
 #include <stdio.h>  
 int main()   
 {  
     printf("1\n");  
     printf("2\n");  
     printf("3\n");  
     printf("4\n");  
     printf("5\n");  
     printf("6\n");  
     printf("7\n");  
     printf("8\n");  
     printf("9\n");  
     printf("10\n");  
     return 0;  
 }  
 প্রোগ্রাম: ৪.১  
এখানে আমরা 1 থেকে 10 পর্যন্ত সবগুলো সংখ্যা প্রিন্ট করে দিয়েছি। অবশ্য একটি printf() ব্যবহার করেও কাজটি করা যেত: printf("1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n");

আবার প্রোগ্রামটি এভাবেও লেখা যেত। n একটি ইন্টিজার ভেরিয়েবল, যার মান আমরা প্রথমে 1 বসাব। তারপর n-এর মান প্রিন্ট করব। তারপর n-এর মান এক বাড়াব (n = n + 1 অথবা সংক্ষেপে, n++ লিখে)।

int n = 1;
printf("%d\n", n);
n = n + 1;
printf("%d\n", n);
n = n + 1;
printf("%d\n", n);
n = n + 1;
/* এভাবে মোট দশ বার */

আবার nএর মান 1 বাড়ানোর কাজটি কিন্তু এক লাইনেই সেরে ফেলা যায়।
printf("%d\n", n);
n = n + 1;
এর পরিবর্তে আমরা লিখতে পারি:
printf("%d\n", n++);

যা-ই হোক, এ তো গেল 1 থেকে 10 পর্যন্ত প্রিন্ট করা। কিন্তু আমাদের যদি 1 থেকে 100, বা 1000, বা 10000 পর্যন্ত প্রিন্ট করতে বলা হতো তাহলে আমরা কী করতাম? ওপরে যে পদ্ধতি অবলম্বন করা হয়েছে সেটি তো অবশ্যই করা যেত। কিন্তু আমি জানি, তোমরা কেউই এত কষ্ট করতে রাজি না।

এ সমস্যা সমাধানের জন্য সব প্রোগ্রামিং ল্যাঙ্গুয়েজেই লুপ (loop) বলে একটি পদ্ধতি রয়েছে। এটি দিয়ে একই কাজ বারবার করা যায়। লুপের মধ্যে একটি শর্ত বসিয়ে দিতে হয়, যেটি পূরণ না হওয়া পর্যন্ত প্রোগ্রামটি লুপের ভেতরের কাজ বারবার করতে থাকবে। সি ল্যাঙ্গুয়েজে দুটি জনপ্রিয় লুপ হচ্ছে while এবং for। আমরা এখন while ব্যবহার করে ওই প্রোগ্রামটি লিখব।
 #include <stdio.h>  
 int main()   
 {  
     int n = 1;  
     while(n <= 10) {  
         printf("%d\n", n);  
         n++;  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৪.২  
কী চমৎকার! এখন আমরা চাইলে 10-এর বদলে যত খুশি বসাতে পারি, যত বসাব 1 থেকে তত পর্যন্ত প্রিন্ট হবে। while লুপে প্রথম বন্ধনীর ভেতর শর্ত লিখে দিতে হয়। প্রোগ্রাম সেই শর্ত পরীক্ষা করে। যতক্ষণ পর্যন্ত শর্তটি সত্য হয় ততক্ষণ পর্যন্ত লুপের ভেতরের কাজগুলো চলতে থাকে। লুপের ভেতরের কাজগুলো থাকবে দ্বিতীয় বন্ধনীর ভেতর। যেমন এখানে লুপের ভেতরে আমরা দুটি কাজ করেছি। n-এর মান প্রিন্ট করেছি আর তারপর n-এর মান 1 বাড়িয়েছি। n-এর মান 1 করে বাড়তে থাকলে একসময় এটি 11 হবে আর তখন n <= 10 এই শর্তটি মিথ্যা হয়ে যাবে (কারণ 11 > 10)। আর প্রোগ্রামটিও লুপ থেকে বের হয়ে আসবে। অর্থাৎ, শর্তটি যখনই মিথ্যা হবে তখনই লুপ থেকে বের হয়ে যাবে।

ইন্ডেন্টেশনের ব্যাপারটিও খেয়াল করো। লুপের ভেতরের অংশের কোড চার ঘর ডানদিক থেকে শুরু হয়েছে।

এবারে তোমাদের জন্য একটি প্রশ্ন। বলো তো নিচের প্রোগ্রামটির আউটপুট কী হবে?
 #include <stdio.h>  
 int main()   
 {  
     int n = 1;  
     while(n <= 10) {  
         printf("%d\n", n);  
     }  
     n++;  
     return 0;  
 }  
 প্রোগ্রাম: ৪.৩  
এটাও কি 1 থেকে 10 পর্যন্ত সব সংখ্যা প্রিন্ট করবে? দেখা যাক। প্রোগ্রামটি রান করাও। আউটপুট কী?

মনিটরে প্রতি লাইনে 1 প্রিন্ট হচ্ছে এবং প্রোগ্রামটি বন্ধ হচ্ছে না। খুবই দুঃখের বিষয়। দেখা যাক দুঃখের পেছনে কারণটা কী।

int n = 1; প্রথমে প্রোগ্রামটি n-এর মান 1 বসাবে।
তারপর while লুপে গিয়ে শর্ত পরীক্ষা করবে। আমরা শর্ত দিয়েছি n <= 10 মানে n-এর মান 10-এর ছোট বা সমান। এই শর্ত তো সত্য কারণ n-এর মান 1। তারপর প্রোগ্রামটি n-এর মান প্রিন্ট করবে printf("%d\n", n);। তারপর কি n-এর মান 1 বাড়বে? বাড়বে না, কারণ আমরা দ্বিতীয় বন্ধনী শেষ করে দিয়েছি '}' চিহ্ন দিয়ে (মানে লুপ শেষ)। তার মানে প্রোগ্রামটি আবার শর্ত পরীক্ষা করবে, আবার n-এর মান প্রিন্ট করবে...এভাবে চলতেই থাকবে কারণ n-এর মান যেহেতু বাড়ছে না, n <= 10 শর্তটি সব সময় সত্যই রয়ে যাচ্ছে – কখনো মিথ্যা হচ্ছে না। এখন তোমরা while লুপ নিয়ে বিভিন্ন ধরনের গবেষণা চালিয়ে যেতে পারো। সব সময় সত্য হয় এমন শর্ত ব্যবহার করে তোমার কম্পিউটারকে ব্যস্ত রাখতে পারো। while(1){...} এখানে শর্ত হিসেবে 1 ব্যবহার করা হয়েছে। কম্পিউটার 1 বলতে বোঝে সত্য। সুতরাং লুপের ভেতরের কাজগুলো সব সময় চলতে থাকবে, বন্ধ হবে না। while(1 == 1){...} ও একই আচরণ করবে। তবে এখন আমি তোমাদের একটি দরকারি জিনিস বলে রাখি, যেটি দিয়ে তোমরা জোর করে লুপ থেকে বের হয়ে যেতে পারবে। সেটি হচ্ছে break স্টেটমেন্ট। কথা না বাড়িয়ে একটি প্রোগ্রাম লিখলেই ব্যাপারটি পরিষ্কার হয়ে যাবে।
 #include <stdio.h>  
 int main()   
 {  
     int n = 1;  
     while(n <= 100) {  
         printf("%d\n", n);      
         n++;  
         if(n > 10) {  
             break;  
         }  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৪.৪  
এই প্রোগ্রামটি কী করবে? 1 থেকে 10 পর্যন্ত প্রিন্ট করবে। যদিও while-এর ভেতর আমরা বলেছি যে শর্ত হচ্ছে n <= 100, কিন্তু লুপের ভেতরে আবার বলে দিয়েছি যে যদি n > 10 হয়, তবে break; মানে বের হয়ে যাও, বা লুপটি ভেঙে দাও। break সব সময় যেই লুপের ভেতর থাকে সেটির বাইরে প্রোগ্রামটিকে নিয়ে আসে। সুতরাং n-এর মান 10 প্রিন্ট হওয়ার পরে এর মান এক বাড়বে (n++;) অর্থাৎ n-এর মান হবে 11। আর তখন n > 10 সত্য হবে, ফলে প্রোগ্রামটি if কন্ডিশনের ভেতরে ঢুকে যাবে। সেখানে গিয়ে সে দেখবে তাকে break করতে বলা হয়েছে তাই সে লুপের বাইরে চলে যাবে। break-এর উল্টা কাজ করে, এমন একটি স্টেটমেন্ট হচ্ছে continue;। কোনো জায়গায় continue ব্যবহার করলে লুপের ভেতরে continue-এর পরের অংশের কাজ আর হয় না। নিচের প্রোগ্রামটি কোড করে কম্পাইল ও রান করো:
 #include <stdio.h>  
 int main()  
 {  
     int n = 0;  
     while (n < 10) {  
         n = n + 1;  
         if (n % 2 == 0) {  
             continue;  
         }  
         printf("%d\n", n);  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৪.৫  
এই প্রোগ্রামটি 1 থেকে 10-এর মধ্যে কেবল বেজোড় সংখ্যাগুলো প্রিন্ট করবে। জোড় সংখ্যার বেলায় continue ব্যবহার করার কারণে প্রোগ্রামটি printf("%d\n", n); স্টেটমেন্ট এক্সিকিউট না করে লুপের পরবর্তী ধাপের কাজ শুরু করবে।

এবারে আমরা আরেকটি প্রোগ্রাম লিখব। ছোটবেলায় যে নামতাগুলো তোমরা শিখেছ সেগুলো এখন আমরা প্রোগ্রাম লিখে কম্পিউটারের মনিটরে দেখব। চলো 5-এর নামতা দিয়ে শুরু করা যাক। আমাদের প্রোগ্রামের আউটপুট হবে এরকম:

5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
5 X 10 = 50

তোমরা নিশ্চয়ই এখন অনেকগুলো printf ফাংশন লেখা শুরু করবে না। লুপের সাহায্যে প্রোগ্রামটি লিখে ফেলবে:
 #include <stdio.h>  
 int main()   
 {  
     int n = 5;  
     int i = 1;  
     while (i <= 10) {  
         printf("%d X %d = %d\n", n, i, n*i);  
         i = i + 1;  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৪.৬  
এতক্ষণ আমরা while লুপ ব্যবহার করলাম। এবার চলো for লুপ ব্যবহার করতে শিখি। 5-এর নামতার প্রোগ্রামটি যদি আমরা for লুপ ব্যবহার করে লিখি তাহলে সেটির চেহারা দাঁড়াবে:
 #include <stdio.h>  
 int main()   
 {  
     int n = 5;  
     int i;  
     for(i = 1; i <= 10; i = i + 1) {  
         printf("%d X %d = %d\n", n, i, n*i);  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৪.৭  
for লুপের প্রথম বন্ধনীর ভেতর তিনটি অংশ লক্ষ করো। প্রতিটি অংশ সেমিকোলন (;) দিয়ে আলাদা করা হয়েছে। প্রোগ্রামটি যখন লুপের ভেতর ঢুকে তখন প্রথম সেমিকোলনের আগে আমরা যে কাজগুলো করতে বলব, সেগুলো একবার করবে। যেমন এখানে i-এর মান 1 বসাবে। তারপর দ্বিতীয় অংশের কাজ করবে। দ্বিতীয় অংশে সাধারণত শর্ত ব্যবহার করা হয় (while লুপে প্রথম বন্ধনীর ভেতর আমরা যে কাজটি করি আরকি)। ওপরের প্রোগ্রামে আমরা দ্বিতীয় অংশে i <= 10 শর্তটি ব্যবহার করেছি। এই শর্ত যদি মিথ্যা হয় তবে প্রোগ্রামটি লুপ থেকে বেরিয়ে আসবে। আর যদি সত্য হয় তবে লুপের ভেতরের কাজগুলো করবে এবং তার পর for লুপের সেই প্রথম বন্ধনীর ভেতর তৃতীয় অংশে যে কাজগুলো করতে বলা হয়েছে সেগুলো করবে। তারপর আবার দ্বিতীয় অংশে এসে শর্ত পরীক্ষা করবে। প্রথম অংশের কাজ কিন্তু আর হবে না। তো আমাদের প্রোগ্রামটি আবার লক্ষ করো। i <= 10 সত্য, কারণ i-এর মান 1। তারপর printf() ফাংশনের কাজ হবে। তারপর i = i + 1 স্টেটমেন্ট এক্সিকিউট হবে (i-এর মান এক বেড়ে যাবে)। তারপর আবার i <= 10 সত্য না মিথ্যা সেটি পরীক্ষা করা হবে (i-এর মান এখন 2)। তারপর আবার লুপের ভেতরের কাজ হবে (printf())। এভাবে যতক্ষণ না i <= 10 শর্তটি মিথ্যা হচ্ছে ততক্ষণ লুপের ভেতরের কাজ চলতে থাকবে। i-এর মান এক এক করে বেড়ে বেড়ে যখন 11 হবে তখন শর্তটি মিথ্যা হবে আর প্রোগ্রামটি লুপ থেকে বের হয়ে আসবে। for লুপের প্রথম বন্ধনীর ভেতরের তিনটি অংশই যে ব্যবহার করতে হবে এমন কোন কথা নেই। কোন অংশ ব্যবহার করতে না চাইলে আমরা সেটি ফাঁকা রেখে দিতে পারি, তবে সেমিকোলন কিন্তু অবশ্যই দিতে হবে। যেমন আমরা যদি i-এর মান আগেই নির্ধারণ করে দেই তবে সেটি লুপের ভেতর না করলেও চলে।
   int i = 1;  

   for(; i<= 10; i = i + 1) {  
       printf("%d X %d = %d\n", n, i, n*i);  
   }  
যদি তিনটি অংশের কোনোটিই লিখতে না চাই, তবে পুরো প্রোগ্রামটি এভাবে লেখা যায়:
 #include <stdio.h>  
 int main()   
 {  
     int n = 5;  
     int i = 1;  
     for( ; ; ) {  
         printf("%d X %d = %d\n", n, i, n*i);  
         i = i + 1;  
         if (i > 10) {  
             break;  
         }  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৪.৮  
এখন আমরা আরেকটি কাজ করব। for লুপ ব্যবহার করে 5-এর নামতায় যে গুণ করেছি (n*i) সেটি না করে কেবল যোগ করে প্রোগ্রামটি লিখব। তোমরা কি অবাক হচ্ছ যে নামতার প্রোগ্রাম আবার গুণ ছাড়া কীভাবে হবে? আমরা কিন্তু 5 x 3-কে লিখতে পারি 5 + 5 + 5। আমি কী করতে যাচ্ছি তা বুঝতে পারছ নিশ্চয়ই। প্রোগ্রামটি লিখে ফেলি:
 #include <stdio.h>  
 int main()   
 {  
     int m, n = 5;  
     int i;  
     m = 0;  
     for(i = 1; i <= 10; i = i + 1) {  
         m = m + n;  
         printf("%d X %d = %d\n", n, i, m);  
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৪.৯  
প্রোগ্রামটিতে আমরা গুণ না করে যোগ করলাম। কম্পাইল ও রান করে দেখো। কাজ করবে ঠিকঠাক। কোনো সংখ্যার গুণিতকগুলো যেমন গুণ করে বের করা যায়, তেমনই যোগ করেও করা যায়। আমরা যদি কোনো প্রোগ্রামে দেখি যে গুণ না করে যোগ করলেই কাজ হচ্ছে, তাহলে যোগ করাই ভালো কারণ কম্পিউটারের প্রসেসর একটি যোগ করতে যে সময় নেয়, একটি গুণ করতে তার চেয়ে অনেক বেশি সময় নেয়। যদিও তুমি হয়তো প্রোগ্রাম রান করার সময় তা বুঝতে পারো না। কম্পিউটারের প্রসেসর সম্পর্কে বিস্তারিত লেখাপড়া করলে বিষয়টা জানতে পারবে। আপাতত এটি জানলেই চলবে যে একটি গুণ করার চেয়ে একটি যোগ করা ভালো, কারণ যোগ করতে কম্পিউটার অপেক্ষাকৃত কম সময় নেয়।

তো আমরা for লুপ শিখে ফেললাম। এখন আমরা চেষ্টা করব শুধু নির্দিষ্ট একটি সংখ্যার নামতা না লিখে 1 থেকে 20 পর্যন্ত সবগুলো সংখ্যার নামতা একবারে লিখে ফেলতে। অর্থাৎ n-এর মান 5 নির্দিষ্ট না করে 1 থেকে 20 পর্যন্ত হবে। এটি করার একটি বোকা পদ্ধতি (নাকি চোরা পদ্ধতি?) হচ্ছে নামতা লিখার অংশটি বারবার কপি-পেস্ট করা। কিন্তু আমরা এটি করব লুপের ভেতর লুপ ব্যবহার করে। একটি লুপের সাহায্যে n-এর মান 1 থেকে 20 পর্যন্ত এক করে বাড়াব। আর তার ভেতর n-এর একটি নির্দিষ্ট মানের জন্য নামতাটা লিখব।
 #include <stdio.h>  
 int main()   
 {  
     int n, i;  
     for(n = 1; n <= 20; n = n + 1) {  
         for(i = 1; i <= 10; i = i + 1) {  
             printf("%d X %d = %d\n", n, i, n*i);  
         }      
     }  
     return 0;  
 }  
 প্রোগ্রাম: ৪.১০  
এখন তোমরা প্রোগ্রামটি চালাও। তারপর তোমাদের কাজ হবে গুণ না করে কেবল যোগ ব্যবহার করে প্রোগ্রামটি লেখা।

আমরা এখানে একটি for লুপের ভেতর আরেকটি for লুপ, যাকে নেস্টেড লুপও (nested loop) বলে, সেটি ব্যবহার করলাম। তো আমরা চাইলে for লুপের ভেতর for বা while অথবা while লুপের ভেতর for বা while লুপ একাধিকবার ব্যবহার করতে পারি। অবশ্য সেটি কখনোই চার বা পাঁচবারের বেশি দরকার হওয়ার কথা না। নেস্টেড লুপ দিয়ে আমরা এখন আরেকটি প্রোগ্রাম লিখব। 1, 2, 3 – এই তিনটি সংখ্যার সব বিন্যাস (permutation) বের করার প্রোগ্রাম। বিন্যাসগুলো ছোট থেকে বড় ক্রমে দেখাতে হবে অর্থাৎ প্রোগ্রামটির আউটপুট হবে এই রকম:

1, 2, 3
1, 3, 2
2, 1, 3
2, 3, 1
3, 1, 2
3, 2, 1

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

এখানে আমরা প্রথম সংখ্যাটির জন্য একটি লুপ, দ্বিতীয় সংখ্যাটির জন্য প্রথম লুপের ভেতরে একটি লুপ এবং তৃতীয় সংখ্যাটির জন্য দ্বিতীয় লুপের ভেতর আরেকটি লুপ ব্যবহার করব।
 #include <stdio.h>   
 int main()   
 {   
     int a, b, c;   
     for (a = 1; a <= 3; a++) {   
         for (b = 1; b <= 3; b++) {   
             for (c = 1; c <= 3; c++) {   
                 printf ("%d, %d, %d\n", a, b, c);   
             }   
         }   
     }   
     return 0;   
 }   
 প্রোগ্রাম: ৪.১১  
এখন প্রোগ্রামটি রান করলে আমরা এই রকম আউটপুট পাব:

1, 1, 1
1, 1, 2
1, 1, 3
1, 2, 1
1, 2, 2
1, 2, 3
1, 3, 1
1, 3, 2
1, 3, 3
2, 1, 1
2, 1, 2
2, 1, 3
2, 2, 1
2, 2, 2
2, 2, 3
2, 3, 1
2, 3, 2
2, 3, 3
3, 1, 1
3, 1, 2
3, 1, 3
3, 2, 1
3, 2, 2
3, 2, 3
3, 3, 1
3, 3, 2
3, 3, 3

কিন্তু আমরা তো আসলে এই রকম জিনিস চাচ্ছি না। a-এর মান যখন 1 তখন b ও c-এর মান 1 হবে না, আবার b এবং c-এর মানও সমান হবে না। মানে a, b ও c আলাদা হবে। তাহলে আমরা লুপের ভেতর শর্তগুলো একটু পরিবর্তন করব। দ্বিতীয় লুপের শর্ত b <= 3-এর সঙ্গে আরেকটি শর্ত জুড়ে দেব, b != a। b <= 3 && b != a মানে b-এর মান 3-এর চেয়ে ছোট বা সমান হবে এবং b-এর মান a-এর মানের সমান হবে না। তৃতীয় লুপে আমরা এখন শর্ত দেব, c <= 3 && c != a && c != b, মানে c-এর মান 3-এর ছোট বা সমান হতে হবে এবং c-এর মান a-এর মানের সমান হওয়া চলবে না এবং c-এর মান b-এর মানের সমান হলেও চলবে না। তাহলে আমাদের প্রোগ্রামটির চেহারা দাঁড়াবে এই রকম:
 #include <stdio.h>   
 int main()   
 {   
     int a, b, c;   
     for (a = 1; a <= 3; a++) {   
         for (b = 1; b <= 3 && b != a; b++) {   
             for (c = 1; c <= 3 && c != a && c != b; c++) {   
                 printf ("%d, %d, %d\n", a, b, c);   
             }   
         }   
     }   
     return 0;   
 }   
 প্রোগ্রাম: ৪.১২  
রান করলে আমরা আউটপুট কী দেখব?
3, 2, 1

মাত্র একটি লাইন! আমরা প্রোগ্রামটি ঠিক করতে গিয়ে ঝামেলা পাকিয়ে ফেলেছি মনে হচ্ছে। তোমরা কি একটু চিন্তা করে ঝামেলার কারণ বের করতে পারবে?

প্রথমে a-এর মান 1তাই a <= 3 সত্য। প্রোগ্রামটি প্রথম লুপের ভেতর ঢুকে গেল। তারপর দ্বিতীয় লুপের শুরুতে b-এর মান 1। b <= 3 সত্য। কিন্তু b != a মিথ্যা। কারণ aও b-এর মান তো সমান, দুটোর মানই 1। তাই প্রোগ্রামটি আর দ্বিতীয় লুপের ভেতর ঢুকবে না। এরপর a-এর মান 1 বাড়ল (a++)। a <= 3 সত্য (a-এর মান 2)। এখন দ্বিতীয় লুপ শুরু হবে। b-এর মান 1। এবারে b <= 3 এবং b != a দুটি শর্তই সত্য। প্রোগ্রামটি দ্বিতীয় লুপের ভেতর ঢুকে যাবে। তৃতীয় লুপের শুরুতে c-এর মান 1। c <=3 সত্য, c !=a সত্য কিন্তু c !=b মিথ্যা (দুটোর মানই 1)। তাই প্রোগ্রামটি তৃতীয় লুপ থেকে বের হয়ে যাবে– কেবল তিনটি শর্ত সত্য হলেই প্রোগ্রামটি তৃতীয় লুপের ভেতর ঢুকবে এবং a, b ও c-এর মান প্রিন্ট করবে। এভাবে কিছুক্ষণ গবেষণা করলে তোমরা দেখবে যে যখন a-এর মান 3, b-এর মান 2 এবং c-এর মান 1, তখনই কেবল সব শর্ত সত্য হয় আর আমরা আউটপুট পাই: 3, 2, 1। আসলে দ্বিতীয় লুপে আমরা b-এর মান a-এর মানের সমান হলে লুপ থেকে বের হয়ে যাচ্ছি। সেই কাজটি করা ঠিক হচ্ছে না। আমাদের উচিত দুটো মান সমান হলে পরবর্তী মানের জন্য চেষ্টা করা। আর মান দুটো সমান না হলেই কেবল পরবর্তী কাজ করা। তাহলে আমরা লিখতে পারি: for (b = 1; b <= 3; b++) { if (b != a) { /* b-এর মান a-এর মানের সমান না হলেই ভেতরের অংশে প্রোগ্রামটি ঢুকবে। */ for (c = 1; c <= 3; c++) { if (c != a && c != b) { /*c-এর মান a-এর মানের সমান না হলে এবং c-এর মান b-এর মানের সমান না হলেই কেবল ভেতরের অংশে প্রোগ্রামটি ঢুকবে। */ printf ("%d, %d, %d\n", a, b, c); } } } } তাহলে আমাদের পুরো প্রোগ্রামটি দাঁড়াচ্ছে এই রকম:
 #include <stdio.h>   
 int main() 
 {   
     int a, b, c;   
     for (a = 1; a <= 3; a++) {   
         for (b = 1; b <= 3; b++) {   
             if (b != a) {                            
                 for (c = 1; c <= 3; c++) {   
                     if (c != b && c != a){                 
                         printf ("%d, %d, %d\n", a, b, c);   
                     }   
                 }   
             }   
         }   
     }   
     return 0;   
 }   
 প্রোগ্রাম: ৪.১৩  
প্রোগ্রামটি চালালে আমরা নিচের আউটপুট দেখব, যেটি আমরা চাচ্ছিলাম।
1, 2, 3
1, 3, 2
2, 1, 3
2, 3, 1
3, 1, 2
3, 2, 1
যাক, অবশেষে আমাদের সমস্যার সমাধান হলো। তবে আমরা কিন্তু আরও সহজেই সমাধান করতে পারতাম এভাবে–
 #include <stdio.h>   
 int main()   
 {   
     int a, b, c;   
     for (a = 1; a <= 3; a++) {   
         for (b = 1; b <= 3; b++) {   
             for (c = 1; c <= 3; c++) {   
                 if(b != a && c != a && c != b) {  
                     printf ("%d, %d, %d\n", a, b, c);   
                 }  
             }   
         }   
     }   
     return 0;   
 }  
 প্রোগ্রাম: ৪.১৪  
এখানে আমাদের বেশি চিন্তা করতে হলো না। কেবল প্রিন্ট করার সময় a, b, c তিনটির মান পরস্পরের সমান নয়, সেটি নিশ্চিত করে নিলেই হলো! বুদ্ধিটা ভালোই, তবে এটির চেয়ে আমাদের আগের প্রোগ্রামটি কম্পিউটারকে দিয়ে কম কাজ করায়, তাই চলতেও কম সময় লাগে, বা কম্পিউটারের ভাষায় বললে রান টাইম (run time) কম। আসলে একটি প্রোগ্রাম চলতে কেমন সময় লাগবে সেটি নির্ভর করে মূলত প্রোগ্রামটি মোট কয়টি অ্যাসাইনমেন্ট অপারেশন (assignment operation) আর কয়টি কম্পারিজন অপারেশন (comparison operation) করল তার ওপর।


পরের অধ্যায়

৭১টি মন্তব্য:

  1. ভাই ধন্যবাদ! সুন্দর একটা প্রোগামিং সাইট তৈরী করার জন্য। আমার যেটা সমস্যা আশা রাখি আপনার মাধ্যমে আমার সমস্যার সমাধান হবে । আমি for loop এর ক্ষেত্রে একটু problem face করছি। আশা করি নিচের প্রগাম গুলো একটু বিশ্লেষণ করবেন।।
    #include
    void main()
    {
    int i,j,a[10][20];
    for(i=1;i<=4;i++)
    {
    for(j=1;j<=4;j++)
    a[i][j]=0;
    }
    for(i=1;i<=4;i++)
    {
    for(j=1;j<=4;j++)
    printf("\%d",a[i][j]);
    printf("\n");
    }
    }

    #include
    void main()
    {
    int i,j;
    for (i=1;i<=8;i++)
    {
    for(j=1;j<=i;j++)
    {
    printf("%d",i);
    }
    printf("\n");
    }
    }

    উত্তরমুছুন
  2. স্যার, লুপ এ কি আমরা scanf use করতে পারব? সেটা কিভাবে? একটা programme দিয়ে বুঝালে একটু ভাল হয়।।

    উত্তরমুছুন
  3. যেকোনো কাজই, যা আমরা বারবার করতে চাই (অর্থাৎ পুনরাবৃত্তি করতে চাই), সেটা লুপ ব্যবহার করে করা যাবে। যেমন প্রতিবার দুইটি সংখ্যা ইনপুট নিয়ে তাদের যোগফল প্রিন্ট করা যাবে এভাবে:
    for(i = 0; i < 10; i++)
    {
    scanf("%d %d", &num1, &num2);
    printf("Summation is %d\n", num1 + num2);
    }

    উত্তরমুছুন
  4. আমার প্রোগ্রামটি কেমন হয়েছে?
    #include
    int main()
    {
    int m, n, p ;
    printf("Type the multiplier");
    scanf("%d", &m);
    printf("Type how many times you want to multiply");
    scanf("%d", &n);
    p = 1;
    while(p <= n) {
    printf("%d X %d = %d\n", m, p, m*p);
    p ++;
    }
    return 0;

    }

    উত্তরমুছুন
  5. ভাইয়া আমি প্রোগ্রামিং-এ একেবারে নতুন। আপনার বইটা পরে একটু-আধটুকু ট্রাই করতেছি। লুপে এসে একটা সমস্যাতে পরে গেলেলাম। ৪.১০ প্রোগ্রামটা শুধুমাত্র যোগ ব্যবহার করে করতে পারছি না। একবার বিয়োগ ব্যবহার করে করতে পারছি, কিন্তু শুধুমাত্র যোগ দিয়ে কিভাবে করব বুজতে পারছি না। একটু যদি হেল্প করতেন বা কিছু hintz দিতেন প্লিজ :) আর ভাইয়া আপনার বইটা অনেক সুন্দর এবং সহজ ভাষায় লিখা। এরকম একটা বই উপহার দেওয়ার জন্য আপনাকে অনেক অনেক ধন্যবাদ।

    উত্তরমুছুন
    উত্তরগুলি
    1. এখনই সব পারতে হবে এমন কোনো কথা নেই। এখন না পারলে পরে চেষ্টা করবে। :)

      মুছুন
  6. হুম ঠিক আছে কিন্তু এইটা রেখে যেতে ইচ্ছা করছে না। যদি কিছু hintz পেতাম...... :)

    উত্তরমুছুন
  7. #include
    int main()
    {
    int m, n = 5;
    int i;
    m = 0;
    for(i = 1; i <= 10; i = i + 1) {
    m = m + n;
    printf("%d X %d = %d\n", n, i, m);
    }
    return 0;
    }
    প্রোগ্রাম: ৪.৯

    akhane m er maan 5 and arek jaigai m = 0;
    r printf("%d X %d = %d\n", n, i, m);
    akhane n,i,m ata ki * naki + hoitase aktu details janabem pls via i am new

    উত্তরমুছুন
    উত্তরগুলি
    1. প্রথমে n-এর মান 5 অ্যাসাইন করা হয়েছে কিন্তু m-এর কোনো মান অ্যাসাইন করা হয় নাই। (int m, n = 5;)
      পরে m-এর মান 0 অ্যাসাইন করা হয়েছে। (m = 0;)
      কিন্তু প্রথমে m-এর মান 5 অ্যাসাইন করা থাকলেও কোনো সমস্যা ছিল না। (যদি লিখতাম int m = 5, n = 5;)
      কারণ পরে m-এর মান 0 অ্যাসাইন করা হয়েছে। তুমি নিজে একটা ছোট্ট প্রোগ্রাম লিখে পরীক্ষা করে দেখো।

      আর দ্বিতীয় প্রশ্নটা বুঝি নাই। আবার একটু বুঝিয়ে লেখো।

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

      মুছুন
    2. আমার মনে হয় দ্বিতীয় প্রশ্নের উত্তর এখানেঃ
      n,i,m আসলে হিসাব করতে ব্যবহার হচ্ছে না । হিসাব যা করার তা m = m + n; এইখানেই হচ্ছে । n,iএবংm সিরিয়ালি বসালে কম্পিউটার সে অনুযায়ী পর্দায় দেখায় । প্রোগ্রাম ২.৫ এ বলা আছে a,b,sum না লিখে b,a,sum লিখতে ওটা বুঝলে এটা বুঝার কথা ।

      মুছুন
  8. #include

    int main()
    {
    int a,b,c;
    for (b=1;b<=20;b=b++) {
    a=0;
    for (c=1;c<=0;c=c++){
    a=a+b;
    printf("%d*%d=%d\n", b,c,a);
    }
    }
    return 0;
    }

    ভাইয়া, আমার ভুল কোথায় হয়েছে বুঝতে পারছি না...

    উত্তরমুছুন
    উত্তরগুলি
    1. for (c=1;c<=0;c=c++) ... এই লুপটা কি আসলে কোনো কাজ করবে? একটু চিন্তা করে দেখো তো।

      মুছুন
  9. আমার মনে হয় c++ দিলে আর c= দেওয়ার প্রয়োজন পড়ে না ।

    উত্তরমুছুন
  10. ভাইয়া, আমি ৪.১০ এর পরের সমস্যাটা সমাধান করতে পারছি না, এখন কি আমি ওই সমস্যাটা নিয়ে ভাববো নাকি এগোবো ?

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

    int main()
    {
    int a,b,c;
    for(a=1; a<=3; a++){
    for(b=1; b<=3; b++){
    for(c=1; c<=3; c++) {
    printf(" %d, %d, %d\n", a, b, c);
    }
    }
    }
    return 0;
    }
    ভাইয়্যা এই প্রোগ্রামে আমার বুঝতে একটু সমস্যা হচ্ছে। সমস্যাটা আপনাকে বিস্তারিত বলি।
    প্রোগ্রামটার শুরুতে আমি একটা লুপ নিয়েছে a এর জন্য। এখানে বলেছি a এর মান 1 এবং শর্ত দিয়েছে a<=3 যা a=1 হবার জন্য সত্য। ভাল কথা। তাহলে প্রোগ্রামটি a লুপের ভিতরে ঢুকবে, ঢুকে সে b লুপের দেখা পাবে। সেখানেও একি ভাবে b<=3 পুরন হয়ায় প্রোগ্রাম b এর ভিতরে ঢুকবে। একি ভাবে c লুপের ভেতরে ঢুকে সত্য শর্ত দেখে প্রিন্ট করবে 1,1,1। এখানে আমি printf ফাংশানটি ৩ নম্বর অর্থাৎ c লুপের মধ্যে বলেছে। এখন c++ এর জন্য c এর মান এক বেরে যেয়ে 2 হবে এবং আবার a লুপ থেকে কাজ শুরু হবে। এভাবে c লুপে এসে দ্বিতীয়বার c=2 দেখবে, প্রিন্ট হবে 1,1,2। একি ভাবে তৃতীয়বার c=3 হবে এবং c<=3 সত্য হবে, c লুপের ভিতরে প্রোগ্রাম ঢুকবে এবং প্রিন্ট করবে 1,1,3। কিন্তু আমরা যেহেতু c লুপে c++ শর্ত দিয়েছে সেহেতু c এর মান এখন 4 হবে। প্রোগ্রাম আবার প্রথম থেকে a,b চেক করে সত্য পাবে কিন্তু c তে এসে দেখবে মিথ্যা করন c=4 এর জন্য c<=3 অবশ্যই মিথ্যা। তাহলে c লুপের ভিতরের কাজ আর প্রোগ্রাম করবে না। এখান থেকেই ফিরত যাবে। ফলে কিছুই প্রিন্ট হবার কথা না কারন c চেক হয় নাই আর আমি c লুপের ভেতরেই বলেছে a,b,c এর মান প্রিন্ট করতে। তাহলে প্রোগ্রামের উচিত ছিল মাত্র তিনটা লাইন প্রিন্ট করা। কিন্তু সে ২৭টা লাইন প্রিন্ট করছে। কেন?

    উত্তরমুছুন
    উত্তরগুলি
    1. "এখন c++ এর জন্য c এর মান এক বেরে যেয়ে 2 হবে এবং আবার a লুপ থেকে কাজ শুরু হবে।" - এখানে তোমার বোঝার ভুল হচ্ছে। c-এর মান এক বাড়ার পরে c লুপের কাজ আবার হবে, তখন printf ফাংশনটি 1, 1, 2 প্রিন্ট করবে। তারপরে c-এর মান এক বেড়ে 3 হবে এবং c লুপের ভিতরের কাজ আবার হবে (কারণ c <= 3 শর্তটি সত্য) এবং printf ফাংশনটি 1, 1, 3 প্রিন্ট করবে। তারপরে c-এর মান এক বেড়ে 4 হবে আর c <= 3 শর্তটি মিথ্যা হয়ে যাবে। তখন b-এর মান এক বেড়ে 2 হবে আর c লুপটি শুরু হবে (c-এর মান 1)... এভাবে চলবে। আশা করি এখন একটু চিন্তা করলে বুঝতে পারবে। আর বুঝতে যদি এখনও সমস্যা হয় তাহলে আমি একটি ভিডিওর মাধ্যমে বোঝানোর চেষ্টা করব।

      মুছুন
    2. ধন্যবাদ ভাইয়্যা। বুঝতে পেরেছি। এটা ভুল বোঝার জন্যই অনেক কিছু প্যাচ লেগে যাচ্ছিল।
      আরেকটা সমস্যা আছে।
      "আসলে দ্বিতীয় লুপে আমরা b-এর মান a-এর মানের সমান হলে লুপ থেকে বের হয়ে যাচ্ছি। সেই কাজটি করা ঠিক হচ্ছে না। আমাদের উচিত দুটো মান সমান হলে পরবর্তী মানের জন্য চেষ্টা করা।"

      "আমাদের উচিত দুটো মান সমান হলে পরবর্তী মানের জন্য চেষ্টা করা।"
      কথাটার অর্থ ঠিক বুঝতে পারলাম না। যদি আরেকটু ব্যখ্যা করতেন তাহলে পরিস্কার হত।

      আর
      for (b = 1; b <= 3 && b != a; b++); আর if( b != a){} এর মধ্যে পার্থক্যটা ধরতে পারছি না।
      আমার কাছে একি লাগছে। যেমন প্রথমে b, a এর সমান না হলে লুপ মিথ্যা। তাহলে a+1=2 নিজে কাজ শুরু হবে।
      আবার if( b != a) ক্ষেত্রেও b, a এর সমান না হলে পরের কাজ করবে না b+1=2 নিয়ে কাজ করবে। :/

      আবার আরেকটা ধারনা আছে।
      তাহলে কি আমরা এই বিষয়টা এরাবার জন্য এই কাজটা করেছি যে, b লুপ মিথ্যা হলে a এর মান বেড়ে কাজ শুরু হত। কিন্তু এখন b এর আলাদা শর্তের কারনে সেটা মিথ্যা হলে শুধু b এর মান বেড়ে পরবর্তি কাজ শুরু হবে। a কে নিয়ে ঝামেলা না করে b এর মান বদলে কাজ চালিয়ে যাওয়া। আমার ধারনা কি ঠিক?

      মুছুন
    3. "যেমন প্রথমে b, a এর সমান না হলে লুপ মিথ্যা" - এই ধারণাটা কি ঠিক? b <=3 && b != a এই কন্ডিশনের মানে হচ্ছে, b-এর মান 3-এর চেয়ে ছোট বা সমান এবং b-এর মান a-এর মানের সমান না হলে শর্তটা সত্য।

      মুছুন
    4. *ও দুঃখিত ভাইয়া উল্টা বলে ফেলছি। :(

      *কম্পারিজন অপারেশন (comparison operation) কি?
      a!=b , a<=5 এগুল?
      অ্যাসাইনমেন্ট অপারেশন (assignment operation) কি a=1 এগুল?

      *৪.১৪'র মধ্যে if একটা।
      কিন্তু ৪.১৩'র কাজ বেশি মনে হচ্ছে।মানে if দুইটা। তাহলে কেন ৪.১৪ তে সময় বেশি লাগছে?

      মুছুন
    5. কম্পারিজন ও অ্যাসাইনমেন্ট অপারেশন বিষয়ক তোমার ধারণা সঠিক।

      if-এর সংখ্যা কোনো ব্যাপার না। মোট কাজের পরিমান (মোট অপারেশন) কোনটায় বেশি সেটা হিসাব কর।

      মুছুন
  12. #include

    int main()
    {
    int n,f=2,p,s=0;

    printf("your want to start finding primes from:");

    scanf("%d",&p);

    printf("how many primes you want to find:");

    int c1=0,c3=0,c7=0,c9=0;
    scanf("%d",&n);

    printf("\n\nthe primes are:\n");

    while(s<=n-1){

    if(p==1){
    printf(" 2,");
    s++;
    }


    while(f %dprimes ending with 1\n2=> %dprimes ending with 3\n3=> %dprimes ending with 7\n4=> %dprimes ending with 9",c1,c3,c7,c9);
    return 0;
    }

    উত্তরমুছুন
  13. লুপ ব্যবহার করে মৌলিক সংখ্যা বের করার ২ টা প্রোগ্রাম লেখলাম। সুবিন ভাইয়া, এই প্রোগ্রামে কালকুলেশন কমানো যায় কীভাবে??

    উত্তরমুছুন
  14. #include
    main ()


    { printf ( "তামিম ভাই, ভাই বললাম, কিছু মনে করেননি তো? :D
    আমি আর আমার বন্ধু এই ব্লগটা পড়ছি আর শিখার চেষ্টা করছি। এক একটা সমস্যা না মেলার পরে আমাদের অঙ্গভঙ্গি আর এক একটা সমস্যা মেলার আমাদের লাফঝাপ যদি কেউ ভিডিও করে রাখত তাহলে বুঝতেন! :)
    কিন্তু ভাইয়া, 'একটু চিন্তা করে দেখো তো।' এই শব্দ কয়টি যে আমাদের জীবনে কি পরিমান প্রভাব রেখেছে আপনি জানেন? এই লাইনটা পড়ার পরে আমার প্রথম চিন্তা ছিল, তাইতো!! কেন আমরা মাথাটাকে খাঁটাই না? আমরা প্রতিদিন কত কিছু যে করি!!! কিন্তু 'বিনামূল্যে' পাওয়া এই 'অমূল্য' সম্পদটিকে কেন যে ব্যবহার করি না... আল্লাহ মালুম।
    অনেক ধন্যবাদ ভাই আপনাকে, অনেক অনেক ধন্যবাদ!!!" );
    return ;
    }

    :)

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

      তোমাদের জন্য শুভকামনা।

      মুছুন
  15. সুবিন ভাই আমার এই রেজাল্ট টায় "a" এর মান output এ সরাসরি 15 আলস কেন এবং গুন হল কেন ? রেজাল্ট টার Screenshot এর link প্লিজ একটু ডাউনলোড করে দেখেন http://www.mediafire.com/?f5gw88iuli1pb1w

    উত্তরমুছুন
    উত্তরগুলি
    1. গুণ হল কারণ তুমি গুণ করেছ, a*b*c। আর আউটপুট মনে হয় পুরাটাই আসছে কিন্তু স্ক্রিনে কেবল শেষ অংশটুকু দেখানো। তুমি স্ক্রল করে উপরে দেখো। আর ফাইলে আউটপুট নিয়ে দেখতে পারো (ভিডিও টিউটেরিয়ালে আছে কিভাবে ফাইলে আউটপুট নিতে হয়)।

      মুছুন
    2. সরি আমি গুন হল কেন বলতে বুঝিয়েছি প্রথমেই a 15 হয়ে গুন হল কেন।আর উপরে তো আর স্ক্রল করা যাচ্ছে না।এটাই সর্বোচ্চ উপরে।আর প্লিজ একটু লিঙ্কটা দিবেন যেখানে আউটপুট বের করার ভিডিও টিউটেরিয়ালটা পাব।

      মুছুন
  16. সুবিন ভাই বললেন না যে কই থেকে ফাইল এ আউটপুট নেয়ার ভিডিও টিউটেরিয়াল পাব? Plzz হেল্প করেন।

    উত্তরমুছুন
    উত্তরগুলি
    1. এই ওয়েবসাইটের ভিডিও টিউটোরিয়াল অংশে দেখো। freopen

      মুছুন
  17. ভাইয়া ৪.১০ যোগ করার কোড টা কি এমন হতে পারে-আমি তিন দিন চেস্টআ করে এমন সমাধান বের করেছি, জদিও আমার সি এর ধারনা আনেক কম।আমি আপনার বই পরা সুরু করেছি পাঁচ দিন আগে।খুবি ভাল লাগছে এখন পর্যন্ত-

    #include

    void main()
    {
    int i,j,k,m;
    for(i=1;i<=10;i++)
    {
    for(j=1;j<=10;j++)
    {
    m=0;
    m=m+(i*j);
    k=m+i;
    m=m+i;
    k=m-i;
    printf("%d*%d=%d\n",i,j,k);
    }
    }
    }

    ভাইয়া একটু বলবেন কি এটা হয়েছে নাকি।

    উত্তরমুছুন
  18. Program 4.9
    m=m+n না লিখে printf ফাংশনের ভিতর আমি m এর জায়গায় m+n লিখলাম। কিন্তু কাজ হচ্ছে না। আউটপুট সবগুলো 5 আসতেছে। উত্তর চাই।

    উত্তরমুছুন
    উত্তরগুলি
    1. m=m+n স্টেটম্যান্ট এক্সিকিউর হওয়ার পরে m এর মান প্রিন্ট করা আর m+n এর মান প্রিন্ট করায় একটা পার্থক্য আছে, যেহেতু কাজটা লুপের মধ্যে বার বার করছ। এখন সমস্যাটা কোথায় সেটা ঠান্ডা মাথায় নিজে চিন্তা করে বের করো। এটা তোমার এসাইনমেন্ট। :)

      মুছুন
  19. #include

    int main()
    {
    int a, b, c = 0;
    for(a = 1; a <= 20; a = a + 1) {
    for(b = 1; b <= 10; b = b + 1) {
    c = c + a;
    printf("%d * %d = %d \n", a, b, c);
    }
    c = 0;
    }
    return 0;

    }
    Please tell if I'm right.(Problem 4.10 with addition)

    উত্তরমুছুন
    উত্তরগুলি
    1. Run the program and see the output. Then you will be able to understand if you're right. That's the fun thing about programming. :)

      মুছুন
    2. c=0; আবার কেন দিতে হল return 0 এর আগে?

      মুছুন
  20. ভাইয়া আমি প্রোগ্রামিং এ নতুন। একটা প্রব্লেম সল্ভ এ দেখলামঃ
    while(scanf("%d %d",&a,&b)==2)
    এখানে "==২" এইটা কি বুঝায়?

    উত্তরমুছুন
  21. ভাইয়া আপনি যে ৪৩ টা প্রব্লেম সেট করেছেন তার মধ্যে স্ট্রিং নিয়া যেগুলা আছে আমি সেগুলাতে WA খাইছি...। যেমন টেস্ট কেজ যদি ৫ হই এবং প্রতিটাতে একটা লাইন ইনপুট নিলে আমি কোড টা এই ভাবে করেছি।।
    cin>>t;
    while(t--)
    {
    gets(s);
    }
    তাহলে একটা ইনপুট কম নেই । এর জন্য ইনপুট ফরমেট ক্যামন হবে সি++ এ।

    উত্তরমুছুন
    উত্তরগুলি
    1. এক্সপেরিমেন্ট করে দেখো কীভাবে করলে AC হবে, অনেকের তো হচ্ছে। :)

      মুছুন
  22. আমার এটা কি ঠিক আছে?

    #include
    int main()
    {
    int a, b, c, d;
    for(a=1 ; a<=4 ; a++){
    for(b=1 ; b<=4 ; b++){
    for(c=1 ; c<=4 ; c++){
    for(d=1 ; d<=4 ; d++){
    if(a!=b && b!=c && c!=a && d!=c && d!=b && d!=a){
    printf("%d, %d, %d, %d\n", a, b, c, d);
    }
    }
    }
    }
    }
    }


    উত্তরমুছুন
  23. #include
    int main()
    {
    int a=1, b=1;
    while (b<=20) {
    while (a<=10) {
    printf("%d X %d = %d\n", b ,a , a*b);
    a++;
    }
    b++;
    }
    return 0;
    }

    vaia please help. can't find the problem here :'(

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

    int main()
    {
    int n, m, i;
    m = 0;
    for( n = 1; n <= 20; n = n + 1){
    for( i = 1; i <= 10; i = i + 1){
    m = m + n;
    printf("%d X %d = %d\n", n, i, m);
    }
    }
    return 0;
    }
    vaia where is my problem??

    উত্তরমুছুন
  25. #include
    int main()
    {
    int a,b,c;
    a=8;
    b=3;
    c= pow(a-b,2);
    printf("%d",c);
    return 0;
    }
    Why its result 24 ? please help me.

    উত্তরমুছুন
    উত্তরগুলি
    1. pow() ফাংশন double type value return করে । So, you should have written "double c;" instead of "int c";

      #include
      int main()
      {
      int a,b;
      a=8;
      b=3;

      double c=pow(a-b,2);

      printf("%lf",c);
      return 0;
      }

      মুছুন
  26. ভাইয়া কেমন হয়েছে?

    #include
    int main()
    {
    int m;
    int s;
    int l;
    printf("type the number that you want to count: ");
    scanf("%d", &m);

    printf("Please enter a number: ");
    scanf("%d", &s);

    printf("Please enter a number you want to last: ");
    scanf("%d", &l);

    while(s <= l){
    printf("%d x %d\n",m, s, m*s);
    s++;
    }
    }

    উত্তরমুছুন
  27. #include
    int main()
    {
    int a, b, c;
    int s, p;
    for(a =1; a <= 10; a++){
    s = 0;
    for(b = 1; b <= 10; b++){
    s = s+a;
    p = 0;
    for(c = 1; c <= 10; c++){
    p = p+s;

    printf("%d x %d x %d = %d\n", a, b, c, p);
    }
    }
    }
    }

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

    int main()
    {
    int a,i;
    for(a=1;a<=20;a++)
    {
    for(i=1;i<=20;i++)
    {
    printf("%d + %d = %d\n",a,i,a+i);
    }
    }

    getch();
    return 0;
    }



    আমি যখন a এবং i এর মান সমান দেই তখন প্রোগ্রামটা সমস্যা করে। কিন্তু i এর মান যদি ১০ দেই তাহলে ঠিকমত কাজ করছে।

    আমি যখন i এর মান a এর সমান করে দিচ্ছি তখন প্রোগ্রামটা মাঝখান থেকে শুরু হচ্ছে, অনেকটা এরকম,

    6+2=8
    6+3=9
    6+4=10
    ..........
    ..........

    কিন্তু এর আগের কিছুই দেখাচ্ছে না, i এর মান ১০ এর বেশি দিয়েও একই সমসসার সম্মুখিন হলাম। এর কারনটা কি?

    উত্তরমুছুন
  29. #include
    #include
    main()
    {
    int n, i;
    printf("Enter a number(limit 326) : ");
    scanf("%d", &n);

    for ( i=1; i<=10; i++ )
    {

    printf(" %d * %d= %d \n", n, i, n*i );
    }

    }


    দেখেন ভাই কেমন হল

    উত্তরমুছুন
  30. For লুপ টা ভাল মত বুঝলামনা........................।

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

    main()
    {
    int i,j,k;
    for(i=1;i<=5;i++)
    {
    for(j=5-i;j>=0;j--)
    {
    printf(" ");
    }
    for (k=1;k<=i;k++)
    {
    printf("* ");
    }
    printf("\n");
    }

    }





    এই টা আমি ভালো করে বুঝতে পারলাম না একটু বুঝে দিলে ভালো হয়

    উত্তরমুছুন
  32. I was trying to make a program to find the average of t numbers. The program was running fine using for loop. I took input of 10 numbers but the program printed 9 numbers. please tell me where the problem is?

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

    int main()
    {
    int i,j,n=0;

    for(i=1;i<=20;i++){
    for(j=1;j<=10;j++){
    n+=i;
    printf("%dX%d=%d\n",i,j,n);
    if(j==10){
    n=0;
    }
    }
    }

    return 0;
    }

    সুবিন ভাই ! ৪.১০ যোগের মাধ্যমে করলাম।

    উত্তরমুছুন
  34. ভাইয়া , আমি প্রোগ্রামিং এ নতুন । আমি নেস্টেড লুপে আটকে গিয়েছি। আপনার বুক এবং ভিডিও অনেক বার পড়ছি এবং দেখছি তারপরেও বুঝতে পারছি না। ১ম প্রোগ্রাম টা মোটামুটি বুঝছি কিন্তু ২য় প্রোগ্রাম টা কিভাবে কাজ করছে কোন ভাবেই বুঝতে পারছি না । তো আমি কি সামনে আগাব না এইটা আরো চেস্টা করব ?

    *1st program*

    #include

    int main ()
    {
    int a, b;

    for (a = 1;a <= 10;a++) {
    for (b = 1;b <= 5;b++) {
    printf("%d , %d\n", a,b);
    }
    }

    return 0;
    }


    *2nd program*

    #include

    int main ()
    {
    int a, b,c;

    for (a = 1;a <= 3;a++) {
    for (b = 1;b <= 3;b++) {
    for (c = 1;c <= 3;c++) {
    printf("%d ,%d, %d\n", a,b,c);
    }
    }
    }

    return 0;
    }

    উত্তরমুছুন
  35. ভাইয়া, ৪.১০ প্রোগ্রামটি কীভাবে কাজ করল বুঝতে পারলাম না।

    উত্তরমুছুন
  36. ৪.১০ এর সমাধান যোগের মাধ্যমে সমাধান করলাম...
    #include
    int main()
    {
    int n,i,m;
    for (n=1;n<=20;n++){
    for (i=1;i<=10;i++){
    m=m+n;
    printf ("%d x %d = %d\n",n,i,m);
    if (i==10){
    m=0;
    }
    }
    }
    return 0;
    }

    সুবিন ভাই হয়েছি কি?

    উত্তরমুছুন
  37. Sir , I am trying to solve 1 to 5 multiplication table using nested loop (while into while).
    I have written the program following type:
    #include
    int main()
    {
    int n=1,i=1;
    while(n<=5)
    {
    n++;
    {
    while(i<=10)
    {
    i++;
    {
    printf("%d x %d =%d\n",n,i,n*i);
    }
    }
    }
    return 0;
    }
    please state the errors in this program. I am learning your programming class with joy.

    উত্তরমুছুন
  38. ভাইয়া ৪.৯ এ m=0 ধরলাম কেন বুঝি নাই

    উত্তরমুছুন
  39. "printf("%d\n", n);
    n = n + 1;
    এর পরিবর্তে আমরা লিখতে পারি:
    printf("%d\n", n++);"

    এখানে মনে হয় ++n হবে। n++ দিলে আউটপুট ভুল আসে।

    উত্তরমুছুন
    উত্তরগুলি
    1. প্রথম printf এর ফাংশনের ভেতরেই n++ লিখতে হবে, দ্বিতীয়টি থেকে না।

      মুছুন
  40. আমি প্রগ্রামিং এ নতুন
    4.9 সমস্যা তে i incrimation er sathe n er value কি করে বাড়ল বুঝিনি

    উত্তরমুছুন
  41. গুণ না করে কেবল যোগ ব্যবহার করে প্রোগ্রামটি লেখলামঃ

    #include
    int main()
    {
    int n, i,m=0;
    for(n = 1; n <= 20; n = n + 1) {

    for(i = 1; i <= 10; i = i + 1) {
    m=m+n;
    printf("%d X %d = %d\n", n, i, m);

    }
    m=0;

    printf("\n");
    }
    return 0;
    }

    উত্তরমুছুন
  42. সুবিন ভাইয়া, আপনার ৪.১১ প্রোগ্রামটা যতবারই রান করিয়াছি আউটপুট তো আপনি যেটার কথা বলেছেন তা আসে নি। এসেছে ১,৩,১ ১,৩,২, ১,৩,৩ । খালি a=1 যখন প্রব্লেমটা তখনই হচ্ছে। কিন্তু a=2 যখন,তখন ঠিকই এসেছে। ২,১,১ ২,২,১,২...।। এইভাবে চলেছে। আমি হুবহু কোড করেও একই সমস্যাতে পড়েছি।আর ৪.১২ এর ক্ষেত্রেও সেইম প্রব্লেম।কারণটা বুঝতেছি না।

    #include

    int main()
    {
    int a,b,c;
    for(a=1;a<=3;a++){
    for(b=1;b<=3;b++){
    for(c=1;c<=3;c++){
    printf("%d, %d, %d\n",a,b,c);
    }
    }
    }
    return 0;
    }


    এইযে এইটা আমার করা কোড।

    উত্তরমুছুন
  43. ভাইয়া, আপনার বইতে এই অংশটার পর রাকিব ভাই এর দুটো ভিডিও লিংক দেয়া ছিল। কিন্তু এখন ওই লিংকগুলো unavailable আসছে। একটু যদি ভিডিওগুলোর বর্তমান লিংক দিতেন তো অনেক ভালো হতো।

    উত্তরমুছুন
  44. **
    ***
    ****
    *****
    ******
    যদি এভাবে করি তাহলে কিভাবে কোড বসাবো ?

    উত্তরমুছুন
  45. ভাইয়া আমার একটা প্রোগ্রামিং সমস্যা ২ দিন ধরে চেষ্টা করছি কিন্তুু মিলাতে পারছি না।সমস্যাটা এমন যে,আমি ১০ থেকে ১০০০০পর্যন্ত একটা লুপ নিলাম। এর মধ্য থেকে এমন সংখ্যা বের করতে হবে যাকে বা যাদের কে ১-১০ সকল সংখ্যা দ্বারা ভাগ যায়।।এর জন্য কোনো সমাধান দিবেন pls....

    উত্তরমুছুন

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