Арифметичні операції та математика
У цій лекції ми навчимося виконувати математичні дії: додавати, віднімати, ділити (і робити це правильно!), а також дізнаємося про "магічний" оператор, який постійно використовують програмісти.
1. Базові арифметичні оператори
У C++ основні математичні дії записуються так само, як і в шкільній математиці, але з невеликими відмінностями в символах.
| Операція | Символ | Приклад | Результат |
|---|---|---|---|
| Додавання | + | 10 + 5 | 15 |
| Віднімання | - | 10 - 3 | 7 |
| Множення | * | 4 * 2 | 8 |
| Ділення | / | 20 / 4 | 5 |
| Остача від ділення | % | 10 % 3 | 1 |
2. Пастка цілочисельного ділення (Дуже важливо!)
Це найпоширеніша помилка початківців. В C++ результат ділення залежить від типу даних.
-
Якщо ви ділите ціле число на ціле, результат буде цілим.
Дробова частина просто відкидається (не округлюється, а відсікається!). -
Щоб отримати дробовий результат, хоча б одне з чисел має бути типу
doubleабоfloat.
Приклад проблеми:
#include <iostream>
using namespace std;
int main() {
int a = 5;
int b = 2;
// Помилка початківця:
double result = a / b;
// Комп'ютер спочатку ділить 5 на 2 як цілі числа (отримує 2),
// а потім записує 2 в змінну double. 0.5 втрачено!
cout << "Результат 5 / 2 (int): " << result << endl; // Виведе 2
// Правильний варіант:
double correctResult = 5.0 / 2;
// Або (double)a / b
cout << "Результат 5.0 / 2: " << correctResult << endl; // Виведе 2.5
return 0;
}
3. Оператор остачі від ділення (%)
Цей оператор працює тільки з цілими числами. Він повертає те, що залишилося після ділення націло.
10 % 3→ 3 вміщується в 10 тричі (3*3=9), залишок 1.12 % 4→ ділиться без залишку, результат 0.
Де це використовується?
- Перевірка на парність: якщо
x % 2 == 0, то число парне. - Отримання останньої цифри числа:
123 % 10дасть 3.
4. Скорочені операції та Інкремент
Програмісти — люди ледачі, тому для частих дій існують скорочення.
Зміна змінної:
Замість score = score + 10; можна написати score += 10;
Це працює для всіх операторів: +=, -=, *=, /=, %=
Інкремент (++) та Декремент (--):
Це збільшення або зменшення значення рівно на 1.
x++— те саме, щоx = x + 1.x--— те саме, щоx = x - 1.
int lives = 3; lives--; // Стало 2 lives++; // Знову 3
Нюанс:
Існує префіксна (++x) та постфіксна (x++) форми.
x++(постфікс): Спочатку використай старе значення, потім збільш.++x(префікс): Спочатку збільш, потім використовуй нове значення.
5. Бібліотека <cmath>
Для складніших обчислень (корінь, степінь, синус) стандартних символів клавіатури замало. Потрібно підключити бібліотеку cmath.
#include <iostream>
#include <cmath> // Підключаємо математичну бібліотеку
using namespace std;
int main() {
cout << "Степінь (2 в кубі): " << pow(2, 3) << endl; // 8
cout << "Корінь із 25: " << sqrt(25) << endl; // 5
cout << "Округлення (ceil): " << ceil(3.2) << endl; // 4 (вгору)
cout << "Округлення (floor): " << floor(3.9) << endl; // 3 (вниз)
return 0;
}
Практичні завдання до Лекції 3
Виконайте ці завдання в своєму середовищі розробки.
Завдання 1: Конвертер часу
Напишіть програму, яка просить користувача ввести кількість секунд (велике число, наприклад, 4000). Програма має обчислити і вивести, скільки це годин, хвилин і секунд.
Підказка: Використовуйте цілочисельне ділення (/) для годин та оператор остачі (%) для обчислення хвилин і секунд.
- 1 година = 3600 секунд
- 1 хвилина = 60 секунд
Завдання 2: Середній бал (Увага на типи даних!)
Користувач вводить 3 оцінки за іспити (цілі числа, наприклад, 10, 12, 10). Програма має вивести точний середній бал (наприклад, 10.6667).
Важливо: Не забудьте, що сума трьох цілих чисел — це ціле число. Як змусити програму поділити це чесно, з дробовою частиною?
Завдання 3: Банкомат
Напишіть програму, яка симулює видачу грошей з банкомату. Користувач вводить суму в гривнях (наприклад, 573 грн), яку хоче зняти. Програма має вивести, скільки купюр по 100 грн, 50 грн, 20 грн та 1 грн отримає користувач.
(Починайте з найбільших купюр).