Theory
जो गणित आप पहले ही पास कर चुके
BCA102 में आपने matrices जोड़ीं, transpose कीं, यहाँ तक कि गुणा कीं, कागज़ पर, marks के लिए।
आज वही operations C syntax पहने लौटते हैं, और यह रहा मुक्त करने वाला राज़: हर 2D operation बस एक अलग one-line body वाले nested loops है।
Addition? Nested loops, body जोड़ती है। Transpose? Nested loops, body indexes flip करती है। Multiplication? एक extra loop। अगर आप for (i...) for (j...) लिख सकते हैं, तो आप ये सब लिख सकते हैं।
Theory
वही tour, अलग काम
Nested loop को एक tour route समझिए जो grid के हर cell को visit करता है, row-दर-row, seat-दर-seat। Route कभी नहीं बदलता; सिर्फ हर seat पर काम बदलता है। Addition: "जुड़वाँ cells जोड़ो, नतीजा यहाँ रखो"। Transpose: "इस cell को उसकी आईने वाली seat पर copy करो"। Search: "क्या यह वही value है जो हम चाहते हैं?"। एक route, कई काम, वह मानसिक model पाँच exam programs को एक में समेट देता है।
Theory
Addition, subtraction, transpose, search
एक ही order वाले grids a और b के लिए (BCA102 का नियम बचता है: जोड़ने के लिए एक ही order):
c[i][j] = a[i][j] + b[i][j]; /* addition */
c[i][j] = a[i][j] - b[i][j]; /* subtraction */
Transpose (rows columns बन जाती हैं, m×n, n×m बन जाता है):
b[j][i] = a[i][j]; /* indexes swap roles */
एक value के लिए Search: हर cell का tour कीजिए, और match पर दोनों coordinates बताइए:
if (a[i][j] == target) printf("at row %d col %d", i, j);
Practical
दो test grids जोड़ना (2 students × 3 subjects)
#include <stdio.h>
int main() {
int t1[2][3] = {{70, 80, 90}, {60, 75, 85}};
int t2[2][3] = {{75, 82, 88}, {65, 70, 90}};
int total[2][3];
int i, j;
for (i = 0; i < 2; i++)
for (j = 0; j < 3; j++)
total[i][j] = t1[i][j] + t2[i][j];
for (i = 0; i < 2; i++) {
for (j = 0; j < 3; j++) printf("%d ", total[i][j]);
printf("\n");
}
return 0;
}This example runs in Gri-Learn on the web, where you can edit it and see the output.
Theory
Multiplication: तीसरा loop
BCA102 ने आपको सिखाया: c का cell (i, j) = a की row i, b की column j में, जोड़ियाँ गुणा करो, उन्हें जोड़ो। "उन्हें जोड़ो" खुद एक loop है, इसलिए multiplication को तीन चाहिए:
for (i = 0; i < m; i++)
for (j = 0; j < p; j++) {
c[i][j] = 0; /* start the sum */
for (k = 0; k < n; k++)
c[i][j] += a[i][k] * b[k][j];
}
नया counter k साझा (inner) dimension पर चलता है: a की row i के साथ और साथ-साथ b की column j के नीचे। जोड़ने से पहले c[i][j] = 0 भूलना क्लासिक bug है।
Think first
Transpose को trace कीजिए
a, 2×3 है rows {1, 2, 3} और {4, 5, 6} के साथ। हर cell पर b[j][i] = a[i][j] लगाइए। b क्या है, और इसका order क्या है?
Show the answer
b 3×2 है:
1 4
2 5
3 6
a की row 0 (1, 2, 3) खड़ी होकर b की COLUMN 0 बन गई। Index swap b[j][i] = a[i][j] सारा काम करता है; loops सिर्फ tour करते हैं। अगर आपका b, 2×3 निकला, तो आपने उसे पुराने order से declare किया, transpose declaration को भी flip करता है।
Quiz
multiplication code में, तीसरा counter k असल में किसके साथ चलता है?
- साझा inner dimension: a की row i के साथ और b की column j के नीचे, दोनों साथ
- result matrix c की rows
- result matrix c की columns
- दोनों matrices के सारे elements बेतरतीब
Show the answer
साझा inner dimension: a की row i के साथ और b की column j के नीचे, दोनों साथ
एक result cell के लिए, k, a[i][k] को b[k][j] के साथ जोड़ी बनाता है: a की row i का k-वाँ element, b की column j के k-वें element के साथ, गुणा और जमा। यही ठीक BCA102 का row-into-column है, मशीनीकृत। i और j चुनते हैं कौन सा cell; k उसे COMPUTE करता है। हर loop का काम नाम देना ठीक वैसे है जैसे examiners इसे phrase करते हैं।
Quiz
दो char arrays में "Ri" और "ya" हैं। इन्हें एक array में "Riya" रखने के लिए merge करने को, program पहली string copy करता है, फिर...
- दूसरी string को पहली के '\0' position पर लिखना शुरू करता है, और नतीजे को terminate करता है
- दूसरी string को पहले array के आख़िरी box के बाद लिखता है
- दोनों strings के ASCII codes जोड़ता है
- + operator इस्तेमाल करता है: "Ri" + "ya"
Show the answer
दूसरी string को पहली के '\0' position पर लिखना शुरू करता है, और नतीजे को terminate करता है
Merge (concatenation) का मतलब है पहली string के terminator को दूसरी string के पहले letter से overwrite करना, आगे copy करना, फिर एक ताज़ा '\0' से बंद करना। C में strings के लिए कोई + नहीं है (option D बकवास में compile होता है); इस loop का ready-made version strcat है, Unit 4 में आ रहा। '\0' का हिसाब ही पूरा खेल है।
Watch out
Marks कहाँ कटते हैं
k-loop से पहले c[i][j] = 0 भूलना: garbage आपके योग में शामिल हो जाता है। Order के नियम BCA102 से आते हैं: addition को एक जैसे orders चाहिए; multiplication को a की columns = b की rows चाहिए, exam जवाबों में यह जाँच बताइए। Transpose गलत declare करना: एक m×n, n×m array में transpose होता है। और merge में, आख़िरी '\0' छोड़ना एक ऐसी string छोड़ता है जो कभी खत्म नहीं होती, printf %s खुशी-खुशी साबित कर देगा।
Theory
unit का दूसरा आधा इंतज़ार कर रहा है
अब आप grids पर हुक्म चलाते हैं: बनाना, tour, जोड़ना, flip, search, गुणा। जो आप अभी नहीं जानते वह यह है कि array का नाम असल में है क्या, और scanf को एक के लिए कभी & क्यों नहीं चाहिए था। जवाब, addresses, C का सबसे डरावना और सबसे interview में पूछा जाने वाला topic खोलता है: pointers। अगला lesson इसे एक तस्वीर से निष्क्रिय कर देता है।
Summary
Key takeaways
- सारे 2D operations अलग bodies वाले nested loops हैं (tour और काम)।
- Addition/subtraction: एक ही order वाले grids पर cell-दर-cell: c[i][j] = a[i][j] ± b[i][j]।
- Transpose: b[j][i] = a[i][j]; m×n, n×m बन जाता है।
- Multiplication: तीन loops; k साझा dimension पर चलता है; पहले c[i][j] zero कीजिए।
- Search दोनों coordinates बताता है; string merge '\0' को overwrite करके फिर terminate करता है।
- याद रखने का hook: वही tour, अलग काम।