Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Раціональні числа
1. Початковий рівень. Створити консольну програму з типом «Раціональні числа»: реалізувати скорочені чисельник і знаменник; + та <<. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Раціональні числа»: реалізувати скорочені чисельник і знаменник; + та <<, а також порівняння і відмову нульового знаменника. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Раціональні числа»: реалізувати тип раціонального числа зі скороченими чисельником і знаменником, операціями +, -, *, / та <<, і розв’язання системи 2 на 2 дробами з відхиленням нульового визначника. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 2. Комплексні числа
1. Початковий рівень. Створити консольну програму з типом «Комплексні числа»: реалізувати дійсну й уявну частини; + і *. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Комплексні числа»: реалізувати дійсну й уявну частини; + і *, а також читання пари через >> без часткової зміни. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Комплексні числа»: реалізувати тип комплексного числа з дійсною й уявною частинами, операціями +, -, *, / та <<, і корені квадратного рівняння з комплексним дискримінантом і звіт. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 3. Тривалість
1. Початковий рівень. Створити консольну програму з типом «Тривалість»: реалізувати цілі секунди; + і порівняння. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Тривалість»: реалізувати цілі секунди; + і порівняння, а також віднімання й множення з перевіркою переповнення. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Тривалість»: реалізувати тип тривалості в цілих секундах з операціями +, - і порівняння та графік змін, суму тривалостей і перетини без календарних часових поясів. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 4. Дата
1. Початковий рівень. Створити консольну програму з типом «Дата»: реалізувати коректну дату 2000–2099; == і <<. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Дата»: реалізувати коректну дату 2000–2099; == і <<, а також ++ та додавання днів із високосним роком. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Дата»: реалізувати тип дати 2000–2099 з операціями ==, <=>, ++ і <<, календар подій, різницю дат і відсортований звіт. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 5. Кут
1. Початковий рівень. Створити консольну програму з типом «Кут»: реалізувати градуси з нормалізацією 0–360; +. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Кут»: реалізувати градуси з нормалізацією 0–360; +, а також різницю курсів у межах -180..180 і порівняння. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Кут»: реалізувати тип кута в градусах з нормалізацією 0–360 і операціями + та -, маршрут поворотів, кінцевий курс і тригонометричні проєкції. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 6. Температура
1. Початковий рівень. Створити консольну програму з типом «Температура»: реалізувати градуси Celsius і <<. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Температура»: реалізувати градуси Celsius і <<, а також перетворення Fahrenheit та порівняння скінченних значень. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Температура»: реалізувати тип температури в градусах Celsius з порівнянням і <<, таблицю температур двох шкал, окремий тип різниці температур і додавання різниці. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 7. Довжина
1. Початковий рівень. Створити консольну програму з типом «Довжина»: реалізувати невід’ємні міліметри; + і <=>. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Довжина»: реалізувати невід’ємні міліметри; + і <=>, а також множення на кількість та введення метрів. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Довжина»: реалізувати тип довжини в невід’ємних міліметрах з операціями +, * на кількість і <=>, кошторис матеріалів із перетворенням дюймів за 25,4 мм та політикою округлення. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 8. Колір RGB
1. Початковий рівень. Створити консольну програму з типом «Колір RGB»: реалізувати три компоненти 0–255; == і <<. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Колір RGB»: реалізувати три компоненти 0–255; == і <<, а також змішування середнім та насичувальне додавання. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Колір RGB»: реалізувати тип кольору RGB з трьома компонентами 0–255 і операціями == та <<, палітру, яскравість і hex-виведення без зміни стану чужого потоку. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 9. Кватерніон
1. Початковий рівень. Створити консольну програму з типом «Кватерніон»: реалізувати чотири компоненти; + і спряження. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Кватерніон»: реалізувати чотири компоненти; + і спряження, а також множення та норму з перевіркою нульової нормалізації. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Кватерніон»: реалізувати тип кватерніона з чотирма компонентами, операціями +, *, спряженням і нормою та поворот точки одиничним кватерніоном із числовими тестами. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 10. Модульна арифметика
1. Початковий рівень. Створити консольну програму з типом «Модульна арифметика»: реалізувати значення за модулем 17; + і *. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Модульна арифметика»: реалізувати значення за модулем 17; + і *, а також віднімання, степінь і ==. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Модульна арифметика»: реалізувати тип числа за модулем 17 з операціями +, -, * і ==, таблицю обернених ненульових елементів та перевірку добутків. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 11. Поліном
1. Початковий рівень. Створити консольну програму з типом «Поліном»: реалізувати коефіцієнти; + і operator(). Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Поліном»: реалізувати коефіцієнти; + і operator(), а також множення й перевірений [] для коефіцієнтів. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Поліном»: реалізувати тип полінома з коефіцієнтами, операціями + і * та обчисленням через operator(), обчислення кількох поліномів у сітці точок і підсумкову таблицю. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 12. Велике ціле
1. Початковий рівень. Створити консольну програму з типом «Велике ціле»: реалізувати десяткові цифри; + і <<. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Велике ціле»: реалізувати десяткові цифри; + і <<, а також множення невід’ємних чисел і порівняння. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Велике ціле»: реалізувати тип великого невід’ємного цілого з десятковими цифрами, операціями +, *, порівнянням і <<, факторіали 0–100 із перевіркою відомих контрольних значень. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 13. Множина малих чисел
1. Початковий рівень. Створити консольну програму з типом «Множина малих чисел»: реалізувати елементи 0–31 у масці; | та &. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Множина малих чисел»: реалізувати елементи 0–31 у масці; | та &, а також різницю, симетричну різницю і належність. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Множина малих чисел»: реалізувати тип множини чисел 0–31 у бітовій масці з операціями |, &, - і належністю та обробку виразів над іменованими множинами з таблицею результатів. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 14. Інтервал
1. Початковий рівень. Створити консольну програму з типом «Інтервал»: реалізувати кінці напіввідкритого інтервалу; ==. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Інтервал»: реалізувати кінці напіввідкритого інтервалу; ==, а також перетин і належність точки без вигаданого суцільного об’єднання. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Інтервал»: реалізувати тип напіввідкритого інтервалу з операціями == і перетину, розклад нарад із перевіркою конфліктів і об’єднанням лише суміжних інтервалів. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 15. Точка на карті
1. Початковий рівень. Створити консольну програму з типом «Точка на карті»: реалізувати широту й довготу з межами; <<. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Точка на карті»: реалізувати широту й довготу з межами; <<, а також рівність і відстань за явно обраною сферичною моделлю. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Точка на карті»: реалізувати тип точки на карті з широтою й довготою в межах, == і <<, маршрут, сумарну відстань за сферичною моделлю й виведення координат у градусах-хвилинах-секундах. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 16. Матриця
1. Початковий рівень. Створити консольну програму з типом «Матриця»: реалізувати розміри та double-елементи; перевірений []. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Матриця»: реалізувати розміри та double-елементи; перевірений [], а також множення сумісних матриць і транспонування. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Матриця»: реалізувати тип матриці з розмірами, double-елементами, перевіреним [] і множенням, ланцюжок операцій, == для точно заданих цілих даних і звіт розмірів. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 17. Грошова сума
1. Початковий рівень. Створити консольну програму з типом «Грошова сума»: реалізувати копійки та код валюти; + і <<. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Грошова сума»: реалізувати копійки та код валюти; + і <<, а також відмову додавання різних валют і множення кількості. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Грошова сума»: реалізувати тип грошової суми в копійках із кодом валюти, операціями + і <<, конвертер із введеними раціональними курсами й округленням до копійки. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 18. Гральна карта
1. Початковий рівень. Створити консольну програму з типом «Гральна карта»: реалізувати ранг 2–14 і масть 0–3; <=>. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Гральна карта»: реалізувати ранг 2–14 і масть 0–3; <=>, а також порівняння за рангом, потім мастю й <<. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Гральна карта»: реалізувати тип гральної карти з рангом 2–14, мастю 0–3, <=> і <<, порівняння п’ятикарткових наборів за чітко описаним порядком комбінацій. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 19. Шахова позиція
1. Початковий рівень. Створити консольну програму з типом «Шахова позиція»: реалізувати 64 коди клітинок; [] і ==. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Шахова позиція»: реалізувати 64 коди клітинок; [] і ==, а також константний доступ та валідацію символів. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Шахова позиція»: реалізувати тип шахової позиції з 64 кодами клітинок, перевіреним [] і ==, послідовність навчальних змін дошки й пошук повторних позицій без правила шаху. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 20. Маса продукту
1. Початковий рівень. Створити консольну програму з типом «Маса продукту»: реалізувати невід’ємні грами; + і *. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Маса продукту»: реалізувати невід’ємні грами; + і *, а також введення кілограмів та контроль переповнення. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Маса продукту»: реалізувати тип маси продукту в невід’ємних грамах з операціями + і *, масштабування рецептів і сумарний список закупівель. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 21. Дуальні числа
1. Початковий рівень. Створити консольну програму з типом «Дуальні числа»: реалізувати дійсну та похідну частини; + і *. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Дуальні числа»: реалізувати дійсну та похідну частини; + і *, а також ділення при ненульовій дійсній частині. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Дуальні числа»: реалізувати тип дуального числа з дійсною та похідною частинами й операціями +, - і *, автоматичну похідну полінома в кількох точках і порівняння з ручною формулою. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 22. Вектор N-вимірний
1. Початковий рівень. Створити консольну програму з типом «Вектор N-вимірний»: реалізувати координати; + і []. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Вектор N-вимірний»: реалізувати координати; + і [], а також скалярний добуток сумісних розмірів і норму. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Вектор N-вимірний»: реалізувати тип N-вимірного вектора з координатами, операціями +, [] і скалярним добутком, таблицю попарних відстаней із operator<<; formatter лише як додаткову можливість. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 23. Прямокутник
1. Початковий рівень. Створити консольну програму з типом «Прямокутник»: реалізувати координати й сторони; ==. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Прямокутник»: реалізувати координати й сторони; ==, а також & як перетин і | як обмежувальний прямокутник. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Прямокутник»: реалізувати тип прямокутника з координатами й сторонами, == та & як перетином, набір областей, попарні перетини та суму площ, не плутаючи її з площею об’єднання. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 24. Рахунок матчу
1. Початковий рівень. Створити консольну програму з типом «Рахунок матчу»: реалізувати голи двох команд; +=. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Рахунок матчу»: реалізувати голи двох команд; +=, а також порівняння результатів за очками й різницею голів. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Рахунок матчу»: реалізувати тип рахунку матчу з голами двох команд, += і порівнянням, турнірну таблицю з явними правилами рівності й порядку. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 25. IPv4-адреса
1. Початковий рівень. Створити консольну програму з типом «IPv4-адреса»: реалізувати чотири октети 0–255; << і ==. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «IPv4-адреса»: реалізувати чотири октети 0–255; << і ==, а також >> без часткового присвоєння, ++ із захистом межі. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «IPv4-адреса»: реалізувати тип IPv4-адреси з чотирма октетами 0–255, операціями <<, >>, == і <=>, діапазон адрес із перевіркою належності без мережевих запитів. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 26. Ітератор-лічильник
1. Початковий рівень. Створити консольну програму з типом «Ітератор-лічильник»: реалізувати поточне ціле значення; * і ++. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Ітератор-лічильник»: реалізувати поточне ціле значення; * і ++, а також постфіксний інкремент та ==. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Ітератор-лічильник»: реалізувати тип ітератора-лічильника з поточним цілим значенням, операціями *, ++ і ==, власний навчальний діапазон зі скінченною межею та сумою елементів. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 27. Функтор тарифу
1. Початковий рівень. Створити консольну програму з типом «Функтор тарифу»: реалізувати ціну хвилини в копійках; operator(). Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Функтор тарифу»: реалізувати ціну хвилини в копійках; operator(), а також безкоштовний поріг і округлення тривалості вгору. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Функтор тарифу»: реалізувати функтор тарифу з ціною хвилини в копійках і operator() для вартості дзвінка та звіт вартості дзвінків за двома незалежними тарифами. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 28. Швидкість і відстань
1. Початковий рівень. Створити консольну програму з типом «Швидкість і відстань»: реалізувати метри та секунди окремими типами. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Швидкість і відстань»: реалізувати метри та секунди окремими типами, а також distance / time з відмовою нульового часу. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Швидкість і відстань»: реалізувати окремі типи метрів і секунд з операціями + та відстань / час, маршрут із типобезпечними сумами й середньою швидкістю за сумарним часом. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 29. Оцінка ECTS
1. Початковий рівень. Створити консольну програму з типом «Оцінка ECTS»: реалізувати цілий бал 0–100; <=>. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Оцінка ECTS»: реалізувати цілий бал 0–100; <=>, а також explicit operator int і літеру за явно заданими межами. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Оцінка ECTS»: реалізувати тип оцінки ECTS з цілим балом 0–100, <=> і літерою за явно заданими межами, відомість із сортуванням і частотами категорій. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Варіант 30. Рядок ДНК
1. Початковий рівень. Створити консольну програму з типом «Рядок ДНК»: реалізувати символи A/C/G/T; + і []. Операнди ввести з клавіатури; вивести результат і початкові значення. Конструктор має перевіряти інваріант.
2. Базовий рівень. Створити консольну програму для типу «Рядок ДНК»: реалізувати символи A/C/G/T; + і [], а також == та комплементарний ланцюг. Операнди зчитувати з клавіатури; вивести результати операцій і зрозумілі відмови. Перевірити межові значення й узгодженість операцій, не змінювати операнди звичайного додавання.
3. Високий рівень. Створити консольний проєкт «Рядок ДНК»: реалізувати тип рядка ДНК із символів A/C/G/T з операціями +, [] і ==, пошук фрагмента, валідацію введення й звіт частот нуклеотидів. Дані та команди вводити з клавіатури до end; --help описує одиниці й обмеження. Вивести табличний звіт через потоки, додати перевірки алгебраїчних властивостей і помилкового введення. Помилки спрямувати в std::cerr, завершити з кодом 1 при некоректних даних; зберігати інваріант після відмови.
Порядок виконання та захисту роботи
- Записати вхідні дані, формат результату й інваріанти класів; скласти приклади звичайних, порожніх, граничних та помилкових даних.
- Визначити публічний інтерфейс і відповідальність кожного класу. Пояснити, хто володіє кожним ресурсом і коли закінчується його життя.
- Реалізувати окремий консольний проєкт. Перевірити аргументи до зміни стану; повідомлення про помилки спрямувати в
std::cerr. - Зібрати з
/std:c++latest /EHsc /W4 /utf-8, усунути попередження; виконати підготовлені перевірки без вимкненняassert. - Порівняти результати з ручними розрахунками. Переконатися, що помилка не залишає об’єкт у стані, який порушує його контракт.
- Підготувати звіт із кодом, командою збирання, фактичними результатами, таблицею тестів та поясненням обмежень. Зберегти зміни в Git.
- На захисті пояснити обраний інтерфейс, виконати новий граничний випадок і показати, як зміна вимоги впливає на реалізацію.