কোনো লজিক বারবার চালানোর জন্য লুপ ব্যবহার করা হয়।
সবচেয়ে কমন দুটি ধরন হলো while loop (অনির্দিষ্টকাল চলা লুপ) আর for loop (নির্দিষ্ট, বা গণনাভিত্তিক লুপ)।
এছাড়া for each লুপও আছে, যেটি পরে কোনো কনসেপ্টে আসবে।
for loop-এ থাকে একটি হেডার আর একটি কোড ব্লক, যার ভেতরে দ্বিতীয় বন্ধনী দিয়ে মোড়ানো লুপের বডি থাকে।
হেডারটি সেমিকোলন ; দিয়ে আলাদা করা ৩টি কম্পোনেন্ট নিয়ে গঠিত: ইনিশিয়ালাইজেশন স্টেটমেন্ট, শর্ত আর আরেকটি এক্সপ্রেশন।
এগুলোর যেকোনোটি খালি থাকতে পারে।
for (init_statement; condition; expression) {
some_statement;
}
boolean-এ মূল্যায়িত হয় আর লুপ কখন থামা উচিত তা নিয়ন্ত্রণ করে।
এই শর্তটি যতক্ষণ true হিসেবে মূল্যায়িত হয়, ততক্ষণ লুপের ভেতরের কোড চলবে।
এই এক্সপ্রেশনটি false হিসেবে মূল্যায়িত হওয়ামাত্রই লুপের আর কোনো ইটারেশন চলবে না।while loop তার বডি চালায় যতক্ষণ তার শর্ত পরীক্ষা true হয়।
নিচের কোডটি দেখায় কীভাবে একটি for-কে while loop-এ রূপান্তর করা যায়।
init_statement;
while(condition) {
some_statement;
expression;
}
লুপ নিয়ে কাজ করার সময় প্রায়ই একটি কাউন্টার ভ্যারিয়েবলের সাথে ১ যোগ বা ১ বিয়োগ করতে হয়, যা ইটারেশনগুলো হিসাব রাখে।
এটা এতটাই কমন যে ইনক্রিমেন্ট/ডিক্রিমেন্ট করার জন্য আলাদা অপারেটর আছে: ++ আর --।
এগুলো প্রিফিক্স আর পোস্টফিক্স রূপে আসে। প্রিফিক্স স্টেটমেন্টে ব্যবহারের আগে ভ্যারিয়েবলটি বদলায়, আর পোস্টফিক্স রূপটি ব্যবহারের পরে বদলায়। বেশিরভাগ সময়েই আপনি সম্ভবত প্রিফিক্স রূপটিই চাইবেন।
int a{3};
int b{--a};
// b is 2, a is now 2
int c{a++};
// c is 2, a is now 3
init কম্পোনেন্ট সাধারণত একটি কাউন্টার ভ্যারিয়েবল তৈরি করে, শর্ত পরীক্ষা করে লুপ চালিয়ে যাওয়া উচিত নাকি থামানো, আর post কম্পোনেন্ট সাধারণত প্রতিটি পুনরাবৃত্তির শেষে কাউন্টারটি ইনক্রিমেন্ট করে।
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টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।