Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Платіжні шлюзи
1. Початковий рівень. Створити консольну програму «Платіжні шлюзи»: реалізувати інтерфейс Payment і два локальні макети. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Платіжні шлюзи»: реалізувати інтерфейс Payment і два локальні макети, додати вибір реалізації за введеною назвою та перевірку суми. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Платіжні шлюзи»: реалізувати абстрактний інтерфейс Payment з кількома локальними макетами шлюзів, що обчислюють комісію, вибір шлюзу за назвою, навчальні платежі й звіт комісій без реальних переказів або мережі. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 2. Логер
1. Початковий рівень. Створити консольну програму «Логер»: реалізувати інтерфейс Sink і приймачі в консоль та пам’ять. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Логер»: реалізувати інтерфейс Sink і приймачі в консоль та пам’ять, додати рівні info/error й фільтр. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Логер»: реалізувати інтерфейс Sink з приймачами в консоль і пам’ять та рівнями info/error, ланцюжок приймачів із перевіркою життя та звітом кількості повідомлень. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 3. Стратегії сортування
1. Початковий рівень. Створити консольну програму «Стратегії сортування»: реалізувати інтерфейс сортування й insertion/bubble. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Стратегії сортування»: реалізувати інтерфейс сортування й insertion/bubble, додати лічильники порівнянь для однакового масиву. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Стратегії сортування»: реалізувати інтерфейс стратегії сортування з реалізаціями insertion і bubble та лічильниками операцій, порівняльний звіт часу й операцій на копіях тих самих даних. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 4. Навчальні шифрувальники
1. Початковий рівень. Створити консольну програму «Навчальні шифрувальники»: реалізувати інтерфейс перетворення й Caesar/XOR. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Навчальні шифрувальники»: реалізувати інтерфейс перетворення й Caesar/XOR, додати зворотне перетворення та перевірку ключа. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Навчальні шифрувальники»: реалізувати інтерфейс оборотного текстового перетворення з реалізаціями Caesar і XOR та перевіркою ключа, ланцюжок навчальних перетворень без заяв про криптографічну безпеку. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 5. Стиснення тексту
1. Початковий рівень. Створити консольну програму «Стиснення тексту»: реалізувати інтерфейс Codec і RLE та identity. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Стиснення тексту»: реалізувати інтерфейс Codec і RLE та identity, додати декодування й відхилення пошкоджених серій. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Стиснення тексту»: реалізувати інтерфейс Codec з реалізаціями RLE та identity, кодуванням і декодуванням, порівняння розмірів і round-trip кількох текстів. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 6. Амфібія
1. Початковий рівень. Створити консольну програму «Амфібія»: реалізувати ролі Car і Boat зі спільним Vehicle. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Амфібія»: реалізувати ролі Car і Boat зі спільним Vehicle, додати віртуальну базу й одне ім’я амфібії. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Амфібія»: реалізувати амфібію через множинне наслідування ролей Car і Boat від віртуальної бази Vehicle з одним ім’ям та симуляцію маршрутів суходолом і водою з єдиним запасом пального. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 7. Багатофункціональний пристрій
1. Початковий рівень. Створити консольну програму «Багатофункціональний пристрій»: реалізувати інтерфейси Printer і Scanner. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Багатофункціональний пристрій»: реалізувати інтерфейси Printer і Scanner, додати окремі клієнтські функції для кожної ролі. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Багатофункціональний пристрій»: реалізувати багатофункціональний пристрій, що реалізує інтерфейси Printer і Scanner, клієнтські функції для кожної ролі та чергу навчальних завдань друку/сканування без реального обладнання. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 8. Здібності тварин
1. Початковий рівень. Створити консольну програму «Здібності тварин»: реалізувати інтерфейси CanFly і CanSwim. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Здібності тварин»: реалізувати інтерфейси CanFly і CanSwim, додати три види з різними наборами ролей. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Здібності тварин»: реалізувати інтерфейси CanFly і CanSwim, кілька видів тварин з різними наборами цих ролей та текстові змагання за введеними навчальними швидкостями й відстанями. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 9. Валідатори форми
1. Початковий рівень. Створити консольну програму «Валідатори форми»: реалізувати інтерфейс перевірки й правила довжини та цифри. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Валідатори форми»: реалізувати інтерфейс перевірки й правила довжини та цифри, додати список помилок для одного рядка. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Валідатори форми»: реалізувати інтерфейс правила перевірки рядка з правилами довжини, цифри та іншими, ланцюжок правил реєстрації зі стабільним порядком повідомлень. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 10. Джерела даних
1. Початковий рівень. Створити консольну програму «Джерела даних»: реалізувати інтерфейс Source і джерела масиву та введення. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Джерела даних»: реалізувати інтерфейс Source і джерела масиву та введення, додати генератор послідовності з кінцевою межею. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Джерела даних»: реалізувати інтерфейс Source з джерелами масиву, введення й генератора послідовності та спільну статистику різних джерел із явною ознакою завершення. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 11. Генератори звітів
1. Початковий рівень. Створити консольну програму «Генератори звітів»: реалізувати NVI generate і два формати тіла. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Генератори звітів»: реалізувати NVI generate і два формати тіла, додати спільну перевірку вхідних рядків. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Генератори звітів»: реалізувати абстрактний генератор звітів з невіртуальним generate (NVI) і форматами таблиці, списку та CSV з екрануванням лапок у текстовому результаті. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 12. Торговий автомат
1. Початковий рівень. Створити консольну програму «Торговий автомат»: реалізувати абстрактний стан idle/paid. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Торговий автомат»: реалізувати абстрактний стан idle/paid, додати переходи внесення коштів і скасування. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Торговий автомат»: реалізувати торговий автомат з абстрактним станом і станами idle/paid, переходами внесення коштів, покупки та скасування, симуляцію команд із товарами й інваріантом невід’ємного залишку. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 13. Чисельне інтегрування
1. Початковий рівень. Створити консольну програму «Чисельне інтегрування»: реалізувати стратегії прямокутників і трапецій. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Чисельне інтегрування»: реалізувати стратегії прямокутників і трапецій, додати перевірку меж і кількості кроків. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Чисельне інтегрування»: реалізувати інтерфейс стратегії чисельного інтегрування з методами прямокутників, трапецій і Simpson та порівняння для x² з точною формулою інтеграла. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 14. Ігрові суперники
1. Початковий рівень. Створити консольну програму «Ігрові суперники»: реалізувати інтерфейс вибору ходу й перший вільний/випадковий. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Ігрові суперники»: реалізувати інтерфейс вибору ходу й перший вільний/випадковий, додати детермінований seed і перевірку допустимості. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Ігрові суперники»: реалізувати інтерфейс вибору ходу суперника зі стратегіями «перший вільний», випадковою з seed і третьою та гру хрестики-нулики з журналом ходів. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 15. Калібровані датчики
1. Початковий рівень. Створити консольну програму «Калібровані датчики»: реалізувати інтерфейси Readable і Calibratable. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Калібровані датчики»: реалізувати інтерфейси Readable і Calibratable, додати два навчальні датчики та зсув калібрування. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Калібровані датчики»: реалізувати інтерфейси Readable і Calibratable, навчальні датчики зі зсувом калібрування та станцію з поліморфним читанням і перевіркою скінченності. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 16. Політики кешу
1. Початковий рівень. Створити консольну програму «Політики кешу»: реалізувати інтерфейс витіснення й FIFO. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Політики кешу»: реалізувати інтерфейс витіснення й FIFO, додати LRU та доступ до існуючого ключа. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Політики кешу»: реалізувати інтерфейс політики витіснення кешу з реалізаціями FIFO, LRU і LFU та порівняння їх за однаковим потоком запитів. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 17. Тарифи таксі
1. Початковий рівень. Створити консольну програму «Тарифи таксі»: реалізувати інтерфейс тарифу й два набори коефіцієнтів. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Тарифи таксі»: реалізувати інтерфейс тарифу й два набори коефіцієнтів, додати перевірку відстані й тривалості. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Тарифи таксі»: реалізувати інтерфейс тарифу таксі з кількома наборами коефіцієнтів за відстань і тривалість та порівняння навчальних цін із введеним сезонним множником. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 18. Сповіщувачі погоди
1. Початковий рівень. Створити консольну програму «Сповіщувачі погоди»: реалізувати Listener і джерело подій. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Сповіщувачі погоди»: реалізувати Listener і джерело подій, додати підписку без дублікатів та відписку. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Сповіщувачі погоди»: реалізувати інтерфейс Listener і джерело погодних подій з підпискою без дублікатів та відпискою, кілька порогових слухачів із чітким контрактом життя й зміни підписок. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 19. Маршрутизація
1. Початковий рівень. Створити консольну програму «Маршрутизація»: реалізувати інтерфейс вибору маршруту за ціною й довжиною. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Маршрутизація»: реалізувати інтерфейс вибору маршруту за ціною й довжиною, додати фільтр платних доріг. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Маршрутизація»: реалізувати інтерфейс вибору маршруту зі стратегіями за ціною й довжиною та фільтром платних доріг і порівняння стратегій на заданому списку готових маршрутів без онлайн-карт. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 20. Форми навчання
1. Початковий рівень. Створити консольну програму «Форми навчання»: реалізувати інтерфейси Schedule і Assessment. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Форми навчання»: реалізувати інтерфейси Schedule і Assessment, додати онлайн та очний класи з різними ролями. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Форми навчання»: реалізувати інтерфейси Schedule і Assessment, онлайн і очний класи з різними ролями та змішаний курс із композицією розкладу й політики оцінювання. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 21. Банківські продукти
1. Початковий рівень. Створити консольну програму «Банківські продукти»: реалізувати інтерфейси InterestBearing і Withdrawable. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Банківські продукти»: реалізувати інтерфейси InterestBearing і Withdrawable, додати продукти з однією або двома ролями. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Банківські продукти»: реалізувати інтерфейси InterestBearing і Withdrawable, банківські продукти з однією або двома ролями, навчальний портфель і перевірку відмов без реальних фінансових рекомендацій. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 22. Геометричні тіла
1. Початковий рівень. Створити консольну програму «Геометричні тіла»: реалізувати інтерфейси HasVolume і HasSurface. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Геометричні тіла»: реалізувати інтерфейси HasVolume і HasSurface, додати куб і циліндр з перевіркою розмірів. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Геометричні тіла»: реалізувати інтерфейси HasVolume і HasSurface, куб і циліндр з перевіркою розмірів та склад контейнерів із сумами об’ємів та площ. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 23. Команди редактора
1. Початковий рівень. Створити консольну програму «Команди редактора»: реалізувати Command і додавання тексту. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Команди редактора»: реалізувати Command і додавання тексту, додати undo/redo з чітким часом життя тексту. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Команди редактора»: реалізувати інтерфейс Command текстового редактора з undo/redo, команди вставки, видалення й заміни зі знімками та очищенням redo після нової дії. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 24. Фільтри зображень
1. Початковий рівень. Створити консольну програму «Фільтри зображень»: реалізувати інтерфейс Filter і інверсію/поріг. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Фільтри зображень»: реалізувати інтерфейс Filter і інверсію/поріг, додати перевірку пікселів 0–255. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Фільтри зображень»: реалізувати інтерфейс Filter для текстової матриці пікселів 0–255 з інверсією, порогом і розмиттям та ланцюжок фільтрів з явними правилами країв. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 25. Студент-співробітник
1. Початковий рівень. Створити консольну програму «Студент-співробітник»: реалізувати ромб Person–Student/Employee. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Студент-співробітник»: реалізувати ромб Person–Student/Employee, додати віртуальну базу з одним ідентифікатором. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Студент-співробітник»: реалізувати ромб Person–Student/Employee з віртуальною базою й одним ідентифікатором та навчальний облік стипендії й зарплати через незалежні ролі. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 26. Операції калькулятора
1. Початковий рівень. Створити консольну програму «Операції калькулятора»: реалізувати інтерфейс Operation і додавання/множення. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Операції калькулятора»: реалізувати інтерфейс Operation і додавання/множення, додати реєстр операцій за назвою. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Операції калькулятора»: реалізувати інтерфейс Operation з додаванням, множенням і діленням, реєстр операцій за назвою та командний калькулятор із валідацією й довідкою без динамічних бібліотек. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 27. Правила гри Життя
1. Початковий рівень. Створити консольну програму «Правила гри Життя»: реалізувати інтерфейс Rule і класичне правило. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Правила гри Життя»: реалізувати інтерфейс Rule і класичне правило, додати альтернативний набір народження/виживання. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Правила гри Життя»: реалізувати інтерфейс Rule гри «Життя» з класичним і альтернативним правилом народження/виживання та покрокову симуляцію сітки з явними межами й порівнянням стратегій. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 28. Генератори навчальних рядків
1. Початковий рівень. Створити консольну програму «Генератори навчальних рядків»: реалізувати інтерфейс генерації та політики алфавіту. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Генератори навчальних рядків»: реалізувати інтерфейс генерації та політики алфавіту, додати довжину, seed і перевірку вимог. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Генератори навчальних рядків»: реалізувати інтерфейс генерації навчальних рядків з політиками алфавіту, довжиною й seed та порівняння політик на тестових рядках без використання для справжніх паролів. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 29. Системи оцінювання
1. Початковий рівень. Створити консольну програму «Системи оцінювання»: реалізувати інтерфейс шкали й числову/літерну реалізації. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Системи оцінювання»: реалізувати інтерфейс шкали й числову/літерну реалізації, додати явно задані навчальні межі категорій. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Системи оцінювання»: реалізувати інтерфейс шкали оцінювання з числовою та літерною реалізаціями й явно заданими навчальними межами та відомість конвертацій 0–100 без тверджень про офіційні правила. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Варіант 30. Нотатки з тегами
1. Початковий рівень. Створити консольну програму «Нотатки з тегами»: реалізувати інтерфейси Taggable і Printable. Початкові дані ввести з клавіатури; викликати операцію через інтерфейс і вивести результат. Забезпечити правильне поліморфне знищення.
2. Базовий рівень. Створити консольну програму «Нотатки з тегами»: реалізувати інтерфейси Taggable і Printable, додати Searchable та пошук підрядка. Дані й команди ввести з клавіатури; вивести стан після операцій. Перевірити однаковий контракт конкретних реалізацій, порожній та помилковий випадки.
3. Високий рівень. Створити консольний проєкт «Нотатки з тегами»: реалізувати інтерфейси Taggable, Printable і Searchable для нотаток, каталог нотаток із пошуком підрядка, фільтром тегів і стабільним текстовим звітом. Дані й команди читати до end; --help описує формат і обмеження. Використати вузькі абстрактні інтерфейси та явне володіння або документовані невласницькі посилання. Вивести підсумкову таблицю; помилки в std::cerr, код 1 при некоректному вході. Додати тести заміни реалізації, межових значень та збереження інваріанта після відмови.
Порядок виконання та захисту роботи
- Записати вхідні дані, формат результату й інваріанти класів; скласти приклади звичайних, порожніх, граничних та помилкових даних.
- Визначити публічний інтерфейс і відповідальність кожного класу. Пояснити, хто володіє кожним ресурсом і коли закінчується його життя.
- Реалізувати окремий консольний проєкт. Перевірити аргументи до зміни стану; повідомлення про помилки спрямувати в
std::cerr. - Зібрати з
/std:c++latest /EHsc /W4 /utf-8, усунути попередження; виконати підготовлені перевірки без вимкненняassert. - Порівняти результати з ручними розрахунками. Переконатися, що помилка не залишає об’єкт у стані, який порушує його контракт.
- Підготувати звіт із кодом, командою збирання, фактичними результатами, таблицею тестів та поясненням обмежень. Зберегти зміни в Git.
- На захисті пояснити обраний інтерфейс, виконати новий граничний випадок і показати, як зміна вимоги впливає на реалізацію.