トラック
/
C++
C++
/
演習
/
乗り物の購入
乗り物の購入

乗り物の購入

学習演習

はじめに

比較

C++では、比較演算子を使って値を比較できます。

比較 演算子
等しい ==
等しくない !=
より小さい <
以下 <=
より大きい >
以上 >=

これらの比較の結果は、常に真偽値になります。

int a{3};

bool eq1 = a != 4; // true

bool eq2 = a > 5;  // false

==と!=の演算子は、それぞれある値が別の値と等しいかどうかを調べます。 よくある例をいくつか見てみましょう。

bool eq3 = 2 == 3; // false, integer comparison

bool eq4 = 2.1 != 2.2; // true, float comparison

bool eq5 = "hello" == "hello"; // true, string comparison

その他の演算子は、ある値が別の値より大きいか(>)、以上か(>=)、より小さいか(<)、以下か(<=)を調べます。 この種の比較は、数値と文字列で使うことができます。 文字列を比較するときは、辞書順(辞書式順序とも呼ばれます)に従います。

bool eq6 = 2 > 3; // false, integer comparison

bool eq7 = 1.2 < 1.3; // true, float comparison

bool eq8 = "Hello" < "World"; // true, string comparison

if文

C++の条件分岐は、他の言語の条件分岐とよく似ています。 条件式の基になる型はbool型で、値はtrueかfalseのどちらかです。 条件分岐は、さまざまな条件を調べるための流れの制御としてよく使われます。

条件がtrueのときにコードを実行するif文は、次のように書きます。

std::string value{"val"};

if (value == "val") {
    return "was val";
}

複数の場合を扱うときは、else if文とelse文を使って、たくさんのif文をつなげることができます。

int number{33};

if (number > 0) {
   return "positive";
} else if (number < 0) {
    return "negative";
} else {
   return "zero";
}

C++17以降では、if文に短い初期化文を書くこともできます。 これは、そのif文で使う1つ以上の変数を初期化するために使えます。 たとえば、次のようになります。

int num{7};
if (int v{2 * num}; v > 10) {
    return v;
} else {
    return num;
}
// => 14

注意:初期化で作られた変数は、if文の終わりより後ではアクセスできません。

説明

この演習では、車両の購入の準備を手伝うコードを書きます。

タスクは3つあります。1つは運転免許証が必要かどうかを判断するもの、1つは2つの車両から選ぶのを手伝うもの、もう1つは中古車の適正価格を見積もるものです。

1. 運転免許証が必要かどうかを判断する

車両の種類によっては、運転するために運転免許証が必要です。 "car"と"truck"の2種類だけが免許を必要とし、それ以外は免許なしで運転できるものとします。

needs_license(kind)関数を実装してください。この関数は車両の種類を文字列として受け取り、その種類の車両に免許が必要かどうかを示す真偽値を返します。

needs_license("car")
// => true

needs_license("bike")
// => false

needs_license("truck")
// => true

2. 購入候補の2つの車両から1つを選ぶ

購入できる車両の中から、選択肢を検討します。 2つの候補まで絞り込むことができましたが、最終的な決断を下すには助けが必要です。 そのために、choose_vehicle(option1, option2)関数を実装してください。この関数は2つの車両を引数として受け取り、辞書順で先に来る方の選択肢を含む判断を返します。

choose_vehicle("Wuling Hongguang", "Toyota Corolla")
// => "Toyota Corolla is clearly the better choice."

choose_vehicle("Volkswagen Beetle", "Volkswagen Golf")
// => "Volkswagen Beetle is clearly the better choice."

返される文字列は、"<CHOSEN_VEHICLE> is clearly the better choice."というパターンに従う必要があります。ここで<CHOSEN_VEHICLE>は、渡された引数のうち選んだ方の車両です。

3. 中古車の価格の見積もりを計算する

決断を下したので、ディーラーで適正な価格で買えるようにしたいところです。 中古車の購入を考えているので、価格は車両の使用年数によって変わります。 大まかな見積もりとして、車両が3年未満なら、新車だったときの価格の80%になると仮定します。 10年以上経過していれば、50%になります。 車両が3年以上10年未満であれば、元の価格の70%になります。

calculate_resell_price(original_price, age)関数を実装してください。この関数はif、else if、elseを使ってこのロジックを適用します(練習したい場合は他の書き方もあります)。 元の価格と車両の使用年数を引数として受け取り、ディーラーでの見積もり価格を返します。

calculate_resell_price(1000, 1)
// => 800

calculate_resell_price(1000, 5)
// => 700

calculate_resell_price(1000.0, 15)
// => 500

注: 戻り値の型はdoubleです。

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

乗り物の購入を始める準備はできましたか?

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