Треки
/
C++
C++
/
Вправи
/
Ставки фрилансера
Ставки фрилансера

Ставки фрилансера

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

Вступ

Вбудовані числові типи в C++ можна поділити на цілі числа та числа з плаваючою комою. Цілі числа не мають дробової частини: 0, 691 чи -2. Числа з плаваючою комою мають десяткову крапку, як-от 6.02214076, 0.1 чи -1.616.

Цілі числа

У наступному прикладі показано оголошення та ініціалізацію чотирьох різних змінних

int m_morales{9241};              // base 10: 0-9
int a_apaec{0x24CD};              // base 16: 0-9 and A-F
int m_gargan{0b10010000011001};   // base  2: 0-1
int b_reilly{022031};             // base  8: 0-7
                                  // Leading with a 0 not the letter o.

Присвоюючи значення змінній типу int, ми можемо зробити це безпосередньо за допомогою літерала. Літерал - це число, прописане прямо в коді, як-от 9241. Для кількох основ представлення існують різні літерали цілих чисел. Десяткові літерали цілих чисел найпоширеніші й використовують цифри від 0 до 9. Додавши спеціальний префікс, як-от 0x, можна використовувати інші основи. Наведений вище приклад показує число 9241 у чотирьох представленнях із відповідними префіксами. Усі змінні ініціалізовано одним і тим самим значенням.

Щоб дізнатися більше про різні системи представлення, погляньмо на невеликий посібник.

Щоб було легше читати, можна відокремлювати цифри апострофом. 9'241 - це те саме, що 0b0100'100'0001'1001 або 92'4'1.

Числа з плаваючою комою

Літерали чисел з плаваючою комою бувають двох видів. Крім інтуїтивно зрозумілого 0.0024, можна використовувати його науковий запис 2.4e-3. Найпоширенішим типом із плаваючою комою є double.

Арифметика

C++ підтримує +, -, *, /, ( і ) та % для побудови виразів. Результат операції між двома цілими числами теж є цілим числом. 5 / 2 поверне 2. Коли один із задіяних типів належить до чисел із плаваючою комою, результат також буде числом із плаваючою комою. 5.0 / 2 і 5 / 2.0 повернуть 2.5. % - це оператор остачі (від ділення), який повертає остачу від ділення цілих чисел: 5%3 дорівнює 2.

Оператор присвоєння

Оператор присвоєння присвоює змінній значення літерала. Присвоєння завжди відбувається справа наліво, і ніколи навпаки.

int length = 5;
int width = 2;
length = width;

Тут ціле значення 5 присвоюється змінній length. Потім ціле значення 2 присвоюється змінній width. Нарешті, значення width копіюється у змінну length, і попереднє значення 5 буде втрачено. Звернімо увагу й на те, що ми присвоюємо значення width до length лише в момент операції присвоєння. Тому, якщо значення width зміниться пізніше, це не вплине на значення, яке набуде length.

Оператор присвоєння можна поєднувати з іншими операторами (арифметичними та побітовими), відомими як оператори compound assignment: +=, -=, *=, /=, %=. Ці оператори змінюють поточне значення змінної, виконуючи над ним операцію.

// we start with 0 people
int people{};
// we need 0 eggs
int eggs{};
// two people joined:
people += 2;
// people is now 2
// let's add 3 eggs per person
eggs += 3 * people;
// eggs is now 6

Змінні people та eggs ініціалізовано значенням 0. Потім ми додаємо ціле значення 2 до наявного значення 0 змінної people і присвоюємо результат назад змінній people. Тепер people дорівнює 2. Далі ми додаємо 3 яйця на кожну людину, що в сумі становить 6 яєць. Тепер додамо ці 6 до наявного значення 0 змінної eggs і присвоїмо результат назад змінній eggs. Тепер eggs дорівнюватиме 6. Еквівалентними виразами були б people = people + 2 та eggs = eggs + (3 * people).

Вказівки

У цій вправі ми будемо писати код, який допоможе фрілансеру спілкуватися з менеджером проєкту. Наше завдання - надати кілька інструментів, щоб швидко обчислювати денні та місячні ставки, за потреби з урахуванням заданої знижки.

Спершу встановімо кілька правил між фрілансером і менеджером проєкту:

  • Денна ставка у 8 разів більша за годинну ставку.
  • У місяці 22 оплачувані дні.

Іноді фрілансер пропонує застосувати знижку на свою денну ставку (наприклад, для найвідданіших клієнтів або неприбуткових організацій).

Знижки подаються як дробові числа, що позначають відсотки, наприклад 25.0 (25%).

1. Обчислити денну ставку за годинною ставкою

Реалізуйте функцію daily_rate, яка обчислює денну ставку, беручи годинну ставку як параметр. Договір визначає, що в дні 8 оплачуваних годин.

daily_rate(60)
// => 480.0

Повернена денна ставка має бути типу double.

2. Обчислити ціну зі знижкою

Реалізуйте функцію apply_discount, яка обчислює ціну після застосування знижки. Вона повинна приймати два параметри: початкову ціну та відсоток знижки.

apply_discount(150, 10)
// => 135.0

Повернене значення завжди має бути типу double, без будь-якого округлення.

3. Обчислити місячну ставку за годинною ставкою та знижкою

Реалізуйте функцію monthly_rate, яка обчислює місячну ставку зі знижкою. Вона повинна мати два параметри: годинну ставку та відсоток знижки.

monthly_rate(77, 10.5)
// => 12130

Повернену місячну ставку слід округлити вгору (узяти верхню межу) до найближчого цілого числа.

4. Обчислити кількість повних робочих днів за бюджетом, годинною ставкою та знижкою

Реалізуйте функцію days_in_budget, яка приймає бюджет, годинну ставку та знижку й обчислює, на скільки повних робочих днів цього вистачить.

days_in_budget(20'000, 80, 11.0)
// => 35

Повернену кількість днів слід округлити вниз (узяти нижню межу) до наступного цілого числа.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
C++ Exercism

Час розпочати Ставки фрилансера?

Зареєструйтеся на Exercism, щоб вивчати й опановувати C++, а також 19 концепцій100 вправ та справжнє наставництво від людей, і все це безкоштовно.