Nested for Loops in C Language: जिस तरह हमने if Conditionals Statements की Nesting की थी उसी तरह से हम Loops की भी Nesting कर सकते हैं। यानी कई बार प्रोग्राम में ऐसी जरूरतें होती हैं, कि उस खास काम को Loop की साधारण प्रक्रिया द्वारा नहीं कर सकते। तब हमें एक Loop के अंदर एक अन्य Loop को Use करना पडता है। जब किसी Loop में वापस Loop का प्रयोग किया जाता है तो इसे Loop की Nesting करना कहते हैं।
for Loop की जब Nesting की जाती है तब हमेंशा Outer Loop, Inner Loop को Control करता है। Outer Loop Row के लिए व Inner Loop Column के लिए लिखा जाता है। इसका Syntax निम्नानुसार होता है:
जब Program Control, Outer for Loop पर आता है तब Check करता है कि Outer For Loop की Condition सत्य है या नहीं। यदि Outer For Loop की Condition सत्य होती है, तो Program Control Inner Loop में प्रवेश करता है। यहां Program Control को एक और for Loop मिलता है और प्रोग्राम Control इस for की Condition को Check करता है।
यदि Inner for Loop की Condition सत्य होती है तो Inner for Loop Iterate होता है और ये Inner Loop तब तक Iterate होता रहता है जब तक कि Inner Loop की Condition सत्य होती है। जैसे ही inner Loop की Condition असत्य होती है, प्रोग्राम Control वापस Outer Loop को check करता है।
यदि वापस Outer Loop की Condition सत्य हो जाती है तो Program Control पुन: inner Loop में प्रवेश करता है और पुन: Inner Loop का तब तक Iteration होता है जब तक कि Inner Loop की condition असत्य नहीं हो जाती।
Program Control इन्हीं दोनों Loops के बीच तब तक Iterate होता रहता है जब तक कि दोनों Loops की Condition असत्य ना हो जाए। यदि Outer Loop की Condition पहली बार में ही असत्य हो जाए तो Inner Loop का Execution ही नहीं होता है।
Inner Loop का Execution तभी होता है जब Outer Loop की Condition सत्य हो। Loop की Nesting को समझने के लिए आगे एक प्रोग्राम बनाया गया है। इससे for Loop की Nesting व उसके काम करने तरीके को अच्छी तरह से समझाया गया है।
Example: एक ऐसा प्रोग्राम बनाओ जो निम्न Format को print करे।
इस प्रोग्राम में दो for Loop चला, गए हैं और Condition इस प्रकार की रखी गई है कि Inner Loop उतनी ही बार चले जितना बाहर का Loop चलाने वाले variable का मान हो। प्रोग्राम निम्नानुसार है:
Program /* Example of Nested For Loop */ #include<stdio.h> main() { int j, k; clrscr(); for(k=1; k<=5; k++) { for(l=1; l<=k; l++) { printf(" *"); } printf("\n"); } getch(); }
जैसे ही प्रोग्राम का Execution होता है तो Program Control को for Loop मिलता है। k का प्रारम्भिक मान 1 दिया गया है, इसलिए Condition सत्य हो जाती है और Program Control, Outer Loop के Statement Block में जाता है। यहां Program Control को एक और for Loop मिलता है जिसके Variable का प्रारम्भिक मान 1 है और Condition के रूप में ये शर्त दी गई है कि Inner Loop तब तक Execute होना चाहिये, जब तक कि Inner Loop के Variable का मान, बाहरी Loop के Variable के मान से कम या बराबर हो।
चूंकि बाहरी Loop के Variable k का मान 1 है। यहां k का मान 1 व Variable l का मान भी एक ही है। इसलिए Condition तो सत्य हो गई लेकिन दोनों का मान समान होने से Inner Loop एक ही बार चलता है।
Inner Loop की Condition के सत्य होते ही Program Control, Inner Loop के Statement Block में जाता है। यहां एक printf() Function द्वारा * को Print किया जाता है। अब Inner Loop का मान पुन: Check किया जाता है, तो Condition असत्य हो जाती है, क्योंकि Inner Loop में l का मान Incremented होकर 2 हो गया है, जबकि k का मान 1 ही है व Condition तभी सत्य होती है, जब l का मान k के मान से कम या बराबर हो।
इसलिए Condition असत्य हो जाती है। Condition के असत्य होते ही Program Control, Inner for Loop से बाहर Outer Loop के Statement Block में आ जाता है। यहां Program Control को एक और printf() Function प्राप्त होता है। यह Function एक New Line Print करता है।
अब दोबारा Outer For Loop Check होती है। पिछले Increment के कारण यहां भी k का मान अब 2 हो चुका होता है। 2 का मान 5 से कम है इसलिए Outer Loop की Condition पुन: सत्य हो जाती है व Program Control पुन: Inner Loop में प्रवेश करता है। Inner Loop में पुन: वही सारी प्रक्रिया होती है जो पिछले Iteration में हुई थी, यानी पुन: b का मान 0 Initialize होता है। पुन: Condition सत्य हो जाती है और साथ ही पुन: b का मान बढ कर 2 हो जाता है।
इस बार Condition l <= k यानी l <= 2 हो जाती है, इसलिए Inner Loop अब दो बार चलता है। पहली बार में l का मान 1 होता है इसलिए Condition सत्य होती है और Program Control, Statement Block में प्रवेश करता है। यहां पर एक * Print होता है। पुन: Inner Condition Check होती है। इस Iteration में l का मान Increment होकर 2 हो जाता है। पुन: Condition check होने पर l <= 2 होने से Condition सत्य हो जाती है।
Condition सत्य होने के साथ ही l का मान एक और बढ जाता है और बढ कर 3 हो जाता है। Condition सत्य होने से पुन: एक * Print होता है। यह * पिछले * के पास में ही Print होता है, क्योंकि हमने Printf() Function में New Line के लिए कोई Character Constant Use नहीं किया है। इस प्रकार दूसरी पंक्ति में दो * Print हो जाते हैं।
अब वापस Inner Loop की Condition check होती है। चूंकि अब l का मान बढ कर 3 हो चुका है इसलिए l <= k Condition असत्य हो जाती है क्योंकि l का मान अब 3 है जबकि k का मान 2 है इस कारण से यदि गिणती; रूप में इस Expression को देखें तो 3 <= 2 Expression बनती है, जो कि सही नहीं है। इसलिए Condition असत्य है।
Condition असत्य होने से Program Control, Inner Loop से बाहर निकल कर वापस Outer Loop में प्रवेश करता है। पिछले Iteration के बाद k के मान का Increment होकर 3 हो चुका है। इसलिए k का मान अब 3 है।
Outer Loop की Condition के अनुसार Condition तभी सत्य होगी जब k का मान 5 से कम या बराबर हो। यहां k का मान 3 है इसलिए Condition पुन: सत्य होती है और Program Control पुन: Inner Loop में प्रवेश करता है। इस प्रकार ये क्रम तब तक चलता रहता है जब तक कि k का मान 6 नहीं हो जाता और k का मान पांचवे Iteration के बाद 6 हो जाता है।
जैसे ही k का मान 6 होता है Outer Loop की Condition असत्य हो जाती है। Outer Loop की Condition असत्य होने से Program Control, Inner Loop में प्रवेश नहीं करता बल्कि सीधे ही getch() Function पर जा कर उपरोक्त Format Print कर देता है।
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook C Programming Language in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
C Programming Language in Hindi | Page: 477 + 265 | Format: PDF