Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Для бібліотеки не додавайте консольне введення до функцій предметної логіки: дані читає клієнт і передає через інтерфейс. Базовий інструментарій – MSVC у Visual Studio 2026. Використання непідтриманих можливостей C++26 не потрібне; варіант зі звітом про можливості повинен коректно повідомляти про їх відсутність. Статична бібліотека є достатньою там, де не вказано інший вид організації. Умовні числові тарифи в завданнях є даними навчальної моделі, а не чинними фінансовими умовами.
Варіанти
Варіант 1. Банківський рахунок
1. Початковий рівень. Створити консольну програму. Зчитати з клавіатури початковий баланс у копійках і суму поповнення, обидва числа невід’ємні. Винести клас рахунку в bank.h/bank.cpp та вивести новий баланс.
2. Базовий рівень. Створити консольну програму. Зчитувати команди deposit і withdraw із сумою в копійках до end. Експортувати клас Account із модуля bank, відхиляти зняття понад залишок, друкувати баланс після кожної команди.
3. Високий рівень. Створити консольний облік кількох рахунків із командами open, transfer і report. Ідентифікатори та суми зчитувати з клавіатури; модулі bank.domain і bank.report мають відділяти правила переказу від виведення. Друкувати залишки, перевірити відмову без часткового переказу й підготувати окрему тестову ціль.
Варіант 2. Статистична бібліотека
1. Початковий рівень. Створити консольну програму. Зчитати кількість від 1 до 100 і послідовність дійсних чисел. Винести обчислення середнього до stats.h/stats.cpp, вивести кількість і середнє.
2. Базовий рівень. Створити консольну програму. Зчитати з клавіатури набір чисел до кінця введення. Статична бібліотека stats має повертати кількість, мінімум, максимум і середнє; консольний клієнт друкує звіт або повідомляє про порожній набір.
3. Високий рівень. Створити статичну бібліотеку статистики, консольний клієнт і тестову програму. Клієнт отримує шлях текстового файла з аргументу або --help; файл містить по одному числу в рядку. Вивести мінімум, максимум, середнє й медіану; перевірити порожній файл, один елемент і повтори. Помилки файла направити в std::cerr із кодом 1.
Варіант 3. Гра «Життя»
1. Початковий рівень. Створити консольну програму. Задати в коді поле 5×5 із нулів та одиниць. У life.h/life.cpp реалізувати підрахунок живих сусідів без циклічного замикання меж; вивести таблицю кількостей.
2. Базовий рівень. Створити консольну програму. Зчитати поле з п’яти рядків по п’ять символів 0 або 1. Модуль life має виконати один крок правил: жива клітина виживає з 2–3 сусідами, мертва народжується з 3. Вивести нове поле, не змінюючи дані посеред підрахунку.
3. Високий рівень. Створити модулі life.engine та life.output. Консольна програма читає прямокутне поле з файла, шлях і кількість кроків 0–1000 отримує з аргументів, підтримує --help. Виводити поле після кожного кроку; межі не замикати. Окрема тестова ціль перевіряє нерухомий блок і періодичний «миготливий» рядок.
Варіант 4. Матрична бібліотека
1. Початковий рівень. Створити консольну програму. Зчитати дві матриці 2×2 з цілих чисел від −100 до 100. Винести додавання в matrix.h/matrix.cpp та вивести результуючу матрицю.
2. Базовий рівень. Створити консольну програму. Зчитати дві матриці 2×2, експортувати тип Matrix і операції додавання та множення з модуля matrix; друкувати обидва результати. Перевірити одиничну й нульову матриці.
3. Високий рівень. Створити модуль matrix з розділами types та operations. Зчитувати розміри 1–20 і значення двох матриць з клавіатури; виводити добуток або пояснення несумісності розмірів. Окрема ціль tests перевіряє прямокутний добуток, одиничну матрицю й вихід індексу за межі.
Варіант 5. Облік складу
1. Початковий рівень. Створити консольну програму. Зчитати код товару, кількість і ціну в копійках. Винести структуру та функцію вартості до окремих заголовка й реалізації, вивести загальну вартість.
2. Базовий рівень. Створити консольну програму. Модуль stock має зберігати товари за унікальним кодом. З клавіатури читати команди add, take і report до end; друкувати залишки, відхиляти від’ємну кількість і відпуск понад залишок.
3. Високий рівень. Створити модулі stock.domain, stock.storage і stock.report. Шлях файла передавати аргументом; рядок містить код, кількість і ціну через пробіли. Програма читає склад, приймає команди з клавіатури й записує стан лише після повної перевірки даних. Вивести підсумкову вартість; тестувати дублікати, помилковий рядок і незмінність файла після відмови.
Варіант 6. Калькулятор виразів
1. Початковий рівень. Створити консольну програму. Зчитати два дійсні числа й один знак +, −, * або /. Реалізацію операції винести в calc.cpp, оголошення в calc.h. Вивести результат або повідомити про ділення на нуль.
2. Базовий рівень. Створити модулі calc.parse та calc.eval. Зчитати один рядок вигляду число операція число, де операція +, -, * або /; відхиляти зайві символи й нульовий дільник. Друкувати результат або позицію помилки.
3. Високий рівень. Створити модулі lexer, parser та evaluator для цілих чисел, +, - і круглих дужок. Читати вирази з клавіатури до порожнього рядка, друкувати значення або позицію синтаксичної помилки. Обмежити модуль числа до 1000 і довжину рядка до 100; окрема тестова ціль перевіряє вкладені дужки, пробіли та незакриту дужку.
Варіант 7. Бібліотека дат
1. Початковий рівень. Створити консольну програму. Зчитати рік 1900–2100. В окремій бібліотечній функції визначити високосність за григоріанським правилом, вивести відповідь.
2. Базовий рівень. Створити модуль calendar із типом Date. З клавіатури зчитати день, місяць і рік 1900–2100; перевірити коректність дати та вивести наступну дату, у тому числі перехід року.
3. Високий рівень. Створити консольну програму. Розділити модуль calendar на розділи date та arithmetic. Зчитувати пари дат 1900–2100 з файла, шлях якого задано аргументом, і друкувати кількість днів між ними зі знаком. Додати --help і окремі тести для 1900, 2000, 29 лютого й меж року; помилковий рядок має номер у діагностиці.
Варіант 8. Текстова пригода
1. Початковий рівень. Створити консольну програму. Задати в коді три кімнати з назвами та виходами. Винести модель кімнати й опис у rooms.h/rooms.cpp, надрукувати список переходів.
2. Базовий рівень. Створити модулі adventure.world та adventure.commands. Карта з трьох кімнат задана в коді; з клавіатури читати north, south, look і end. Виводити поточну кімнату, відхиляти відсутній перехід без зміни стану.
3. Високий рівень. Створити модулі світу, інвентарю та збереження. Програма працює з фіксованою картою з п’яти кімнат, читає команди move, take, inventory, save, load; файл збереження задається аргументом. Друкувати стан після команди, перевіряти дані файла перед відновленням. Тести перевіряють недоступний вихід, повторне взяття речі та пошкоджене збереження.
Варіант 9. Шкільний розклад
1. Початковий рівень. Створити консольну програму. Зчитати номер дня 1–5, початок і кінець заняття у хвилинах від початку доби. Окрема бібліотека перевіряє межі та додатну тривалість; вивести тривалість.
2. Базовий рівень. Створити модуль schedule, який приймає з клавіатури два заняття з днем, аудиторією та інтервалом хвилин. Вивести наявність конфлікту; дотик кінця до початку конфліктом не вважати.
3. Високий рівень. Створити CMake-проєкт шкільного розкладу з модулями schedule.model та schedule.conflicts і консольною програмою. Читати з файла заняття у форматі день аудиторія початок кінець (хвилини від початку доби); шлях передавати аргументом. Друкувати всі конфліктні пари (той самий день і аудиторія, перетин інтервалів) без дублів; тести охоплюють дотик меж, різні аудиторії й повне вкладення інтервалів.
Варіант 10. Метеостанція
1. Початковий рівень. Створити консольну програму. Зчитати три температури. Винести середнє та розмах до weather.h/weather.cpp, надрукувати обидва результати.
2. Базовий рівень. Створити модуль weather для показів із часом у хвилинах і температурою. Зчитати 1–100 показів, відхилити нечислові й нескінченні значення та дубль часу, вивести середнє й екстремуми.
3. Високий рівень. Створити модулі weather.input, weather.aggregate і weather.report. Консольний клієнт читає файл із парами час температура та аргумент --window N, друкує ковзні середні для повних вікон. Підготувати тести N=1, N=кількість показів і завеликого вікна; діагностика некоректного файла має містити номер рядка.
Варіант 11. Навчальне шифрування
1. Початковий рівень. Створити консольну програму. Зчитати латинський рядок і зсув 0–25. Винести шифр Цезаря до cipher.h/cipher.cpp, вивести зашифрований рядок; інші символи залишати без змін.
2. Базовий рівень. Створити статичну бібліотеку cipher з кодуванням і декодуванням латинського тексту зсувом 0–25. Консольний клієнт читає режим, зсув і рядок; виводить результат і перевіряє відновлення початкового тексту.
3. Високий рівень. Створити модуль cipher та два консольні клієнти encode і decode зі спільною реалізацією. Шлях вхідного файла та зсув передавати аргументами; результат друкувати в stdout, підтримати --help. Тести охоплюють порожній текст, великі літери й обертання Z. У README зазначити, що це навчальний алгоритм, непридатний для захисту секретів; DLL не є вимогою.
Варіант 12. PPM-зображення
1. Початковий рівень. Створити консольну програму. Задати в коді зображення 2×2 із цілих RGB-компонентів 0–255. Винести інвертування 255−компонента в окрему бібліотеку, вивести нові RGB-трійки.
2. Базовий рівень. Створити модулі image.model та image.filter. Зчитати розміри 1–20 і RGB-трійки з клавіатури, перевірити кількість та діапазони, вивести сіре зображення із середнім трьох компонентів із цілочисельним діленням.
3. Високий рівень. Створити модулі читання PPM P3, інвертування та запису. Імена вхідного й вихідного файлів передавати аргументами; підтримати лише максимум 255 і явно відхиляти інші формати. Вивести розміри й кількість пікселів; окремі тести перевіряють один піксель, зайві чи відсутні компоненти та неправильний заголовок.
Варіант 13. Графові алгоритми
1. Початковий рівень. Створити консольну програму. Задати в коді неорієнтований граф із п’яти вершин. Винести підрахунок степенів у graph.h/graph.cpp, вивести степінь кожної вершини.
2. Базовий рівень. Створити модуль graph із типом графа та пошуком у ширину. З клавіатури читати кількість вершин 1–100, ребра та старт; вивести відстані в ребрах, для недосяжних вершин −1.
3. Високий рівень. Створити модуль graph з розділами model та search. З файла читати неорієнтований граф, із аргументів – початок і кінець маршруту; вивести найкоротший шлях або повідомлення про відсутність. Відхиляти неправильні індекси; тестувати ізольовану вершину, цикл та однакові початок і кінець.
Варіант 14. Аргументи командного рядка
1. Початковий рівень. Створити консольну програму. Зчитати аргументи командного рядка --name значення та --help. Функцію розбору винести в cli.h/cli.cpp; вивести привітання або довідку, невідомі параметри відхилити.
2. Базовий рівень. Створити модуль cli для параметрів --count N і --verbose, де N від 1 до 100. Консольний клієнт друкує розібрані значення; перевірити пропущене число, дубль параметра та зайвий аргумент.
3. Високий рівень. Створити модуль cli, який повторно використовують дві консольні програми: повторення тексту та нумерований звіт. Обидві отримують --count N, --text значення й --help; результат пишуть у stdout, помилки в stderr із кодом 2. Окрема тестова ціль перевіряє однакову семантику розбору, дублі та порожній текст.
Варіант 15. Список справ
1. Початковий рівень. Створити консольну програму. Зчитати назву справи й ознаку виконання 0 або 1. Винести тип Task і форматування в окрему бібліотеку, надрукувати один підписаний запис.
2. Базовий рівень. Створити модуль tasklist з командами add, done та list, які зчитуються з клавіатури до end. Призначати послідовні ідентифікатори, друкувати список, відхиляти невідомий номер без зміни стану.
3. Високий рівень. Створити модулі tasklist.model, tasklist.storage та tasklist.cli. Файл стану задано аргументом; команди add, done, list і save надходять із клавіатури. Друкувати кількість невиконаних справ, перевіряти дублікати ідентифікаторів при завантаженні; окремо тестувати порожній список і збереження назв із пробілами.
Варіант 16. Карткова гра
1. Початковий рівень. Створити консольну програму. Задати в коді колоду з мастей 0–3 і рангів 2–14. Функцію створення винести до deck.h/deck.cpp, вивести 52 різні карти.
2. Базовий рівень. Створити модулі deck та scoring для фіксованої гри: п’ять карт задано в коді, очки дорівнюють сумі рангів. Перевіряти відсутність повторних карт, друкувати набір і суму.
3. Високий рівень. Створити модулі deck, players та rules для порівняння двох рук по п’ять карт за сумою рангів. Читати карти з клавіатури, за рівності оголошувати нічию; відхиляти повтори між руками. Додати тестову ціль із випадками перемоги, нічиєї та некоректної карти й відтворюване збирання.
Варіант 17. Кінотеатр
1. Початковий рівень. Створити консольну програму. Задати в коді зал 3×4 і зчитати номер ряду та місця. Окрема бібліотека перевіряє межі й повертає номер місця в лінійному масиві; надрукувати номер.
2. Базовий рівень. Створити модуль cinema для залу 3×4. Команди book, cancel і report з клавіатури бронюють, скасовують та показують місця; повторне бронювання відхилити без зміни стану.
3. Високий рівень. Створити модулі cinema.sessions, cinema.booking та cinema.report. Сеанси з унікальними кодами задано в коді, бронювання читаються командами з клавіатури; вивести вільні місця й виручку за ціною 150 грн. Окрема тестова ціль перевіряє незалежність сеансів, повернення місця й переповнення залу.
Варіант 18. Симуляція датчиків
1. Початковий рівень. Створити консольну програму. Задати в коді десять показів датчика. Функцію підрахунку значень понад поріг винести в sensor.h/sensor.cpp; поріг зчитати з клавіатури, вивести кількість.
2. Базовий рівень. Створити модулі sensor.generator та sensor.analysis. Кількість 1–100 і ціле зерно генератора отримати з клавіатури; генерувати значення 0–100, вивести послідовність, мінімум та максимум.
3. Високий рівень. Створити CMake-проєкт симуляції датчиків з бібліотекою генератора, бібліотекою аналізу й консольним клієнтом. Аргументи --seed, --count і --threshold задають відтворювані покази 0–100; друкувати середнє та кількість перевищень порога. Тести перевіряють межі генерації й результати аналізу фіксованого набору, не припускаючи однакової послідовності розподілу між різними бібліотеками.
Варіант 19. Рушій вікторин
1. Початковий рівень. Створити консольну програму. Задати в коді три питання з правильними відповідями. Функцію порівняння відповіді винести до quiz.h/quiz.cpp; читати відповіді з клавіатури й друкувати кількість правильних.
2. Базовий рівень. Створити консольну програму з модулями quiz.questions та quiz.scoring. Питання з правильними відповідями задано в коді, відповіді користувача читати з клавіатури; за правильну відповідь нараховувати 2 бали, за неправильну – 0; друкувати результат кожного питання й підсумок.
3. Високий рівень. Створити модулі завантаження питань, сеансу та звіту. Файл задається аргументом і містить пари рядків питання/відповідь; відповіді користувача читати з клавіатури. Друкувати бали та відсоток правильних; тестувати непарну кількість рядків, порожній файл і точне правило нечутливості ASCII-літер до регістру.
Варіант 20. Поліноми
1. Початковий рівень. Створити консольну програму. Зчитати три коефіцієнти й x, обчислити a·x²+b·x+c. Винести функцію в polynomial.h/polynomial.cpp, вивести значення.
2. Базовий рівень. Створити модуль polynomial із шаблонною функцією схеми Горнера для арифметичних типів. Коефіцієнти задати в коді для int і double, x зчитати з клавіатури; друкувати два результати.
3. Високий рівень. Створити модуль polynomial з розділами model та evaluation і концептом допустимого числового типу. Консольний клієнт читає 1–20 коефіцієнтів і x, друкує значення та похідну в x. Окрема тестова ціль перевіряє сталий поліном, нульові коефіцієнти й негативний тест нечислового типу.
Варіант 21. Логер
1. Початковий рівень. Створити консольну програму. Зчитати рядок повідомлення. Винести форматування префікса INFO до log.h/log.cpp, надрукувати повідомлення з префіксом.
2. Базовий рівень. Створити модуль logging із рівнями info, warning та error. Зчитувати рівень і повідомлення до end, відхиляти невідомий рівень, друкувати послідовний номер і префікс.
3. Високий рівень. Створити модуль logging і два консольні клієнти, що використовують його без копіювання реалізації. Один читає повідомлення з клавіатури, другий – із текстового файла; обидва отримують --min-level і --help. Друкувати лише дозволені рівні, підсумувати кількість відкинутих записів; перевірити порожній файл та невідомий рівень.
Варіант 22. Облік студентів
1. Початковий рівень. Створити консольну програму. Зчитати ім’я студента та три оцінки 0–100. Клас Student винести в .h/.cpp, вивести середній бал і перевірити неправильну оцінку.
2. Базовий рівень. Створити модулі students.model та students.report. З клавіатури зчитати 1–20 студентів із кодом та середнім балом; друкувати рейтинг за спаданням бала, за рівності – за кодом.
3. Високий рівень. Створити бібліотеку моделі студентів, застосунок і тести в окремих цілях. Читати файл код;ім’я;бал, шлях задано аргументом; друкувати рейтинг і середнє групи. Перевіряти унікальність коду, діапазон бала й формат рядка; тести охоплюють рівні бали, ім’я з пробілами та порожню групу.
Варіант 23. Файловий індексатор
1. Початковий рівень. Створити консольну програму. Зчитати шлях каталогу. Винести отримання імен звичайних файлів у files.h/files.cpp, надрукувати імена у відсортованому порядку, помилки доступу пояснити.
2. Базовий рівень. Створити модулі files.scan та files.report. З аргументу отримати каталог, без рекурсії зібрати звичайні файли та їх розміри, вивести таблицю й загальний розмір; --help описує формат.
3. Високий рівень. Створити модулі рекурсивного обходу, фільтрації й звіту. Каталог та розширення передавати аргументами; символічні посилання не обходити. Вивести відносні шляхи й розміри, помилки доступу записати в stderr. Окрема тестова ціль створює тимчасове дерево з порожнім каталогом і перевіряє фільтр та підсумок.
Варіант 24. Мінітестовий набір
1. Початковий рівень. Створити консольну програму. Винести функцію check(bool) та лічильник відмов в окрему бібліотеку. Задати в коді три істинні й одну хибну умову, надрукувати кількість відмов і повернути код 1.
2. Базовий рівень. Створити модуль checks із перевіркою рівності та назвою тесту. Консольна програма запускає задані в коді тести суми й множення, друкує статус кожного та підсумок; успішне виконання повертає 0.
3. Високий рівень. Створити модуль checks і дві незалежні тестові цілі для бібліотек математичних функцій та рядків. Тести задані в коді, --filter обирає назву групи, --help друкує довідку. Звітувати про всі відмови без передчасного завершення; окремо перевірити порожній вибір і навмисно хибний очікуваний результат.
Варіант 25. Планувальник подій
1. Початковий рівень. Створити консольну програму. Зчитати дві хвилини початку подій 0–1439. Функцію порівняння винести в events.h/events.cpp, надрукувати, яка подія раніше або що час однаковий.
2. Базовий рівень. Створити модуль events для подій із назвою, початком і тривалістю у хвилинах. Зчитати 1–20 подій одного дня, відхиляти вихід за добу, друкувати їх у часовому порядку.
3. Високий рівень. Створити модулі events.model, events.conflicts та events.export. Дані читати з клавіатури до end, вихідний файл передавати аргументом; надрукувати конфліктні пари й записати відсортований розклад. Тести перевіряють дотик інтервалів, рівний початок і подію, що закінчується о 24:00.
Варіант 26. Одиниці довжини
1. Початковий рівень. Створити консольну програму. Зчитати невід’ємну довжину в метрах. Винести перетворення в сантиметри в units.h/units.cpp, вивести обидва значення з підписами.
2. Базовий рівень. Створити модуль units з окремими типами Meter та Kilometer і явними перетвореннями. З клавіатури зчитати значення та позначення m або km; друкувати результат у двох одиницях.
3. Високий рівень. Створити модуль units з розділами length та formatting і консольний клієнт. Аргументи задають число, вихідну й цільову одиниці m, km або cm; --help пояснює синтаксис. Відхиляти нечислові та нескінченні значення, виводити результат із трьома десятковими знаками; тести перевіряють нуль і зворотне перетворення.
Варіант 27. Кошик магазину
1. Початковий рівень. Створити консольну програму. Зчитати кількість товару та ціну в копійках. Функцію вартості винести в cart.h/cart.cpp, перевірити невід’ємність і вивести суму.
2. Базовий рівень. Створити статичну бібліотеку cart для позицій із кодом, кількістю й ціною. Дані зчитати з клавіатури до end; при сумі не менше 100000 копійок знижка 5 %, округлена вниз до копійки. Надрукувати суму, знижку й оплату.
3. Високий рівень. Створити статичну бібліотеку правил кошика, консольний клієнт і тести. Клієнт читає файл код кількість ціна, шлях задано аргументом; друкує чек зі знижкою 5 % від 100000 копійок. Виключити дубль коду з різною ціною; тести перевіряють поріг знижки, порожній кошик, переповнення суми та незмінність після відмови.
Варіант 28. Лабіринт
1. Початковий рівень. Створити консольну програму. Задати в коді карту 5×5 із символів . та #. Винести перевірку вільної клітини в maze.h/maze.cpp, зчитати координати й вивести результат.
2. Базовий рівень. Створити модулі maze.model та maze.search. З клавіатури читати карту 5×5, старт і фініш; пошук у ширину має вивести довжину найкоротшого маршруту або повідомити про відсутність.
3. Високий рівень. Створити модулі читання карти, пошуку й виведення. Шлях файла з прямокутною картою . та # і координати передавати аргументами; друкувати карту з маршрутом, стіни не змінювати. Тести перевіряють недосяжний фініш, однакові старт і фініш, неправильний символ та нерівні довжини рядків.
Варіант 29. Перевірка можливостей C++26
1. Початковий рівень. Створити консольну програму MSVC з окремим файлом функції звіту, без введення. Надрукувати _MSC_VER і _MSVC_LANG, записати команду збирання в README.
2. Базовий рівень. Створити модуль capabilities. Без введення надрукувати значення або відсутність макросів __cpp_pack_indexing, __cpp_lib_flat_map і __cpp_lib_execution; макроси бібліотеки перевіряти після <version>. Пояснити в звіті, чому старе execution не доводить підтримки senders.
3. Високий рівень. Створити CMake-проєкт із програмою звіту та окремими пробами доступності flat_map, індексації пакетів та inplace_vector. Непідтримуваний синтаксис вилучати умовами препроцесора або з цілей. Без введення друкувати версію, режим і результати проб; README містить точні команди та обмеження, тести не повинні вимагати недоступної можливості.
Варіант 30. Бюджет родини
1. Початковий рівень. Створити консольну програму. Зчитати дохід і витрату в копійках. Функцію залишку винести в budget.h/budget.cpp, відхилити від’ємні вхідні значення та надрукувати баланс зі знаком.
2. Базовий рівень. Створити модулі budget.model та budget.report. З клавіатури читати записи категорія сума_копійок до end, де додатна сума є доходом, від’ємна – витратою; друкувати підсумки категорій і загальний баланс.
3. Високий рівень. Створити модулі транзакцій, CSV-імпорту та звітів. Файл задано аргументом, рядок має формат категорія;сума_копійок без вкладених роздільників. Друкувати доходи, витрати й баланс за категоріями; помилки містять номер рядка й код 1. Окрема тестова ціль перевіряє порожній файл, від’ємний баланс і переповнення підсумку.
Порядок виконання та захисту роботи
- Випишіть вхідні дані, результати, помилки й інваріанти свого завдання.
- Складіть схему залежностей: бібліотека або модуль, консольний клієнт, тестова ціль. Залежності не повинні утворювати цикл.
- Реалізуйте інтерфейс і перевірте його самодостатність; реалізація має включати власний заголовок або належати тому самому іменованому модулю.
- Зберіть проєкт із чистого каталогу, запишіть версії MSVC і системи збирання. Переконайтеся, що немає залежності від старого IFC чи випадкової бібліотеки.
- Перевірте звичайні значення, межі й хоча б одну відмову. Поясніть, чому очікувані результати незалежні від коду реалізації.
- Збережіть початкові файли, тести та README у Git; виключіть результати збирання. У звіті наведіть команди, stdout, stderr і коди завершення.
- На захисті змініть одну реалізацію без зміни клієнтського API, перебудуйте проєкт і продемонструйте, що автоматичні перевірки проходять.