Theory
Rows અને columns ને બે loops જોઈએ
Marks program હવે 60 students માંથી loop કરે છે. નવી જરૂરિયાત: દરેક student ના 4 subjects છે.
તો પુનરાવર્તન પોતે પુનરાવર્તિત થાય છે: દરેક student માટે, દરેક subject માટે, એક mark વાંચો. એક loop ની અંદર એક loop.
Nested loops એ સવાલ ને પણ ચલાવે છે જે દરેક VNSGU paper ને પ્રિય લાગે છે: આ star pattern print કરો. આ page ના અંત સુધી, patterns એક formula બની જાય છે, કોયડો નહીં.
Theory
ઘડિયાળ
એક ઘડિયાળ જુઓ: hour કાંટા ને એક પગલું ચાલવા માટે, minute કાંટો 60 પૂરા પગલાં પૂરા કરે છે. Outer loop = hour કાંટો, inner loop = minute કાંટો. Inner loop એની આખી જિંદગી, શરૂથી અંત સુધી, outer ના દરેક એક tick ની અંદર જીવે છે. એક hour-tick, 60 minute-ticks; બે hour-ticks, 120. ગણતરીઓ ગુણાય છે.
Theory
Nested loops, ઔપચારિક રીતે
કોઈ પણ loop બીજા કોઈની અંદર બેસી શકે છે (for માં for, for માં while...). નિયમ:
દરેક outer iteration માટે, inner loop પૂરો ચાલે છે.
for (i = 1; i <= 3; i++) /* students */
for (j = 1; j <= 4; j++) /* subjects */
...read mark...
Body 3 × 4 = 12 વાર ચાલે છે: i=1 સાથે j=1,2,3,4; પછી i=2 સાથે j=1,2,3,4; પછી i=3 એ જ રીતે. સ્વચ્છતાના બે નિયમ: અલગ counters (i અને j), અને જાણો કયો loop કયું કામ રાખે છે: outer = rows, inner = columns.
Practical
Exam નો ક્લાસિક: એક star triangle
#include <stdio.h>
int main() {
int i, j;
for (i = 1; i <= 4; i++) { /* rows */
for (j = 1; j <= i; j++) { /* columns */
printf("*");
}
printf("\n"); /* end the row */
}
return 0;
}This example runs in Gri-Learn on the web, where you can edit it and see the output.
Think first
Pattern નું અનુમાન કરો
Code trace કરો: 1 થી 4 સુધી દરેક i માટે, inner loop stars print કરે છે જ્યાં સુધી j <= i, પછી એક newline. પહેલા કાગળ પર બરાબર output બનાવો.
Show the answer
*
**
***
****
Row i ને બરાબર i stars મળે છે કારણ કે inner condition j <= i છે: row 1 એક star આપે છે, row 4 ચાર. દરેક star-pattern સવાલ એ જ એક હાડપિંજર છે એક અલગ inner condition સાથે, j ની સીમા decode કરો અને તમે pattern decode કરી લીધો.
Quiz
nested loops for(i=1; i<=3; i++) { for(j=1; j<=4; j++) { body } } માં, body કેટલી વાર execute થાય છે?
- 12 વાર: 3 outer × 4 inner
- 7 વાર: 3 + 4
- 4 વાર: inner loop જીતે છે
- 3 વાર: outer loop જીતે છે
Show the answer
12 વાર: 3 outer × 4 inner
Inner loop 3 outer rounds માંથી દરેક માટે એના પૂરા 4 rounds ચલાવે છે: 3 × 4 = 12. ઉમેરવું (option B) સામાન્ય ભૂલ છે, ઘડિયાળ યાદ રાખો: બે કલાક 120 minute-ticks છે, 62 નહીં. ગણતરીઓનો ગુણાકાર એ સૌથી વધુ test થતું nested-loop તથ્ય છે.
Quiz
star-triangle code માં, printf("\n") inner loop ના પછી પણ outer loop ની અંદર કેમ બેસે છે?
- દરેક row ના stars પહેલા પૂરા થાય છે, પછી row એક newline થી બંધ થાય છે
- એ એક style choice છે; ગમે ત્યાં એકસરખું ચાલે છે
- newline ને દરેક star પર એક વાર ચાલવું જોઈએ
- C દરેક loop ના અંતે \n ફરજિયાત કરે છે
Show the answer
દરેક row ના stars પહેલા પૂરા થાય છે, પછી row એક newline થી બંધ થાય છે
Newline નું કામ "આ ROW પૂરી કરો" છે, એટલે એ outer (row) loop નું છે, દરેક row પર એક વાર ચાલતું. એને inner loop ની અંદર લઈ જાઓ અને દરેક star પોતાની અલગ line પર આવે છે; બંનેની બહાર લઈ જાઓ અને બધા stars એક line પર ભીડ કરે છે. \n ની જગ્યા એ જ બરાબર ત્યાં છે જ્યાં pattern જવાબ ખોટા થાય છે.
Watch out
Marks ક્યાં કપાય છે
બંને loops માટે i ફરી વાપરવું: inner loop outer counter બગાડી નાખે છે અને program વિચિત્ર રીતે કે હંમેશા માટે loop કરે છે; હંમેશા i અને j. કામ ઉલટાવવું: outer એ rows છે, inner columns; એમને ઉલટાવો અને pattern transpose થઈને નીકળે છે. \n ની જગ્યા (quiz જુઓ). Trace સવાલોમાં, (i, j) જોડી ક્રમમાં લખો: (1,1) (1,2)... nesting ને આનાથી ઝડપી કંઈ ઉકેલતું નથી.
Theory
Nesting નું ફળ આગળ ક્યાં મળે છે
Students × subjects એ એક grid છે, અને Unit 3 ના two-dimensional arrays બરાબર આવા જ grids store કરે છે, બરાબર આ જ બે counters થી ચાલતા (rows માટે i, columns માટે j). BCA102 માં કરેલા matrix operations પણ C માં nested loops બની જાય છે. અત્યારે ઘડિયાળમાં નિપુણતા મેળવો; grid વાળા lessons પહેલેથી-શીખેલા લાગશે. પણ પહેલા: loop ના કટોકટીના exits, break અને continue.
Summary
Key takeaways
- Nested loop: દરેક outer iteration માટે inner loop પૂરો ચાલે છે.
- કુલ body runs = outer count × inner count (3×4 = 12), ગુણો, ક્યારેય ઉમેરો નહીં.
- Outer loop rows રાખે છે; inner loop columns.
- અલગ counters વાપરો (i, j); એકને ફરી વાપરવું ક્લાસિક bug છે.
- Star patterns: row i ત્યારે print કરે છે જ્યારે j <= i; \n દરેક row ને inner loop પછી બંધ કરે છે.
- યાદ રાખવાની યુક્તિ: ઘડિયાળ, એક hour-tick, 60 minute-ticks.