इस समस्या में, हमें एक संख्या n दी गई है। हमारा कार्य श्रृंखला का योग ज्ञात करने के लिए एक प्रोग्राम बनाना है 1 + (1+3) + (1+3+5) + (1+3+5+7) + …… + (1+3+ 5+7+…+(2एन-1))।
समस्या को समझने के लिए एक उदाहरण लेते हैं,
इनपुट: एन =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 के मान की गणना 1 से 2 गुणा 2, जो कि 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++) { // the first value of the term is always 1 int value = 1; for (int j = 1; j <= i; j++) { sum += value; // next term 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 लूप काम करता है
- फीट का मान योग में जोड़ा जाता है। इसलिए योग 0+1 बराबर 1 हो जाता है।
- फ़ुट का मान संशोधित किया गया है और 2 से बढ़ा दिया गया है, इसलिए इसका नया मान 1+2 =3 है
- j का मान 1 से बढ़कर 2 हो जाता है।
- लेकिन अब लूप के लिए अंदर की स्थिति झूठी है, जैसा कि अभी j>i है। इसलिए j लूप निकल जाता है।
- अब i का मान 1 से बढ़ जाता है और 2 हो जाता है, इसलिए i=2 और स्थिति सत्य है i<=n, इसलिए लूप में प्रवेश करता है
- चर "ft" का मान फिर से 1 के रूप में परिभाषित किया गया है
- जब j का मान 1 है, तो लूप j
- फीट का मान योग में जोड़ा जाता है। योग का मान पहले से ही 1 है। तो योग का नया मान 1+1 =2
. है- फ़ुट का मान संशोधित और 2 बढ़ा दिया जाता है, इसलिए फ़ुट का नया मान 1+2 =3 हो जाता है।
- j का मान 1 से बढ़ता है और 2 हो जाता है। लूप के लिए स्थिति सही है क्योंकि j बराबर है।
- फीट का मान योग में जोड़ा जाता है। योग का मूल्य पहले से ही 2 है। तो योग का नया मान 2+3 =5
. है- फ़ुट का मान संशोधित और 2 बढ़ा दिया जाता है, इसलिए फ़ुट का नया मान 3+2 =5 हो जाता है।
- लूप मौजूद है
- अब i का मान 1 से बढ़ जाता है और 3 हो जाता है, इसलिए i=3 और स्थिति गलत है i<=n, इसलिए लूप से बाहर निकल जाता है।
- संदेश और योग का मूल्य स्क्रीन पर प्रिंट करता है
गणितीय हल:
प्रश्न का गणितीय हल ढूंढ़ने और फिर कोड लिखने से हमारा कोड काफी हद तक सरल हो जाएगा।
मान लीजिए सामान्य पद Tn श्रृंखला के,
आगे बढ़ने से पहले, हमें पता होना चाहिए कि श्रृंखला 1+3+5+7+9…..(2n-1) का योग n 2, होगा और श्रृंखला
1 2 +2 2 +3 2 +4 2 ….n 2 का योग होगा i 2
हमारे कोड की कार्यप्रणाली को दर्शाने वाला प्रोग्राम
उदाहरण
#include<stdio.h> int calcSum(int n){ // required sum 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) बन जाती है।
लेकिन आइए हम कोड के माध्यम से राशि को समझें और प्राप्त करें।
- फ़ंक्शन योग () को मान 2 के साथ कहा जाता है
- फ़ंक्शन 5 के मान की गणना करता है और इसे मुख्य फ़ंक्शन पर लौटाता है।
- उत्तर वाला संदेश स्क्रीन पर छपा होता है।