किसी लॉजिक को बार-बार चलाने के लिए लूप का उपयोग किया जाता है।
सबसे आम दो प्रकार हैं while loop (जो अनिश्चित बार चलता है) और for loop (जो निश्चित, यानी गिनकर तय की गई बार चलता है)।
एक for each लूप भी होता है, जो आगे के किसी कॉन्सेप्ट में आएगा।
for loop एक हेडर और एक कोड ब्लॉक से बना होता है। कोड ब्लॉक में लूप के अंदर का कोड होता है, जो कर्ली ब्रैकेट में लपेटा रहता है।
हेडर में 3 हिस्से होते हैं, जो सेमीकोलन ; से अलग किए जाते हैं: इनिट-स्टेटमेंट, शर्त, और एक और एक्सप्रेशन।
इनमें से हर एक खाली भी हो सकता है।
for (init_statement; condition; expression) {
some_statement;
}
boolean हो, और जो यह तय करता हो कि लूप कब रुकना चाहिए।
जब तक इस शर्त का परिणाम true रहता है, लूप के अंदर का कोड चलता रहता है।
जैसे ही इस एक्सप्रेशन का परिणाम false होता है, लूप का कोई और इटरेशन नहीं चलता।while loop तब तक अपने अंदर का कोड चलाता रहता है जब तक उसकी शर्त की जाँच का परिणाम true रहता है।
नीचे दिया गया कोड दिखाता है कि for को while loop में कैसे बदला जाए।
init_statement;
while(condition) {
some_statement;
expression;
}
लूप के साथ काम करते समय अक्सर काउंटर वेरिएबल में 1 जोड़ना या 1 घटाना पड़ता है, जो इटरेशन का हिसाब रखता है।
यह इतना आम है कि बढ़ाने और घटाने की क्रियाओं के लिए खास ऑपरेटर हैं: ++ और --।
ये प्रीफिक्स और पोस्टफिक्स दो रूपों में आते हैं। प्रीफिक्स रूप स्टेटमेंट में इस्तेमाल से पहले वेरिएबल को बदल देता है, और पोस्टफिक्स रूप उसके बाद। ज़्यादातर मौकों पर आपको प्रीफिक्स रूप ही चाहिए होगा।
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
इनिट कंपोनेंट आम तौर पर एक काउंटर वेरिएबल सेट करता है और शर्त यह जाँचती है कि लूप जारी रहना चाहिए या रुकना चाहिए। पोस्ट कंपोनेंट आम तौर पर हर इटरेशन के अंत में काउंटर बढ़ा देता है।
int sum{0};
for (int i{1}; i < 10; ++i) {
sum += i;
}
यह लूप 1 से 9 तक की संख्याओं का जोड़ करता है (9 भी शामिल है)।
लूप के अंदर के कोड में आप break कीवर्ड का उपयोग करके लूप को पूरी तरह रोक सकते हैं:
int sum{2};
while(true) {
sum *= 2;
if (sum > 1000)
break;
}
// sum is now 1024
इसके उलट, continue कीवर्ड सिर्फ मौजूदा इटरेशन को रोकता है और अगले इटरेशन के साथ आगे बढ़ जाता है:
int equal_sum{0};
for (int i{1}; i < 7; ++i) {
if (i%2 == 1) {
continue;
}
equal_sum += i;
}
// equal_sum is now 12
लूप का लॉजिक समझना आम तौर पर तब आसान होता है जब break और continue का इस्तेमाल कम से कम हो या बिल्कुल न हो।
दोनों कीवर्ड कोड के कुछ हिस्सों को छोड़ देते हैं, जिससे कोड को समझते चलना अक्सर और मुश्किल हो जाता है।
इस अभ्यास में आप बचत खातों के साथ काम करेंगे। हर साल आपके बचत खाते का बैलेंस उसकी ब्याज दर के आधार पर अपडेट किया जाता है। आपका बैंक आपको कितनी ब्याज दर देता है, यह इस पर निर्भर करता है कि आपके खाते में कितनी रकम है (यानी उसका बैलेंस):
0 डॉलर से कम बैलेंस पर 3.213% (बैलेंस और ज़्यादा नेगेटिव हो जाता है)।0 डॉलर या उससे अधिक और 1000 डॉलर से कम बैलेंस पर 0.5%।1000 डॉलर या उससे अधिक और 5000 डॉलर से कम बैलेंस पर 1.621%।5000 डॉलर या उससे अधिक बैलेंस पर 2.475%।आपके चार कार्य हैं, और हर कार्य बैलेंस तथा उसकी ब्याज दर से जुड़ा है।
interest_rate फंक्शन बनाइए, जो दिए गए बैलेंस के आधार पर ब्याज दर निकालता है:
interest_rate(200.75);
// => 0.5
yearly_interest फंक्शन बनाइए, जो दिए गए बैलेंस के आधार पर ब्याज निकालता है:
yearly_interest(200.75):
// => 1.003750
annual_balance_update फंक्शन बनाइए, जो ब्याज दर को ध्यान में रखते हुए सालाना बैलेंस अपडेट निकालता है:
annual_balance_update(200.75);
// => 201.75375
years_until_desired_balance फंक्शन बनाइए, जो बताता है कि मनचाहा बैलेंस पाने में कम से कम कितने साल लगेंगे। ध्यान रखिए कि हर साल बैलेंस में ब्याज जुड़ता है।
यानी एक साल बाद का बैलेंस होता है: शुरुआती बैलेंस + शुरुआती बैलेंस पर मिलने वाला ब्याज।
दूसरे साल के बाद का बैलेंस होता है एक साल बाद का बैलेंस + एक साल बाद के बैलेंस पर मिलने वाला ब्याज।
और यही क्रम तब तक चलता है, जब तक कि उस साल का बैलेंस लक्ष्य बैलेंस के बराबर या उससे अधिक न हो जाए।
double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14
ध्यान दीजिए कि लौटाई जाने वाली वैल्यू एक int होती है।
Exercism पर साइन अप कीजिए और C++ को 19 कॉन्सेप्ट100 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।