トラック
/
C++
C++
/
演習
/
利息はおもしろい
利息はおもしろい

利息はおもしろい

学習演習

はじめに

ループ

ループは、ある処理を繰り返し実行するために使います。 よく使われるのは、while loop(回数が決まっていないループ)とfor loop(回数が決まっている、カウントするループ)の2つです。 さらに、あとで別の概念で登場するfor eachループというものもあります。

一般的な構文

for loopは、ヘッダーと、ループの本体を波括弧で囲んだブロックから成ります。 ヘッダーは、セミコロン;で区切られた3つの要素から成ります。初期化文、条件、そしてもう1つの式です。 これらはそれぞれ空でもかまいません。

for (init_statement; condition; expression) {
  some_statement;
}
  • init_statementの要素は、ループが始まる前に一度だけ実行されるコードです。
  • conditionの要素は、booleanと評価される式で、ループをいつ止めるかを制御します。 この条件がtrueと評価されるかぎり、ループ内のコードが実行されます。 この式がfalseと評価されるとすぐに、ループの繰り返しはそれ以上実行されません。
  • expressionの要素は、繰り返しのたびに最後に実行されるコードです。

while loopは、conditionのチェックが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

forループの例

_init component_はふつうカウンター変数を用意し、_condition_はループを続けるか止めるかを判定し、_post component_はふつう繰り返しのたびに最後にカウンターをインクリメントします。

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%。

タスクは4つあり、それぞれで残高とその利率を扱います。

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関数を実装します。 このとき、毎年、利息が残高に加算されることを考慮します。 つまり、1年後の残高は「開始時の残高+開始時の残高に対する利息」です。 2年後の残高は「1年後の残高+1年後の残高に対する利息」です。 これを、その年の残高が目標の残高以上になるまで繰り返します。

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

戻り値はintであることに注意してください。

GitHubで編集する リンクは新しいウィンドウまたはタブで開きます
C++ Exercism

利息はおもしろいを始める準備はできましたか?

Exercismに登録すれば、19個のコンセプト100個の演習、そして本物の人間によるメンタリングとともに、C++を学んでマスターできます。すべて無料です。