Вбудовані числові типи в 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).
У цій вправі ми будемо писати код, який допоможе фрілансеру спілкуватися з менеджером проєкту. Наше завдання - надати кілька інструментів, щоб швидко обчислювати денні та місячні ставки, за потреби з урахуванням заданої знижки.
Спершу встановімо кілька правил між фрілансером і менеджером проєкту:
Іноді фрілансер пропонує застосувати знижку на свою денну ставку (наприклад, для найвідданіших клієнтів або неприбуткових організацій).
Знижки подаються як дробові числа, що позначають відсотки, наприклад 25.0 (25%).
Реалізуйте функцію daily_rate, яка обчислює денну ставку, беручи годинну ставку як параметр.
Договір визначає, що в дні 8 оплачуваних годин.
daily_rate(60)
// => 480.0
Повернена денна ставка має бути типу double.
Реалізуйте функцію apply_discount, яка обчислює ціну після застосування знижки.
Вона повинна приймати два параметри: початкову ціну та відсоток знижки.
apply_discount(150, 10)
// => 135.0
Повернене значення завжди має бути типу double, без будь-якого округлення.
Реалізуйте функцію monthly_rate, яка обчислює місячну ставку зі знижкою.
Вона повинна мати два параметри: годинну ставку та відсоток знижки.
monthly_rate(77, 10.5)
// => 12130
Повернену місячну ставку слід округлити вгору (узяти верхню межу) до найближчого цілого числа.
Реалізуйте функцію days_in_budget, яка приймає бюджет, годинну ставку та знижку й обчислює, на скільки повних робочих днів цього вистачить.
days_in_budget(20'000, 80, 11.0)
// => 35
Повернену кількість днів слід округлити вниз (узяти нижню межу) до наступного цілого числа.
Зареєструйтеся на Exercism, щоб вивчати й опановувати C++, а також 19 концепцій100 вправ та справжнє наставництво від людей, і все це безкоштовно.