Saturday, 16 September 2017

Nested Loop (লুপের প্যাচাল)

গতপর্বে লুপ নিয়ে কিছু সহজ সমস্যা দিয়েছিলাম আশাকরি সবাই সেগুলো সমাধান করেছো।

এপর্বে আমরা নেস্টেড লুপ নিয়ে আলোচনা করবো। তোমরা নিশ্চয়ই নেস্টেড ইফ-এলসের কথা ভূলে যাও নি, যেভাবে একটা  if , else if  বা else এর ভিতর আমরা আরেকটি if , else if  বা else দিয়েছি সেভাবে একটি লপের ভিতর অন্য আরেকটি বা একাধিক লুপ  দিয়ে নেস্টড লুপ লিখতে হয়।

এবার চলো নিচের প্রোগ্রামটা দেখে নেইঃ
#include <stdio.h>
int main()
{
    int i,j;

    for(i=1; i<=4; i++)
    {
        for(j=1; j<=4; j++)
        {
            printf("%d",i);
        }
    }
    return 0;
}

বলো তো আউটপুট কি হবে? এই প্রোগ্রামের আউটপুট হবেঃ


1111222233334444 

আউটপুট টা দেখতে কেমন অবাক লাগছে তাই না? তাহলে চলো দেখে নেই এই আউটপুট কেনো আসলো!

  • int i,j; এই লাইন পর্যন্ত তোমাদের কোন সমস্যা নেই। আমরা এই লাইনে i এবং j দুইটি ইন্টিজার ভেরিয়েবল ডেক্লিয়ার করেছি। 
  • for (i=1; i<=4; i++)  এই অংশকে বলা হয় outer loop বা বাইরের লুপ। এখানে যা দেওয়া হয়েছে তাও নিশ্চয়ই বোঝতে পারছো। i = 1 দেওয়া হয়েছে , i<=4 - কন্ডিশন দিয়ে বলা হয়েছে i এর মান 4 এর ছোট বা 4 এর সমান হওয়া পর্যন্ত লুপ চলবে। i এর মান 4 থেকে বেশি মানে 5 হয়ে গেলে লুপ বন্ধ হয়ে যাবে। 
  • যেহেতু i = 1; এবং i এর মান 4 থেকে ছোট তাই কম্পাইলার outer  loop বা বাইরের লুপের বডিতে আসবে। সহজ কথায় শর্ত সত্য হওয়ায় {   }  এর ভিতরে আসবে। 
    •   এখন for (j=1; j<=4; j++) এই অংশকে বলা হয় inner loop বা ভিতরের লুপ।এই শর্ত চেক করবে। এখানেও  j = 1; এবং j<=4 এই শর্ত সত্য তাই inner  loop বা ভিতরের  লুপের বডিতে আসবে। এখন, বডিতে আসার পর কম্পাইলার দেখবে printf("%d",i);     তাই i এর মান প্রিন্ট করবে। বলতো এখানে i এর মান কতো? আমরা লুপটি শুরু করার পর i বা j কোন কাউন্টার ভেরিয়েবলের মান কিন্তু এখনো বাড়াইনি। তার মানে এখন i এর মান 1 . j এর মানও  1। যেহেতু কম্পাইলার দেখবে i এর মান প্রিন্ট করতে বলা হয়েছে তাই প্রিন্ট করবে 1 .
    • একবার প্রিন্ট করার পর কম্পাইলার j++ এই অংশে যাবে। এখন j এর মান 2 . এবং j<=4 এই শর্ত সত্য কারণ দুই এর মান চার এর  থেকে কম। তাই কম্পাইলার আবার বডিতে আসবে, এখনো দেখবে printf("%d",i);  । বলতো এবার কি প্রিন্ট হবে? আবারো 1 প্রিন্ট হবে। কারণ j এর মান বেড়ে 2 হয়েছে কিন্তু i এর মান এখনো 1 .
    • এখন আবার j++ হবে, এবার j এর মান 2 থেকে এক বেড়ে 3 হয়েছে। তাই, j<=4 শর্ত সত্য। কম্পাইলার বডিতে এসে আবার i এর মান প্রিন্ট করবে 1 । 
    • পুনরায় j++  হবে , এবং j এর মান হবে 4,  j<=4 এই শর্তটি সত্য কারণ j এর মান 4 থেকে ছোট না হলেও 4 এর সমান। তাই কম্পাইলার বডিতে আসবে এবং আবার প্রিন্ট করবে 1 ।
    • এবার, j++ হয়ে  j এর মান হবে 5 । j<=4 এই শর্তটি এখন মিথ্যা। 
    • যখন j<=4 শর্তটি মিথ্যা হবে তখন কম্পাইলার for (j=1; j<=4; j++) এই লুপ থেকে বেড়িয়ে আসবে। এবং i++ এ চলে যাবে। এই অংশটা ভালো করে বোঝার চেস্টা করো। কারণ প্রথম অবস্থায় প্রায় সবারই নেস্টেড লুপের এই অংশটাতে একটু সমস্যা হয়।
  • i++ এ যাওয়ার পর i এর মান বেড়ে 1 থেকে 2 হবে। এবার কম্পাইলার i<=4 এই শর্তটি চেক করবে। শর্তটি সত্য হওয়ার কম্পাইলার বডিতে আসবে।
    • এখন আবার দেখবে   for (j=1; j<=4; j++)  এখানেও  j = 1; এবং j<=4 এই শর্ত সত্য তাই আবার  ভিতরের  লুপের বডিতে আসবে। এখন, বডিতে আসার পর কম্পাইলার দেখবে printf("%d",i);     তাই i এর মান প্রিন্ট করবে। এবার  i এর মান কতো? এখন i এর মান 2 । তাই প্রিন্ট করবে 2 .
    • একবার প্রিন্ট করার পর কম্পাইলার j++ এই অংশে যাবে। এখন j এর মান 2 . এবং j<=4 এই শর্ত সত্য কারণ দুই এর মান চার এর  থেকে কম। তাই কম্পাইলার আবার বডিতে আসবে, এখনো দেখবে printf("%d",i);  । বলতো এবার কি প্রিন্ট হবে? আবারো 2 প্রিন্ট হবে।
    • এখন আবার j++ হবে, এবার j এর মান 2 থেকে এক বেড়ে 3 হয়েছে। তাই, j<=4 শর্ত সত্য। কম্পাইলার বডিতে এসে আবার i এর মান প্রিন্ট করবে 2 । 
    • পুনরায় j++  হবে , এবং j এর মান হবে 4,  j<=4 এই শর্তটি সত্য কারণ j এর মান 4 থেকে ছোট না হলেও 4 এর সমান। তাই কম্পাইলার বডিতে আসবে এবং আবার প্রিন্ট করবে 2 । এবার, j++ হয়ে  j এর মান হবে 5 । j<=4 এই শর্তটি এখন মিথ্যা। 
    • যখন j<=4 শর্তটি মিথ্যা হবে তখন কম্পাইলার for (j=1; j<=4; j++) এই লুপ থেকে বেড়িয়ে আসবে। এবং i++ এ চলে যাবে। 
  • এখন,  i++ এ যাওয়ার পর i এর মান বেড়ে 2 থেকে 3 হবে। এবার কম্পাইলার i<=4 এই শর্তটি চেক করবে। শর্তটি সত্য হওয়ার কম্পাইলার বডিতে আসবে।
    • এখন আবার দেখবে   for (j=1; j<=4; j++)  এখানেও  j = 1; এবং j<=4 এই শর্ত সত্য তাই আবার  ভিতরের  লুপের বডিতে আসবে। এখন, বডিতে আসার পর কম্পাইলার দেখবে printf("%d",i);     তাই i এর মান প্রিন্ট করবে। এবার  i এর মান কতো? এখন i এর মান 3 । তাই প্রিন্ট করবে 3 .
    • একবার প্রিন্ট করার পর কম্পাইলার j++ এই অংশে যাবে। এখন j এর মান 2 . এবং j<=4 এই শর্ত সত্য কারণ দুই এর মান চার এর  থেকে কম। তাই কম্পাইলার আবার বডিতে আসবে, এখনো দেখবে printf("%d",i);  । বলতো এবার কি প্রিন্ট হবে? আবারো 3 প্রিন্ট হবে।
    • এখন আবার j++ হবে, এবার j এর মান 2 থেকে এক বেড়ে 3 হয়েছে। তাই, j<=4 শর্ত সত্য। কম্পাইলার বডিতে এসে আবার i এর মান প্রিন্ট করবে 3 । 
    • পুনরায় j++  হবে , এবং j এর মান হবে 4,  j<=4 এই শর্তটি সত্য কারণ j এর মান 4 থেকে ছোট না হলেও 4 এর সমান। তাই কম্পাইলার বডিতে আসবে এবং আবার প্রিন্ট করবে 3 । এবার, j++ হয়ে  j এর মান হবে 5 । j<=4 এই শর্তটি এখন মিথ্যা। 
    • যখন j<=4 শর্তটি মিথ্যা হবে তখন কম্পাইলার for (j=1; j<=4; j++) এই লুপ থেকে বেড়িয়ে আসবে। এবং i++ এ চলে যাবে। 
  • i++ এ যাওয়ার পর i এর মান বেড়ে 3 থেকে 4 হবে। এবার কম্পাইলার i<=4 এই শর্তটি চেক করবে। শর্তটি সত্য হওয়ার কম্পাইলার বডিতে আসবে।
    • এখন আবার দেখবে   for (j=1; j<=4; j++)  এখানেও  j = 1; এবং j<=4 এই শর্ত সত্য তাই আবার  ভিতরের  লুপের বডিতে আসবে। এখন, বডিতে আসার পর কম্পাইলার দেখবে printf("%d",i);     তাই i এর মান প্রিন্ট করবে। এবার  i এর মান কতো? এখন i এর মান 4 । তাই প্রিন্ট করবে 4 .
    • একবার প্রিন্ট করার পর কম্পাইলার j++ এই অংশে যাবে। এখন j এর মান 2 . এবং j<=4 এই শর্ত সত্য কারণ দুই এর মান চার এর  থেকে কম। তাই কম্পাইলার আবার বডিতে আসবে, এখনো দেখবে printf("%d",i);  । বলতো এবার কি প্রিন্ট হবে? আবারো 4 প্রিন্ট হবে।
    • এখন আবার j++ হবে, এবার j এর মান 2 থেকে এক বেড়ে 3 হয়েছে। তাই, j<=4 শর্ত সত্য। কম্পাইলার বডিতে এসে আবার i এর মান প্রিন্ট করবে 4 । 
    • পুনরায় j++  হবে , এবং j এর মান হবে 4,  j<=4 এই শর্তটি সত্য কারণ j এর মান 4 থেকে ছোট না হলেও 4 এর সমান। তাই কম্পাইলার বডিতে আসবে এবং আবার প্রিন্ট করবে 4 । এবার, j++ হয়ে  j এর মান হবে 5 । j<=4 এই শর্তটি এখন মিথ্যা। 
    • যখন j<=4 শর্তটি মিথ্যা হবে তখন কম্পাইলার for (j=1; j<=4; j++) এই লুপ থেকে বেড়িয়ে আসবে। এবং i++ এ চলে যাবে। 
      • i++ এ যাওয়ার পর i এর মান বেড়ে 4 থেকে 5 হবে। এবার কম্পাইলার i<=4 এই শর্তটি চেক করবে। শর্তটি মিথ্যা হওয়ার
        for (i=1; i<=4; i++)  এই লুপ থেকেও কম্পাইলার বেড়িয়ে আসবে এবং return 0; তে চলে যাবে। এবং প্রোগ্রাম বন্ধ হয়ে যাবে।

Related Posts:

  • লপের ঘুরাঘুরি (Loop in C program) part-3 চলছেই চলবেঃ শিরোনাম দেখে কি কিছুটা ঘাবড়ে গেছো ?  ঘাবড়ানোর কিছু নেই। আমরা লুপের কথাই বলছি।  আমরা চাইলেই একতি লুপকে অবিরাম ঘুরাতে পারি। আবার নিজের অজান্তে প্রোগ্রামে দেখা যায়, কখনো কখনো প্রোগ্রাম চলতেই থাকে বন্ধ হয় ন… Read More
  • লজিক্যাল স্টেটমেন্ট (if ,else if and else)কোন সমস্যাকে যুক্তির ভিত্তিতে সমাধান করতে আমরা if , else if , else ব্যবহার করি । এদেরকে লজিক্যাল স্টেট্মেন্ট বলা হয়। যেমন: if ব্যবহার করে সমাধান করা যায় এমন একটি প্রোগ্রাম আমরা দেখবো, #include <stdio.h> i… Read More
  • লুপ নিয়ে কিছু সহজ সমস্যা (Loop exercise)তোমাদের জন্য কিছু সহজ সমস্যা। ১। ১০ - ১ পর্যন্ত সবগুলা সংখ্যা প্রিন্ট করো। ২। ১ - ১০ পর্যন্ত সবগুলা জোড় সংখ্যা ও বেজোড় সংখ্যা প্রিন্ট করো। ৩।   1 থেকে n পর্যন্ত সবগুলা সংখ্যা প্রিন্ট করো। ( n এর মান ইউজারের কাছ থেকে ই… Read More
  • while লুপের পরিচিতি ( while Loop)মনেকরো, তোমাকে বলা হলো ১-১০ পর্যন্ত সব গুলা সংখ্যা প্রিন্ট করার জন্য। তুমি নিশ্চয়ই এখন সেটা লুপ দিয়ে করার চেষ্টা করবে। তাহলে প্রোগ্রামটা হতে পারে এরকম: #include<stdio.h> int main() {     int i; &n… Read More
  • লজিক্যাল স্টেটমেন্ট (if , else if and else) পর্ব-২আগের পর্বে আমরা একটি প্রোগ্রাম নিয়ে আলোচনা করেছিলাম, যেখানে কোন নাম্বার ইনপুট দিলে তা 10 কি না? তা দেখায় এবং 10 ছাড়া অন্য নাম্বার দিলেও তা দেখায়। যদি মনে না থাকে তাহলে আগের পর্ব আবার ভালো করে পড়ে নিন। আজ আমরা একটা… Read More

0 comments:

Post a Comment