Треки
/
C++
C++
/
Вправи
/
Купівля автомобіля
Купівля автомобіля

Купівля автомобіля

Навчальна вправа

Вступ

Порівняння

У C++ можна порівнювати значення за допомогою операторів порівняння.

Порівняння Оператор
дорівнює ==
не дорівнює !=
менше <
менше або дорівнює <=
більше >
більше або дорівнює >=

Результат цих порівнянь завжди є булевим значенням (англ. Boolean):

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

Інші оператори перевіряють, чи одне значення більше за (>), більше або дорівнює (>=), менше за (<) і менше або дорівнює (<=) іншому значенню. Таке порівняння доступне для чисел і рядків тексту (англ. string). Під час порівняння рядків тексту використовується порядок словника (його також називають лексикографічним порядком).

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

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

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

Умовні конструкції

Умовні конструкції в C++ схожі на умовні конструкції в інших мовах. Базовим типом будь-якої умовної операції є тип bool, який може мати значення true або false. Умовні конструкції часто використовують як механізми керування потоком, щоб перевіряти різні умови.

Можна використати умовну конструкцію if, яка виконує свій код, якщо відповідна умова true, ось так:

std::string value{"val"};

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

У сценаріях із більш ніж одним випадком багато умовних конструкцій if можна обʼєднати в ланцюжок за допомогою конструкцій else if та else.

int number{33};

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

Починаючи з C++17, умовні конструкції if також можуть містити коротку інструкцію ініціалізації, яку можна використати для ініціалізації однієї або кількох змінних для конструкції if. Наприклад:

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

Примітка: будь-які змінні, створені в ініціалізації, не можна використовувати після завершення умовної конструкції if.

Вказівки

У цій вправі ми напишемо трохи коду, який допоможе нам підготуватися до купівлі транспортного засобу.

На нас чекають три завдання: визначити, чи потрібне посвідчення водія, допомогти вибрати між двома транспортними засобами та оцінити прийнятну ціну вживаного транспортного засобу.

1. Визначити, чи потрібне посвідчення водія

Деякі види транспортних засобів вимагають посвідчення водія для керування ними. Припустімо, що посвідчення потребують лише види "car" і "truck", а всім іншим можна керувати й без посвідчення.

Реалізуйте функцію needs_license(kind), яка приймає вид транспортного засобу як рядок тексту (англ. string) і повертає булеве значення (англ. Boolean), яке вказує, чи потрібне посвідчення водія для цього виду транспортного засобу.

needs_license("car")
// => true

needs_license("bike")
// => false

needs_license("truck")
// => true

2. Вибір між двома потенційними транспортними засобами для купівлі

Оцінімо доступні нам варіанти транспортних засобів. Нам вдалося звузити вибір до двох варіантів, але потрібна допомога, щоб ухвалити остаточне рішення. Для цього реалізуйте функцію choose_vehicle(option1, option2), яка приймає два транспортні засоби як аргументи й повертає рішення, що містить варіант, який іде першим у лексикографічному порядку.

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, щоб вивчати й опановувати C++, а також 19 концепцій100 вправ та справжнє наставництво від людей, і все це безкоштовно.