Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
У звіті визначте, який стан зберігається після кожної відмови.
Варіанти
Варіант 1. Номер навчальної картки
1. Початковий рівень. Створити консольну програму. Зчитати рядок із 16 десяткових цифр; вивести коректність контрольної суми Луна. Реальні платіжні дані не використовувати. Перевірити довжину й символи до обчислення; справа подвоювати кожну другу цифру, віднімати 9 від результату понад 9, сума має ділитися на 10. Для помилок кидати invalid_argument.
2. Базовий рівень. Створити консольну програму. Зчитати рядок із 16 десяткових цифр; вивести коректність контрольної суми Луна. Реальні платіжні дані не використовувати. Повернути std::expected<bool, Error> з кодами Length і Character; для суми Луна справа подвоювати кожну другу цифру, зменшувати значення понад 9 на 9, перевірити подільність суми на 10. Вивести назву помилки або результат.
3. Високий рівень. Створити консольну програму. Зчитати рядок із 16 десяткових цифр; вивести коректність контрольної суми Луна. Реальні платіжні дані не використовувати. Обробляти рядки до end через expected та and_then: довжина, цифри, сума Луна. Справа подвоювати кожну другу цифру та віднімати 9 від значень понад 9. Вивести результат кожного рядка й кількості помилок кожного виду; помилкова сума не має зупиняти серію.
Варіант 2. ISBN-13
1. Початковий рівень. Створити консольну програму. Зчитати 13 цифр ISBN без роздільників; вивести valid або причину відмови. Сума перших 12 цифр із вагами 1, 3 має разом з останньою цифрою ділитися на 10. Перевірити довжину та символи; перехопити invalid_argument за константним посиланням.
2. Базовий рівень. Створити консольну програму. Зчитати 13 цифр ISBN без роздільників; вивести valid або причину відмови. Сума перших 12 цифр із вагами 1, 3 має разом з останньою цифрою ділитися на 10. Повертати expected із кодом довжини, символу або контрольної цифри; надрукувати правильну контрольну цифру для некоректного номера.
3. Високий рівень. Створити консольну програму. Зчитати 13 цифр ISBN без роздільників; вивести valid або причину відмови. Сума перших 12 цифр із вагами 1, 3 має разом з останньою цифрою ділитися на 10. Зчитувати рядки до end; для кожного друкувати номер рядка і діагноз, далі підсумок. Через transform форматувати успіх; перевірити порожній рядок, літеру та неправильну контрольну цифру.
Варіант 3. Калькулятор RPN
1. Початковий рівень. Створити консольну програму. Зчитати рядок постфіксного виразу з дійсних чисел і токенів +, -, /; вивести результат або діагноз. Використати стек vector; перед операцією перевірити наявність двох операндів, а після виразу – рівно одного результату. Ділення на нуль відхиляти винятком.
2. Базовий рівень. Створити консольну програму. Зчитати рядок постфіксного виразу з дійсних чисел і токенів +, -, /; вивести результат або діагноз. Для невідомого токена, нестачі операндів і нульового дільника повертати expected з індексом токена; відхиляти нескінченні числа.
3. Високий рівень. Створити консольну програму. Зчитати рядок постфіксного виразу з дійсних чисел і токенів +, -, /; вивести результат або діагноз. Обробляти кілька виразів до end, зберігаючи історію лише успішних результатів. Невдала операція не змінює історію; вивести її наприкінці та перевірити відновлення після трьох різних помилок.
Варіант 4. Конвертер навчальних валют
1. Початковий рівень. Створити консольну програму. Зчитати суму та код UAH, USD або EUR; вивести суму в UAH за заданими в коді навчальними курсами 1, 40, 45. Це фіксована модель, а не поточні котирування. Невідому валюту й від’ємну або нескінченну суму відхиляти invalid_argument.
2. Базовий рівень. Створити консольну програму. Зчитати суму та код UAH, USD або EUR; вивести суму в UAH за заданими в коді навчальними курсами 1, 40, 45. Це фіксована модель, а не поточні котирування. Розділити пошук курсу і перевірку суми у функції expected та з’єднати and_then; вивести точний код помилки.
3. Високий рівень. Створити консольну програму. Зчитати суму та код UAH, USD або EUR; вивести суму в UAH за заданими в коді навчальними курсами 1, 40, 45. Це фіксована модель, а не поточні котирування. Зчитати пакет операцій та перевірити його повністю до підрахунку загальної суми. За будь-якої помилки не публікувати частковий підсумок; вивести номер невдалого запису й перевірити строгий контракт.
Варіант 5. Розбір часу
1. Початковий рівень. Створити консольну програму. Зчитати час у форматі hh:mm; вивести хвилини від початку доби. Години 00–23, хвилини 00–59, довжина рівно 5. Кидати invalid_argument для формату і out_of_range для значення; повторювати введення після помилки до успіху або EOF.
2. Базовий рівень. Створити консольну програму. Зчитати час у форматі hh:mm; вивести хвилини від початку доби. Години 00–23, хвилини 00–59, довжина рівно 5. Повернути expected з кодами Format, Hour, Minute; друкувати код, не викликаючи value для помилки.
3. Високий рівень. Створити консольну програму. Зчитати час у форматі hh:mm; вивести хвилини від початку доби. Години 00–23, хвилини 00–59, довжина рівно 5. Зчитати початок і кінець інтервалу; через and_then перевірити обидва часи та порядок у межах однієї доби. Вивести тривалість або точний етап відмови; перевірити рівні часи й 23:59.
Варіант 6. Безпечна арифметика
1. Початковий рівень. Створити консольну програму. Зчитати два значення int; вивести їхню суму або overflow. Перевірку виконати до потенційно небезпечної операції. Використати numeric_limits і розгалуження за знаком другого доданка; кидати overflow_error.
2. Базовий рівень. Створити консольну програму. Зчитати два значення int; вивести їхню суму або overflow. Перевірку виконати до потенційно небезпечної операції. Повертати std::expected<int, Overflow> для додавання і віднімання; зчитати також знак операції та вивести результат або код.
3. Високий рівень. Створити консольну програму. Зчитати два значення int; вивести їхню суму або overflow. Перевірку виконати до потенційно небезпечної операції. Реалізувати ланцюжок додавання, віднімання й множення int із expected та перевірками до виконання операцій. Зчитати початкове число й команди до end, зберігати попередній результат при відмові; перевірити INT_MIN та INT_MAX.
Варіант 7. Реєстрація користувача
1. Початковий рівень. Створити консольну програму. Зчитати логін, email і навчальний пароль трьома рядками; вивести accepted або діагноз. Логін містить 3–12 ASCII-літер або цифр; навчальний формат email – рівно один @ та непорожні частини; пароль – не менше 8 ASCII-символів. Не друкувати пароль. Для порушення правил використати invalid_argument; вивести першу знайдену причину.
2. Базовий рівень. Створити консольну програму. Зчитати логін, email і навчальний пароль трьома рядками; вивести accepted або діагноз. Логін містить 3–12 ASCII-літер або цифр; навчальний формат email – рівно один @ та непорожні частини; пароль – не менше 8 ASCII-символів. Не друкувати пароль. Окремі валідатори повертають expected; поєднати and_then й повідомити першу помилку, не зберігаючи невалідний запис.
3. Високий рівень. Створити консольну програму. Зчитати логін, email і навчальний пароль трьома рядками; вивести accepted або діагноз. Логін містить 3–12 ASCII-літер або цифр; навчальний формат email – рівно один @ та непорожні частини; пароль – не менше 8 ASCII-символів. Не друкувати пароль. Зчитати кількість і пакет реєстрацій за наведеними правилами, додатково перевірити унікальність логінів. Підготувати новий реєстр у тимчасовому контейнері й замінити основний лише після успіху всього пакета; вивести логіни або номер помилки.
Варіант 8. Оцінки студентів
1. Початковий рівень. Створити консольну програму. Зчитати кількість оцінок і цілі оцінки 0–100; вивести середнє з двома десятковими знаками або помилку. Нульову кількість та оцінку поза діапазоном відхиляти власним GradeError, похідним від runtime_error.
2. Базовий рівень. Створити консольну програму. Зчитати кількість оцінок і цілі оцінки 0–100; вивести середнє з двома десятковими знаками або помилку. Функція середнього повертає expected; зберегти індекс першої неправильної оцінки в помилці й надрукувати його.
3. Високий рівень. Створити консольну програму. Зчитати кількість оцінок і цілі оцінки 0–100; вивести середнє з двома десятковими знаками або помилку. Після початкового списку приймати команди заміни оцінки за індексом до end. Невдала заміна не змінює список; після кожної команди вивести середнє або діагноз. Перевірити порожній список і крайні оцінки.
Варіант 9. Покази датчика
1. Початковий рівень. Створити консольну програму. Зчитати рядки до end: число температури або missing; вивести для кожного значення, відсутність або помилку. Діапазон навчального датчика від -50 до 150 Celsius. Відсутність подати optional, значення поза діапазоном відхилити винятком; missing не є числом 0.
2. Базовий рівень. Створити консольну програму. Зчитати рядки до end: число температури або missing; вивести для кожного значення, відсутність або помилку. Діапазон навчального датчика від -50 до 150 Celsius. Повернути expected з optional усередині: помилка синтаксису відрізняється від відсутнього вимірювання. Вивести окремі лічильники станів.
3. Високий рівень. Створити консольну програму. Зчитати рядки до end: число температури або missing; вивести для кожного значення, відсутність або помилку. Діапазон навчального датчика від -50 до 150 Celsius. Розрахувати середнє лише наявних валідних показів; діагнози містять номер рядка. Перевірити серію лише missing, NaN, нескінченність і граничні значення; для відсутнього середнього використати optional.
Варіант 10. Бронювання квитків
1. Початковий рівень. Створити консольну програму. У коді задати рейси A і B по 5 місць. Зчитувати рейс і номер місця 1–5 до end; виводити підтвердження або причину відмови. Для невідомого рейсу, індексу і зайнятого місця кидати різні стандартні винятки.
2. Базовий рівень. Створити консольну програму. У коді задати рейси A і B по 5 місць. Зчитувати рейс і номер місця 1–5 до end; виводити підтвердження або причину відмови. Повернути expected із власним enum помилок; після кожної команди друкувати число вільних місць.
3. Високий рівень. Створити консольну програму. У коді задати рейси A і B по 5 місць. Зчитувати рейс і номер місця 1–5 до end; виводити підтвердження або причину відмови. Зчитувати пакет місць одного бронювання, відхиляти повтори та зайняті місця. Застосовувати пакет атомарно через підготовку копії; після відмови довести незмінність усіх місць і вивести фінальну схему.
Варіант 11. Списання зі складу
1. Початковий рівень. Створити консольну програму. Задати в коді залишки товарів A=10, B=20. Зчитувати код товару і додатну кількість до end; виводити залишки або діагноз. Недостатній залишок відхиляти власним StockError; не змінювати кількість перед перевіркою.
2. Базовий рівень. Створити консольну програму. Задати в коді залишки товарів A=10, B=20. Зчитувати код товару і додатну кількість до end; виводити залишки або діагноз. Операція повертає expected з UnknownItem, InvalidQuantity, InsufficientStock; друкувати назву коду.
3. Високий рівень. Створити консольну програму. Задати в коді залишки товарів A=10, B=20. Зчитувати код товару і додатну кількість до end; виводити залишки або діагноз. Зчитати пакет списань, включно з повторними кодами; перевірити сумарну потребу й виконати весь пакет або жодного списання. Вивести залишки та журнал відмов; перевірити помилку останнього рядка.
Варіант 12. Торговий автомат
1. Початковий рівень. Створити консольну програму. Ціна товару 7 грн, запас 3 одиниці, початкова каса містить по дві монети 1, 2, 5 грн. Зчитати кількість внесених монет та їхні номінали; вивести товар і решту або причину відмови. Для видачі решти доступні каса та внесені монети; при відмові внесені монети повертаються, каса і запас не змінюються. Приймати лише монети 1, 2, 5, перевірити достатність оплати; за помилки вивести суму повернення.
2. Базовий рівень. Створити консольну програму. Ціна товару 7 грн, запас 3 одиниці, початкова каса містить по дві монети 1, 2, 5 грн. Зчитати кількість внесених монет та їхні номінали; вивести товар і решту або причину відмови. Для видачі решти доступні каса та внесені монети; при відмові внесені монети повертаються, каса і запас не змінюються. Повернути expected з кодами Coin, Funds, Change, Empty; підібрати решту перебором доступних монет, не покладаючись на жадібний алгоритм.
3. Високий рівень. Створити консольну програму. Ціна товару 7 грн, запас 3 одиниці, початкова каса містить по дві монети 1, 2, 5 грн. Зчитати кількість внесених монет та їхні номінали; вивести товар і решту або причину відмови. Для видачі решти доступні каса та внесені монети; при відмові внесені монети повертаються, каса і запас не змінюються. Підготувати нові касу й запас окремо, замінити стан, лише якщо продаж і решта можливі. Обробляти покупки до end; після відмови повертати внесені монети та друкувати незмінні залишки.
Варіант 13. Безпечна модель ліфта
1. Початковий рівень. Створити консольну програму. Зчитати початковий поверх 1–9, цільовий поверх і масу 0–400 кг; вивести кінцевий поверх або помилку. Перевірити поверхи й масу до зміни стану; кидати out_of_range.
2. Базовий рівень. Створити консольну програму. Зчитати початковий поверх 1–9, цільовий поверх і масу 0–400 кг; вивести кінцевий поверх або помилку. Використати expected з Floor, Weight, Overload; повертати незмінний початковий поверх при помилці.
3. Високий рівень. Створити консольну програму. Зчитати початковий поверх 1–9, цільовий поверх і масу 0–400 кг; вивести кінцевий поверх або помилку. Обробляти послідовність викликів до end, рахувати пройдені поверхи лише успішних поїздок. Журнал містить номер команди й код відмови; перевірити, що перевантаження не змінює поверх.
Варіант 14. Римські числа
1. Початковий рівень. Створити консольну програму. Зчитати римське число у верхньому регістрі; вивести десяткове значення або позицію помилки. Підтримати символи I,V,X та числа 1–39; дозволити віднімальні пари лише IV і IX, перевірити канонічний запис зворотним форматуванням.
2. Базовий рівень. Створити консольну програму. Зчитати римське число у верхньому регістрі; вивести десяткове значення або позицію помилки. Підтримати числа 1–3999, символи I,V,X,L,C,D,M та пари IV,IX,XL,XC,CD,CM; expected містить індекс першого незбігу з канонічним форматуванням.
3. Високий рівень. Створити консольну програму. Зчитати римське число у верхньому регістрі; вивести десяткове значення або позицію помилки. Підтримати числа 1–3999, символи I,V,X,L,C,D,M та віднімальні пари IV,IX,XL,XC,CD,CM. Обробляти рядки до end, розділити перевірку символів, обчислення й канонічність через and_then. Надрукувати результати та кількість відмов; перевірити IIII, IC, порожній рядок і MMMCMXCIX.
Варіант 15. Координати GPS
1. Початковий рівень. Створити консольну програму. Зчитати рядок latitude,longitude з двома скінченними числами; вивести нормалізовану пару або діагноз. Широта від -90 до 90, довгота від -180 до 180. Відхилити пропущену кому, зайвий текст і неправильний діапазон через invalid_argument.
2. Базовий рівень. Створити консольну програму. Зчитати рядок latitude,longitude з двома скінченними числами; вивести нормалізовану пару або діагноз. Широта від -90 до 90, довгота від -180 до 180. Повернути expected з кодом і назвою поля; перевіряти повне споживання числового токена.
3. Високий рівень. Створити консольну програму. Зчитати рядок latitude,longitude з двома скінченними числами; вивести нормалізовану пару або діагноз. Широта від -90 до 90, довгота від -180 до 180. Приймати рядки до end та будувати список лише валідних точок; друкувати індекс рядка, код помилки і підсумкову кількість точок. Перевірити NaN, нескінченність, обидві межі та зайву кому.
Варіант 16. Розмірності матриць
1. Початковий рівень. Створити консольну програму. Зчитати розміри й елементи двох прямокутних матриць дійсних чисел, кожна до 10×10; вивести результат операції або помилку. Додавати лише матриці однакової форми; невідповідність відхиляти invalid_argument.
2. Базовий рівень. Створити консольну програму. Зчитати розміри й елементи двох прямокутних матриць дійсних чисел, кожна до 10×10; вивести результат операції або помилку. Множити матриці за сумісних внутрішніх розмірів; функція повертає expected із повідомленням фактичних форм.
3. Високий рівень. Створити консольну програму. Зчитати розміри й елементи двох прямокутних матриць дійсних чисел, кожна до 10×10; вивести результат операції або помилку. Зчитати також команду add або multiply. Обчислювати в тимчасовій матриці, відхиляти нескінченні вхідні та вихідні значення, не змінюючи операнди. Вивести результат або контекст помилки й перевірити незмінність входів.
Варіант 17. Квадратне рівняння
1. Початковий рівень. Створити консольну програму. Зчитати скінченні коефіцієнти a, b, c рівняння; вивести дійсні корені або причину їх відсутності. Для a=0 кидати invalid_argument, для від’ємного дискримінанта – domain_error; обробити подвійний корінь.
2. Базовий рівень. Створити консольну програму. Зчитати скінченні коефіцієнти a, b, c рівняння; вивести дійсні корені або причину їх відсутності. Повернути expected з кодами NotQuadratic, NoRealRoots, NumericOverflow; перевірити скінченність дискримінанта до sqrt.
3. Високий рівень. Створити консольну програму. Зчитати скінченні коефіцієнти a, b, c рівняння; вивести дійсні корені або причину їх відсутності. Зчитувати трійки до EOF, для кожної виводити корені та нев’язку підстановки або код помилки. Використати чисельно стійку формулу через q і окремо обробити q=0; додати тести подвійного кореня та сильно різних масштабів.
Варіант 18. Запис шахового ходу
1. Початковий рівень. Створити консольну програму. Зчитати рядок на зразок e2-e4; вивести координати початкової й кінцевої клітинок або діагноз. Це перевірка запису, а не всіх шахових правил. Перевірити довжину 5, дефіс, літери a–h і цифри 1–8; кидати invalid_argument.
2. Базовий рівень. Створити консольну програму. Зчитати рядок на зразок e2-e4; вивести координати початкової й кінцевої клітинок або діагноз. Це перевірка запису, а не всіх шахових правил. Повернути expected з позицією хибного символу, відхиляти однакові клітинки.
3. Високий рівень. Створити консольну програму. Зчитати рядок на зразок e2-e4; вивести координати початкової й кінцевої клітинок або діагноз. Це перевірка запису, а не всіх шахових правил. Зчитати тип K або N та запис ходу; після синтаксичного розбору через and_then перевірити геометрію короля або коня. Вивести legal або точну причину; інші фігури й стан дошки не моделювати.
Варіант 19. Масштабування рецепта
1. Початковий рівень. Створити консольну програму. Зчитати початкове й потрібне число порцій, масу інгредієнта та одиницю g або kg; вивести потрібну масу в грамах або діагноз. Порції мають бути додатними, маса невід’ємною і скінченною; помилки відхиляти винятками.
2. Базовий рівень. Створити консольну програму. Зчитати початкове й потрібне число порцій, масу інгредієнта та одиницю g або kg; вивести потрібну масу в грамах або діагноз. Пошук множника одиниці повертає optional, розрахунок – expected; невідома одиниця не перетворюється на нуль.
3. Високий рівень. Створити консольну програму. Зчитати початкове й потрібне число порцій, масу інгредієнта та одиницю g або kg; вивести потрібну масу в грамах або діагноз. Зчитати список інгредієнтів і перевірити весь рецепт перед друком масштабованої таблиці. Повернути expected з номером рядка, відхилити переповнення результату; перевірити, що за помилки таблиця не друкується частково.
Варіант 20. Навчальний тариф
1. Початковий рівень. Створити консольну програму. Зчитати кількість хвилин і мегабайтів; вивести рахунок у копійках. Базова плата 10000 коп., включено 100 хв і 1000 МБ, перевищення коштує 50 коп./хв і 2 коп./МБ. Відхилити від’ємні значення і значення понад мільйон винятком.
2. Базовий рівень. Створити консольну програму. Зчитати кількість хвилин і мегабайтів; вивести рахунок у копійках. Базова плата 10000 коп., включено 100 хв і 1000 МБ, перевищення коштує 50 коп./хв і 2 коп./МБ. Розділити валідацію й обчислення через expected; вивести складові рахунку та код помилки.
3. Високий рівень. Створити консольну програму. Зчитати кількість хвилин і мегабайтів; вивести рахунок у копійках. Базова плата 10000 коп., включено 100 хв і 1000 МБ, перевищення коштує 50 коп./хв і 2 коп./МБ. Зчитати пакет абонентів із ідентифікаторами, відхиляти повтори; вивести рахунки валідних рядків і окремі діагнози невалідних. Перевірити обидві межі включених пакетів і значення на одиницю більше.
Варіант 21. Номер телефону
1. Початковий рівень. Створити консольну програму. Зчитати навчальний номер у форматі +380 і 9 цифр; вивести нормалізований номер або код помилки. Дозволити пробіли й дефіси між цифрами, вилучити їх, перевірити префікс і довжину; решту символів відхилити.
2. Базовий рівень. Створити консольну програму. Зчитати навчальний номер у форматі +380 і 9 цифр; вивести нормалізований номер або код помилки. Повернути expected із enum помилок Character, Prefix, Length; друкувати зрозуміле повідомлення для кожного коду.
3. Високий рівень. Створити консольну програму. Зчитати навчальний номер у форматі +380 і 9 цифр; вивести нормалізований номер або код помилки. Обробляти рядки до end, не додавати повторні нормалізовані номери. З’єднати нормалізацію та перевірку через and_then, вивести унікальні номери і статистику причин відмов.
Варіант 22. Навчальна кредитна заявка
1. Початковий рівень. Створити консольну програму. Зчитати вік, місячний дохід і бажаний платіж у цілих гривнях; вивести результат заданої навчальної моделі. Умови: вік 18–70, дохід додатний, платіж додатний і не перевищує 30 % доходу; це не фінансова рекомендація. Відокремити некоректні вхідні значення від відмови за правилом моделі; некоректність повідомляти винятком.
2. Базовий рівень. Створити консольну програму. Зчитати вік, місячний дохід і бажаний платіж у цілих гривнях; вивести результат заданої навчальної моделі. Умови: вік 18–70, дохід додатний, платіж додатний і не перевищує 30 % доходу; це не фінансова рекомендація. Повернути expected із кодами Age, Income, Payment, Ratio; перевірити співвідношення без цілочисельного переповнення.
3. Високий рівень. Створити консольну програму. Зчитати вік, місячний дохід і бажаний платіж у цілих гривнях; вивести результат заданої навчальної моделі. Умови: вік 18–70, дохід додатний, платіж додатний і не перевищує 30 % доходу; це не фінансова рекомендація. Опрацювати пакет заявок, зібрати всі порушені правила для кожного запису, надрукувати пояснення без персональних даних. Перевірити рівно 30 % та значення на гривню більше; журнал не має приховувати відмови.
Варіант 23. Розклад автобусів
1. Початковий рівень. Створити консольну програму. Зчитувати рядки route hh:mm до end; вивести валідні записи та діагнози з номерами рядків. Route – непорожній ASCII-код, час у межах доби. Розбирати кожен рядок у try/catch та продовжувати після помилки; зайві токени відхиляти.
2. Базовий рівень. Створити консольну програму. Зчитувати рядки route hh:mm до end; вивести валідні записи та діагнози з номерами рядків. Route – непорожній ASCII-код, час у межах доби. Функція розбору повертає expected, перетворення в хвилини виконується через transform; сортувати валідні записи за часом.
3. Високий рівень. Створити консольну програму. Зчитувати рядки route hh:mm до end; вивести валідні записи та діагнози з номерами рядків. Route – непорожній ASCII-код, час у межах доби. Заборонити повтори пари маршрут/час, а при однаковому часі сортувати за маршрутом. Вивести очищений розклад і статистику Format, Time, Duplicate; перевірити порожню серію й усі невалідні рядки.
Варіант 24. Паливний бак
1. Початковий рівень. Створити консольну програму. Зчитати місткість бака, початковий обсяг і серію заправок до end; виводити обсяг після кожної операції або причину відмови. Приймати лише скінченні числа, додатну місткість і невід’ємні обсяги; перевищення місткості відхиляти винятком.
2. Базовий рівень. Створити консольну програму. Зчитати місткість бака, початковий обсяг і серію заправок до end; виводити обсяг після кожної операції або причину відмови. Повертати expected з кодами InvalidAmount, Capacity, InitialState; невдала заправка залишає обсяг незмінним.
3. Високий рівень. Створити консольну програму. Зчитати місткість бака, початковий обсяг і серію заправок до end; виводити обсяг після кожної операції або причину відмови. Додати команди fill і consume, вести журнал лише успішних змін. Обчислення нового обсягу виконувати до фіксації; вивести фінальний баланс літрів і кількість відмов, перевірити точне спорожнення й заповнення.
Варіант 25. Середній бал з пастками
1. Початковий рівень. Створити консольну програму. Зчитати кількість і оцінки 0–100; вивести середнє або повідомлення про некоректні дані. У безпечній версії навмисно використати цілочисельне ділення для демонстрації логічної помилки. Знайти її через Watch на даних 2, 3, виправити й вивести обидва результати; невизначену поведінку не запускати.
2. Базовий рівень. Створити консольну програму. Зчитати кількість і оцінки 0–100; вивести середнє або повідомлення про некоректні дані. Підготувати приклад з пропущеною останньою оцінкою без виходу за межі. Умовною точкою зупинки виявити помилку, виправити та додати assert для контрольного набору; вивести правильне середнє.
3. Високий рівень. Створити консольну програму. Зчитати кількість і оцінки 0–100; вивести середнє з дробовою частиною або повідомлення про некоректні дані. Перевірити функцію середнього проти незалежної еталонної суми на наборах у коді: один елемент, усі нулі, усі 100, дробове середнє. Надрукувати кількість невдалих тестів, повернути ненульовий код при відмові; валідація введення має працювати і з NDEBUG.
Варіант 26. Температурний перетворювач
1. Початковий рівень. Створити консольну програму. Зчитати температуру Celsius; вивести Kelvin як C+273.15 або помилку. Значення має бути скінченним і не нижчим за -273.15. Перевірити передумову звичайним if і кинути domain_error; не покладатися лише на assert.
2. Базовий рівень. Створити консольну програму. Зчитати температуру Celsius; вивести Kelvin як C+273.15 або помилку. Значення має бути скінченним і не нижчим за -273.15. Повернути expected з InvalidNumber та BelowAbsoluteZero; через transform підготувати форматований результат.
3. Високий рівень. Створити консольну програму. Зчитати температуру Celsius; вивести Kelvin як C+273.15 або помилку. Значення має бути скінченним і не нижчим за -273.15. Обробляти серію до EOF, зберігати лише успіхи й друкувати статистику відмов. Перевірити -273.15, 0, 100, NaN та нескінченність; числові результати порівнювати з допуском, а не точною рівністю.
Варіант 27. Поліном із рядка
1. Початковий рівень. Створити консольну програму. Зчитати поліном без пробілів; вивести коефіцієнти за степенями або позицію синтаксичної помилки. Підтримати лише ax+b з явно записаними цілими a і b; відхиляти зайві символи через invalid_argument.
2. Базовий рівень. Створити консольну програму. Зчитати поліном без пробілів; вивести коефіцієнти за степенями або позицію синтаксичної помилки. Підтримати суму членів ax^n і констант, n від 0 до 9, цілі коефіцієнти до 1000 за модулем; expected містить позицію помилки, однакові степені підсумовуються.
3. Високий рівень. Створити консольну програму. Зчитати поліном без пробілів; вивести коефіцієнти за степенями або позицію синтаксичної помилки. Розібрати суму членів ax^n і констант: n від 0 до 9, явно записані цілі коефіцієнти до 1000 за модулем, однакові степені підсумовуються. Зчитати скінченне x і обчислити схему Горнера через and_then. Відрізнити синтаксис, діапазон коефіцієнта та нескінченний результат; вивести нормалізовані коефіцієнти й значення.
Варіант 28. Банківський переказ
1. Початковий рівень. Створити консольну програму. Задати навчальні рахунки A=10000 і B=5000 копійок. Зчитати відправника, отримувача й додатну суму; вивести залишки або діагноз. Перевірити існування рахунків, різні ідентифікатори та достатність коштів перед змінами; відмову подати винятком.
2. Базовий рівень. Створити консольну програму. Задати навчальні рахунки A=10000 і B=5000 копійок. Зчитати відправника, отримувача й додатну суму; вивести залишки або діагноз. Поєднати перевірки через expected та and_then, надрукувати код помилки через or_else; після відмови залишки незмінні.
3. Високий рівень. Створити консольну програму. Задати навчальні рахунки A=10000 і B=5000 копійок. Зчитати відправника, отримувача й додатну суму; вивести залишки або діагноз. Зчитати пакет переказів, застосувати його до тимчасової копії рахунків і зафіксувати лише повний успіх. Вивести залишки та індекс помилки, перевірити збереження загальної суми й відмову останньої операції.
Варіант 29. Екзаменаційна відомість
1. Початковий рівень. Створити консольну програму. Зчитувати пари навчальний-ID оцінка до end; оцінка 0–100. Вивести валідні записи й діагностику помилок. Для неправильної оцінки кидати runtime_error з ID; ловити за const-посиланням і продовжувати серію.
2. Базовий рівень. Створити консольну програму. Зчитувати пари навчальний-ID оцінка до end; оцінка 0–100. Вивести валідні записи й діагностику помилок. Додати власний виняток із номером рядка та source_location місця виявлення; друкувати повідомлення і назву функції, не залежати від абсолютного шляху.
3. Високий рівень. Створити консольну програму. Зчитувати пари навчальний-ID оцінка до end; оцінка 0–100. Вивести валідні записи й діагностику помилок. У місці виявлення захоплювати std::stacktrace, якщо його підтримує встановлена бібліотека; інакше явно повідомити недоступність і використати source_location. Зберегти trace до розкручування стека, показати вкладені parse/validate/process і перевірити, що після помилки обробка триває.
Варіант 30. Парковка
1. Початковий рівень. Створити консольну програму. Задати місткість 3 місця; зчитувати команди in ID та out ID до end, виводити зайняті місця або помилку. Відхилити повторний в’їзд, виїзд відсутнього авто й переповнення власним ParkingError.
2. Базовий рівень. Створити консольну програму. Задати місткість 3 місця; зчитувати команди in ID та out ID до end, виводити зайняті місця або помилку. Повертати expected з Duplicate, Unknown, Full; після кожної команди друкувати зайнятість, не змінюючи стан при відмові.
3. Високий рівень. Створити консольну програму. Задати місткість 3 місця; зчитувати команди in ID та out ID до end, виводити зайняті місця або помилку. Обробити пакет команд на копії стану з фіксацією лише за повного успіху. Вивести кінцевий список і номер відмови; перевірити пакет із помилкою останньої команди та збереження початкової зайнятості.
Порядок виконання та захисту
- Запишіть відтворюваний вхід і очікувану поведінку.
- Відокремте помилку введення від внутрішнього дефекту.
- Поставте точку зупинки біля першої розбіжності.
- Перевірте типи, значення та стек викликів.
- Реалізуйте типізоване повідомлення про відмову.
- Перевірте нормальний, граничний і кожний помилковий шлях.
- Збережіть фактичні результати, виправлення й коміт.