সুদ মজার

সুদ মজার

লার্নিং অনুশীলনী

ভূমিকা

লুপ

কোনো লজিক বারবার চালানোর জন্য লুপ ব্যবহার করা হয়। সবচেয়ে কমন দুটি ধরন হলো while loop (অনির্দিষ্টকাল চলা লুপ) আর for loop (নির্দিষ্ট, বা গণনাভিত্তিক লুপ)। এছাড়া for each লুপও আছে, যেটি পরে কোনো কনসেপ্টে আসবে।

সাধারণ সিনট্যাক্স

for loop-এ থাকে একটি হেডার আর একটি কোড ব্লক, যার ভেতরে দ্বিতীয় বন্ধনী দিয়ে মোড়ানো লুপের বডি থাকে। হেডারটি সেমিকোলন ; দিয়ে আলাদা করা ৩টি কম্পোনেন্ট নিয়ে গঠিত: ইনিশিয়ালাইজেশন স্টেটমেন্ট, শর্ত আর আরেকটি এক্সপ্রেশন। এগুলোর যেকোনোটি খালি থাকতে পারে।

for (init_statement; condition; expression) {
  some_statement;
}
  • init_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

for লুপ: একটি উদাহরণ

init কম্পোনেন্ট সাধারণত একটি কাউন্টার ভ্যারিয়েবল তৈরি করে, শর্ত পরীক্ষা করে লুপ চালিয়ে যাওয়া উচিত নাকি থামানো, আর post কম্পোনেন্ট সাধারণত প্রতিটি পুনরাবৃত্তির শেষে কাউন্টারটি ইনক্রিমেন্ট করে।

int sum{0};
for (int i{1}; i < 10; ++i) {
  sum += i;
}

এই লুপটি 1 থেকে 9 পর্যন্ত সংখ্যাগুলোর যোগফল বের করবে (9 সহ)।

break আর continue

লুপের বডির ভেতরে 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
Note

সাধারণত লুপের লজিক বোঝা সহজ হয়, যখন break আর continue-এর ব্যবহার যতটা সম্ভব কমানো হয় বা পুরোপুরি এড়িয়ে চলা হয়। দুটি কিওয়ার্ডই কোডের নির্দিষ্ট কিছু অংশ বাদ দিয়ে যায়, ফলে কোড অনুসরণ করা প্রায়ই আরও কঠিন হয়ে পড়ে।

নির্দেশনা

এই অনুশীলনীতে আপনি সেভিংস অ্যাকাউন্ট নিয়ে কাজ করবেন। প্রতি বছর আপনার সেভিংস অ্যাকাউন্টের ব্যালেন্স তার সুদের হার অনুযায়ী হালনাগাদ হয়। আপনার ব্যাঙ্ক আপনাকে যে সুদের হার দেয়, তা নির্ভর করে আপনার অ্যাকাউন্টে থাকা টাকার পরিমাণের উপর (অর্থাৎ তার ব্যালেন্স):

  • 0 ডলারের কম ব্যালেন্সে সুদের হার 3.213% (ব্যালেন্স আরও ঋণাত্মক হয়ে যায়)।
  • 0 ডলার বা তার বেশি এবং 1000 ডলারের কম ব্যালেন্সে সুদের হার 0.5%।
  • 1000 ডলার বা তার বেশি এবং 5000 ডলারের কম ব্যালেন্সে সুদের হার 1.621%।
  • 5000 ডলার বা তার বেশি ব্যালেন্সে সুদের হার 2.475%।

আপনার সামনে চারটি কাজ আছে, যার প্রতিটিতে ব্যালেন্স আর তার সুদের হার নিয়ে কাজ করতে হবে।

1. সুদের হার হিসাব করুন

নির্দিষ্ট ব্যালেন্স অনুযায়ী সুদের হার হিসাব করতে interest_rate ফাংশনটি ইমপ্লিমেন্ট করুন:

interest_rate(200.75);
// => 0.5

2. সুদ হিসাব করুন

নির্দিষ্ট ব্যালেন্স অনুযায়ী সুদ হিসাব করতে yearly_interest ফাংশনটি ইমপ্লিমেন্ট করুন:

yearly_interest(200.75):
// => 1.003750

3. বার্ষিক ব্যালেন্স হালনাগাদ হিসাব করুন

সুদের হার বিবেচনায় নিয়ে বার্ষিক ব্যালেন্স হালনাগাদ হিসাব করতে annual_balance_update ফাংশনটি ইমপ্লিমেন্ট করুন:

annual_balance_update(200.75);
// => 201.75375

4. কাঙ্ক্ষিত ব্যালেন্সে পৌঁছাতে কত বছর লাগবে তা হিসাব করুন

প্রতি বছর ব্যালেন্সের সাথে সুদ যোগ হয়, এটি বিবেচনায় রেখে কাঙ্ক্ষিত ব্যালেন্সে পৌঁছাতে সর্বনিম্ন কত বছর লাগবে তা হিসাব করতে years_until_desired_balance ফাংশনটি ইমপ্লিমেন্ট করুন। এর মানে হলো, এক বছর পরের ব্যালেন্স: শুরুর ব্যালেন্স + শুরুর ব্যালেন্সের সুদ। দ্বিতীয় বছর পরের ব্যালেন্স হলো এক বছর পরের ব্যালেন্স + এক বছর পরের ব্যালেন্সের সুদ। এভাবে চলতে থাকবে, যতক্ষণ না চলতি বছরের ব্যালেন্স লক্ষ্য ব্যালেন্সের সমান বা তার বেশি হয়।

double balance {200.75};
double targetBalance {214.88};
years_until_desired_balance(balance, targetBalance)
// => 14

মনে রাখবেন, রিটার্ন করা মানটি একটি int.

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
C++ Exercism

সুদ মজার শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, C++ ট্র্যাকের 19টি কনসেপ্ট100টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।