इस समस्या में, हमें एक संख्या n दी गई है। हमारा कार्य श्रृंखला 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)) का योग खोजने के लिए एक प्रोग्राम बनाना है।
एक उदाहरण लेकर समस्या को समझते हैं,
इनपुट: n = 5
आउटपुट: 55
तो, प्रश्न के अनुसार मान लीजिए एक उपयोगकर्ता हमें एक संख्या 'n' देता है और हमें श्रृंखला 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)). जोड़ना है।
आइए इस श्रृंखला का अर्थ बेहतर ढंग से समझते हैं।
हम n=1 लेते हैं, तो श्रृंखला 1 बन जाती है।
हम n=2 लेते हैं, तो श्रृंखला 1+ (1+3) बन जाती है क्योंकि अंतिम पद 2n-1 का मान 2 गुना 2 घटा 1 के रूप में गणना की जा सकती है, जो 3 है।
| n का मान | 2n-1 | श्रृंखला बन जाती है |
| 1 | 1 | 1 |
| 2 | 3 | 1+ (1+3) |
| 3 | 5 | 1+ (1+3) + (1+3+5) |
| 4 | 7 | 1+ (1+3) + (1+3+5) + (1+3+5+7) |
समस्या के समाधान की ओर आते हैं, इसे दो तरीकों से हल किया जा सकता है। एक गणितीय होगा जहां कुल योग का व्यंजक प्राप्त किया जा सकता है और इसलिए किसी लूप की आवश्यकता नहीं है। दूसरा कोड में दो लूप लागू करना होगा।
लूप्स का उपयोग करके सीधा दृष्टिकोण
जैसा कि देखा जा सकता है कि श्रृंखला 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+5+7+…+(2n-1)) का पद स्वयं एक श्रृंखला है। इसलिए हम नेस्टेड लूप्स का उपयोग करेंगे। बाहरी लूप दूसरे पद की गणना करेगा। जबकि आंतरिक लूप का उपयोग पद की गणना के लिए किया जाएगा।
उदाहरण
#include<stdio.h> int calcSum(int n){ int sum = 0; for (int i = 1; i <= n; i++) { // पद का पहला मान हमेशा 1 होता है int value = 1; for (int j = 1; j <= i; j++) { sum += value; // अगला पद value += 2; } } return sum; } int main(){ int n = 35; printf("The sum of the series upto %d is %d ", n , calcSum(n)); }आउटपुट
The sum of the series upto 35 is 14910
प्रोग्राम का कार्य:
- उपयोगकर्ता n का मान दर्ज करता है। मान लीजिए, 2।
- "sum" नामक एक वेरिएबल घोषित किया जाता है जिसका प्रारंभिक मान 0 है
- जब i=1, तो i<=n की शर्त सत्य होती है इसलिए लूप काम करेगा
- "ft" वेरिएबल का मान 1 है।
- j का पहला मान 1 है। शर्त सत्य है क्योंकि j का मान i के मान के बराबर है, जो 1 है। तो j लूप काम करता है
- ft का मान sum में जोड़ा जाता है। इसलिए sum 0+1 = 1 हो जाता है।
- ft का मान संशोधित होता है और 2 से बढ़ाया जाता है, इसलिए इसका नया मान 1+2 = 3 है
- j का मान 1 से बढ़कर 2 हो जाता है।
- लेकिन अब अंदर के लूप की शर्त गलत है, क्योंकि j>i अब। इसलिए j लूप से बाहर निकलता है।
- अब i का मान 1 से बढ़कर 2 हो जाता है, तो i=2 और शर्त सत्य है i<= n, इसलिए लूप में प्रवेश करता है
- "ft" वेरिएबल का मान फिर से 1 परिभाषित किया जाता है
- जब j का मान 1 होता है, तो लूप काम करेगा क्योंकि j<i या 1<2।
- ft का मान sum में जोड़ा जाता है। sum का मान पहले से 1 है। तो sum का नया मान 1+1 = 2 है
- ft का मान संशोधित होता है और 2 से बढ़ाया जाता है, इसलिए ft का नया मान 1+2 =3 हो जाता है।
- j का मान 1 से बढ़कर 2 हो जाता है। लूप की शर्त सत्य है क्योंकि j, i के बराबर है।
- ft का मान sum में जोड़ा जाता है। sum का मान 2 है। तो sum का नया मान 2+3 = 5 है
- ft का मान संशोधित होता है और 2 से बढ़ाया जाता है, इसलिए ft का नया मान 3+2 =5 हो जाता है।
- लूप बाहर निकलता है
- अब i का मान 1 से बढ़कर 3 हो जाता है, तो i=3 और शर्त गलत है i<= n, इसलिए लूप से बाहर निकलता है।
- स्क्रीन पर संदेश और sum का मान प्रिंट करता है
गणितीय समाधान:
प्रश्न का गणितीय समाधान खोजकर और फिर कोड लिखकर, हमारे कोड को बहुत सरल बनाया जा सकता है।
श्रृंखला का सामान्य पद Tn हो,
आगे बढ़ने से पहले, हमें पता होना चाहिए कि श्रृंखला 1+3+5+7+9…..(2n-1) का योग n2, होगा, और श्रृंखला
12+22+32+42….n2 का योग i2 =
हमारे कोड के कार्य को दर्शाने वाला प्रोग्राम
उदाहरण
#include<stdio.h> int calcSum(int n){ // आवश्यक योग return (( (n) * (n + 1) * (2*n + 1 ) )/6 ) ; } int main(){ int n = 35; printf("The sum of the series upto %d is %d ", n , calcSum(n)); }आउटपुट
The sum of the series upto 35 is 14910
उपरोक्त कोड का कार्य:
उदाहरण के लिए, मान लीजिए उपयोगकर्ता n का मान 2 दर्ज करता है, तो 2n-1 का मान 3 है और श्रृंखला 1+ (1+3) बन जाती है।
लेकिन आइए कोड के माध्यम से योग को समझते और प्राप्त करते हैं।
- फंक्शन sum() को मान 2 के साथ बुलाया जाता है
- फंक्शन मान 5 की गणना करता है और इसे मुख्य फंक्शन को लौटाता है।
- उत्तर के साथ संदेश स्क्रीन पर प्रिंट होता है।