এপর্বে আমরা নেস্টেড লুপ নিয়ে আলোচনা করবো। তোমরা নিশ্চয়ই নেস্টেড ইফ-এলসের কথা ভূলে যাও নি, যেভাবে একটা 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; তে চলে যাবে। এবং প্রোগ্রাম বন্ধ হয়ে যাবে।
- i++ এ যাওয়ার পর i এর মান বেড়ে 4 থেকে 5 হবে। এবার কম্পাইলার i<=4 এই শর্তটি চেক করবে। শর্তটি মিথ্যা হওয়ার
0 comments:
Post a Comment