Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Калькулятор часу
1. Початковий рівень. Створити консольну програму, яка запитує два значення часу у форматі гг:хх, перетворює їх методом TimeOnly.Parse у блоці try і виводить їх суму й різницю у хвилинах, а в разі FormatException виводить повідомлення про некоректний формат.
2. Базовий рівень. Створити консольну програму, яка в циклі зчитує вирази виду гг:хх + гг:хх або гг:хх - хх хв, обчислює результат і повторює запит у разі помилки. Розбір виконує метод, що генерує FormatException з поясненням і позицією помилки, а години поза 0–23 чи хвилини поза 0–59 спричиняють ArgumentOutOfRangeException; кожен тип винятку обробляється окремим блоком catch.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обчислює вирази з тривалостями й моментами часу з аргументів (08:15 + 2h30m - 45m), підтримує перехід через північ з опцією --wrap і без неї генерує OverflowException. Помилки розбору виводяться в Console.Error із позицією символу та кодом завершення 2, переповнення – з кодом 3; опція --debug виводить проміжні значення через Debug.WriteLine і перевіряє інваріант «результат у межах доби» Debug.Assert.
Варіант 2. Розбір дат
1. Початковий рівень. Створити консольну програму, яка запитує дату у форматі дд.ММ.рррр, перетворює її методом DateTime.ParseExact у блоці try і виводить день тижня; у разі FormatException програма виводить повідомлення з прикладом правильного формату.
2. Базовий рівень. Створити консольну програму, яка дає користувачеві до трьох спроб увести дату народження, для кожної невдалої спроби виводить причину (некоректний формат, дата в майбутньому, вік понад 120 років; дві останні перевірки генерують ArgumentOutOfRangeException в окремому методі), а після трьох невдалих спроб завершується з кодом 1.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує дати зі стандартного введення в кількох форматах (дд.ММ.рррр, рррр-ММ-дд, д MMMM рррр українською), нормалізує їх до ISO 8601 і пропускає некоректні рядки, записуючи в Console.Error номер рядка, текст і тип винятку. Наприкінці виводиться підсумок: кількість успішних і помилкових рядків за типами помилок; код завершення – 0 або 1. Опція --strict зупиняє обробку на першій помилці з кодом 2.
Варіант 3. Замовлення піци
1. Початковий рівень. Створити консольну програму, яка запитує розмір піци (S, M, L) і кількість, визначає ціну виразом switch, у гілці _ якого генерується ArgumentException, а основна програма перехоплює виняток і виводить повідомлення про невідомий розмір.
2. Базовий рівень. Створити консольну програму оформлення замовлення піци: у циклі запитує позиції розмір кількість добавки, перевіряє їх методом AddItem, який генерує ArgumentOutOfRangeException для кількості поза 1–20 і ArgumentException для невідомої добавки; помилкова позиція не додається, а в блоці finally щоразу виводиться поточна сума.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє замовлення зі стандартного введення (номер;позиції;адреса;час), перевіряє меню, мінімальну суму доставки і час роботи піцерії, створює власний клас винятку OrderValidationException з переліком усіх порушень замовлення і виводить звіт «прийнято / відхилено з причинами». Відхилені замовлення – у Console.Error; коди завершення: 0, 1 (є відхилені), 2 (помилка формату введення).
Варіант 4. Касовий апарат
1. Початковий рівень. Створити консольну програму, у якій товари задано паралельними масивами кодів і цін, а метод FindPrice(int code) генерує InvalidOperationException для невідомого коду; програма запитує коди до порожнього рядка й виводить суму чека, перехоплюючи винятки.
2. Базовий рівень. Створити консольну програму касового апарата з командами add код кількість, remove код, pay сума, cancel: помилки команд обробляються окремими блоками catch, оплата меншою сумою спричиняє InvalidOperationException, а блок finally після кожної команди виводить стан чека; команда cancel очищує чек.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє журнал касових операцій зі стандартного введення: відкриття чека, додавання товарів, знижки, оплата, повернення. Кожен чек обробляється в try, а в разі помилки (невідомий товар, оплата без відкритого чека, від’ємна сума) чек скасовується в finally з поверненням залишків. Звіт зміни виводиться таблицею, помилки – у Console.Error з номером рядка; коди завершення: 0, 1, 2.
Варіант 5. Реєстрація користувача
1. Початковий рівень. Створити консольну програму, яка запитує логін (3–16 латинських літер і цифр) та вік і методом Register(string login, int age) перевіряє дані помічниками ArgumentException.ThrowIfNullOrWhiteSpace і ArgumentOutOfRangeException.ThrowIfLessThan, виводячи повідомлення перехопленого винятку.
2. Базовий рівень. Створити консольну програму реєстрації, яка перевіряє логін, e-mail, пароль і вік окремими методами, що генерують ArgumentException з назвою поля (ParamName), збирає всі помилки в масив рядків замість завершення на першій і виводить їх переліком; форма повторюється, доки всі поля не будуть коректними.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який перевіряє заявки на реєстрацію зі стандартного введення у форматі CSV, використовуючи власний клас винятку ValidationException із властивостями Field і Value, перевіряє унікальність логінів і e-mail без урахування регістру та виводить звіт за полями (кількість помилок кожного типу). Некоректні рядки CSV – у Console.Error; коди завершення: 0, 1, 2.
Варіант 6. Перевірка ISBN
1. Початковий рівень. Створити консольну програму з методом int CheckDigitIsbn13(string first12), який генерує FormatException, якщо рядок містить не 12 цифр, і програмою, що для введеного рядка виводить контрольну цифру або повідомлення перехопленого винятку.
2. Базовий рівень. Створити консольну програму, яка в циклі зчитує ISBN-10 або ISBN-13 з дефісами чи без, перевіряє формат і контрольну цифру (для ISBN-10 цифра X допустима лише в кінці), генерує FormatException для неправильного формату й InvalidOperationException для неправильної контрольної цифри та виводить результат перевірки й перетворення ISBN-10 на ISBN-13.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який перевіряє ISBN зі стандартного введення й аргументів, з опціями --convert 13|10, --format (розстановка дефісів групами) і --fix (пошук однієї неправильної цифри). Кожен ISBN обробляється в окремому try, помилки групуються за типом винятку й виводяться в Console.Error, а за опцією --break-on-error програма завершується на першій помилці з кодом 2.
Варіант 7. Нарахування стипендії
1. Початковий рівень. Створити консольну програму з методом decimal Scholarship(double average), який генерує ArgumentOutOfRangeException для середнього бала поза 0–100, і програмою, що для трьох студентів (дані задані в програмі) виводить стипендію або повідомлення про помилку.
2. Базовий рівень. Створити консольну програму, яка зчитує оцінки студента рядком через пробіл, розбирає їх методом ParseGrades, обчислює середній бал методом Average (генерує InvalidOperationException для порожнього списку) і стипендію; винятки вкладених методів обгортаються в FormatException з InnerException, а програма виводить обидва повідомлення.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який нараховує стипендії групі зі стандартного введення (прізвище;оцінки;пільги) за правилами з опцій --min-average, --base, --bonus. Помилки кожного рядка обгортаються у виняток із номером рядка та InnerException, звіт містить таблицю нарахувань і розділ «Помилки» з ланцюжками внутрішніх винятків. Коди завершення: 0, 1 (є помилки), 2 (некоректні опції).
Варіант 8. Матричний калькулятор
1. Початковий рівень. Створити консольну програму з методом int[,] Add(int[,] a, int[,] b), який генерує ArgumentException для матриць різних розмірів, і програмою, що додає дві задані в програмі пари матриць, перехоплюючи виняток для другої пари.
2. Базовий рівень. Створити консольну програму-меню матричного калькулятора (додавання, множення, транспонування), яка зчитує матриці рядками, генерує ArgumentException для невідповідності розмірів і FormatException для некоректних елементів; після будь-якої помилки меню продовжує роботу з повідомленням у Console.Error.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обчислює матричний вираз з аргументів (A * B + C', матриці завантажуються зі стандартного введення за іменами), генерує власний виняток MatrixDimensionException з розмірами операндів і позицією операції у виразі, а також InvalidOperationException для визначника неквадратної матриці. Помилки – у Console.Error; коди завершення: 0, 1, 2.
Варіант 9. Команди робота
1. Початковий рівень. Створити консольну програму, яка переміщує робота на полі 10×10 командами U, D, L, R з рядка, введеного користувачем, і генерує InvalidOperationException у разі виходу за межі поля; програма виводить позицію робота або повідомлення з номером команди.
2. Базовий рівень. Створити консольну програму, яка виконує команди робота forward N, left, right, pick, drop з клавіатури; невідома команда спричиняє FormatException, вихід за межі поля або зіткнення з перешкодою – InvalidOperationException, а спроба pick без предмета – власну перевірку. Після помилки робот залишається на попередній позиції, програма продовжує приймати команди.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який виконує програму для робота з файлу стандартного введення (з циклами repeat N { … }), перевіряє синтаксис з повідомленням номера рядка, під час виконання генерує винятки для небезпечних дій і з опцією --trace виводить tracepoint-подібний журнал стану через Debug.WriteLine. Опція --max-steps запобігає нескінченним програмам (InvalidOperationException). Коди завершення: 0, 1 (помилка виконання), 2 (синтаксична помилка).
Варіант 10. Банківський переказ
1. Початковий рівень. Створити консольну програму з методом Transfer(ref decimal from, ref decimal to, decimal amount), який генерує ArgumentOutOfRangeException для недодатної суми й InvalidOperationException за нестачі коштів; програма виконує три задані перекази й виводить баланси після кожного.
2. Базовий рівень. Створити консольну програму з рахунками в масиві, яка в циклі виконує команди переказу номер1 номер2 сума, перевіряє номери рахунків (IndexOutOfRangeException перехоплюється й замінюється зрозумілим повідомленням), добовий ліміт і нестачу коштів власним класом InsufficientFundsException; невдалий переказ не змінює жоден баланс.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє пакет переказів зі стандартного введення транзакційно: з опцією --atomic у разі помилки будь-якого переказу всі зміни пакета скасовуються (відкат у catch за збереженою копією балансів), без опції – скасовується лише невдалий переказ. Звіт містить підсумкові баланси й таблицю помилок із типами винятків; коди завершення: 0, 1, 2.
Варіант 11. Розклад поїздів
1. Початковий рівень. Створити консольну програму, яка запитує час відправлення й прибуття поїзда у форматі гг:хх, обчислює тривалість поїздки з урахуванням переходу через північ і перехоплює FormatException для некоректного формату часу.
2. Базовий рівень. Створити консольну програму, яка зчитує рядки розкладу номер;відправлення;прибуття;платформа до порожнього рядка, перевіряє формат (виняток FormatException з номером рядка) і зайнятість платформ (виняток InvalidOperationException, якщо інтервали стоянки на одній платформі перетинаються) та виводить прийнятий розклад і перелік відхилених рядків.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який перевіряє розклад станції зі стандартного введення: формат, унікальність номерів, перетин інтервалів на платформах з урахуванням часу підготовки --gap, мінімальний час пересадки між поїздами з опції --connections. Кожне порушення – окремий виняток, звіт групує помилки за типами; некоректні рядки не зупиняють перевірку; коди завершення: 0, 1, 2.
Варіант 12. Електронний щоденник
1. Початковий рівень. Створити консольну програму з методом AddGrade(int[] grades, int index, int value), який генерує ArgumentOutOfRangeException для оцінки поза 1–12, і програмою, що виставляє оцінки з масиву вхідних даних, перехоплюючи винятки для некоректних значень та індексів.
2. Базовий рівень. Створити консольну програму щоденника з командами set предмет день оцінка, avg предмет, report: оцінки зберігаються в матриці предмети × дні, некоректний предмет, день або оцінка спричиняють винятки з поясненням, а середній бал для предмета без оцінок – InvalidOperationException; усі винятки перехоплюються в головному циклі.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який імпортує журнал оцінок класу зі стандартного введення, перевіряє шкалу (--scale 12|100|5), дати в межах семестру та дублікати оцінок, генерує власний виняток GradeImportException з номером рядка й полем і формує звіт успішності з розділом помилок. Коди завершення: 0, 1 (є помилки), 2 (некоректні опції).
Варіант 13. Дозування добрив
1. Початковий рівень. Створити консольну програму, яка за площею поля (га) і нормою внесення (кг/га) обчислює кількість добрива, а метод обчислення генерує ArgumentOutOfRangeException для недодатних значень і для норми понад 500 кг/га; програма перехоплює виняток і виводить повідомлення.
2. Базовий рівень. Створити консольну програму, яка для кількох полів, введених рядками назва площа культура, визначає норму добрива для культури виразом switch (невідома культура – ArgumentException), перевіряє межі площі та обчислює потрібну кількість мішків по 50 кг; помилковий рядок пропускається з повідомленням у Console.Error.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який розраховує план внесення добрив для полів зі стандартного введення з урахуванням поживних речовин ґрунту, норм культур з опції --norms і складського залишку --stock. Перевищення безпечної норми спричиняє власний виняток SafetyLimitException, нестача на складі – InvalidOperationException; для полів з помилками план не формується, звіт містить причини; коди завершення: 0, 1, 2.
Варіант 14. Показники лічильника
1. Початковий рівень. Створити консольну програму, яка запитує попередній і поточний показники лічильника води та містить метод Consumption(int previous, int current), що генерує InvalidOperationException, якщо поточний показник менший за попередній; програма виводить споживання або повідомлення.
2. Базовий рівень. Створити консольну програму, яка щомісяця запитує показники лічильника (12 місяців), повторює введення для кожного місяця, доки значення не стане коректним (число, не менше попереднього, зростання не більше за 100 м³), виводить причину кожної відмови та наприкінці таблицю споживання й загальну суму.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє показники кількох лічильників зі стандартного введення (лічильник;дата;показник), виявляє спадання показників (заміна лічильника з опцією --replacements або помилка), пропуски місяців і аномальне споживання (--max-delta), генеруючи окремі винятки для кожного випадку, та виводить звіт споживання з розділом помилок; коди завершення: 0, 1, 2.
Варіант 15. Чисельне інтегрування
1. Початковий рівень. Створити консольну програму з методом Integrate(double a, double b, int n) для функції sin x методом прямокутників, який генерує ArgumentOutOfRangeException для n ≤ 0 і ArgumentException для a ≥ b; програма обчислює інтеграл на [0; π] і перевіряє некоректні виклики.
2. Базовий рівень. Створити консольну програму, яка запитує функцію (1 – 1/x, 2 – √x, 3 – ln x), межі та кількість відрізків, обчислює інтеграл методом трапецій і перевіряє результат double.IsNaN і double.IsInfinity: якщо в межах інтегрування функція не визначена, метод генерує ArithmeticException з поясненням замість виведення NaN.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обчислює інтеграли функцій з опції --function методами прямокутників, трапецій і Сімпсона з автоматичним подвоєнням кількості відрізків до досягнення точності --eps. Якщо точність не досягнуто за --max-iterations, генерується InvalidOperationException; особливі точки (NaN, нескінченність) виявляються й повідомляються з координатою. Проміжні результати – через Debug.WriteLine; коди завершення: 0, 1, 2.
Варіант 16. Імпорт температур
1. Початковий рівень. Створити консольну програму, яка розбирає масив рядків місто;температура (заданий у програмі), для кожного рядка в окремому try перетворює температуру методом double.Parse і виводить місто й температуру або повідомлення про некоректний рядок.
2. Базовий рівень. Створити консольну програму, яка зчитує рядки дата;місто;температура до порожнього рядка, пропускає рядки з некоректною датою, числом або температурою поза −60…60 °C (кожен випадок – окремий тип винятку), виводить середню температуру для кожного міста та підсумок кількості пропущених рядків за причинами.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який імпортує метеодані зі стандартного введення з опціями --culture uk|invariant (десятковий роздільник), --max-errors N (перевищення зупиняє імпорт з кодом 2) і --errors-only. Помилки кожного рядка обгортаються у виняток із номером рядка й InnerException, а звіт містить статистику за містами та таблицю помилок; коди завершення: 0, 1, 2.
Варіант 17. Бронювання готелю
1. Початковий рівень. Створити консольну програму з методом Book(bool[] rooms, int room), який генерує ArgumentOutOfRangeException для неіснуючого номера й InvalidOperationException для вже зайнятого; програма бронює номери з масиву запитів і виводить результат кожного.
2. Базовий рівень. Створити консольну програму бронювання з датами заїзду й виїзду (дд.ММ.рррр), яка зберігає зайнятість номерів на 30 днів у матриці, перевіряє, що дата виїзду пізніша за заїзд (ArgumentException), дати в межах сезону й вільність номера на всі ночі; неможливе бронювання не змінює матрицю.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє запити бронювання, скасування та продовження проживання зі стандартного введення, пропонує альтернативний номер у разі конфлікту, генерує власні винятки для порушень (перевищення місткості, мінімальна кількість ночей) і виводить підсумкову завантаженість. Опції --rooms, --season; коди завершення: 0, 1 (є відхилені запити), 2.
Варіант 18. Податковий калькулятор
1. Початковий рівень. Створити консольну програму, яка обчислює податок на доходи 18 % і військовий збір 5 % для введеної суми та використовує Debug.Assert, щоб перевірити, що сума податків не перевищує дохід, і Debug.WriteLine для виведення проміжних значень у вікно Output.
2. Базовий рівень. Створити консольну програму, яка розраховує податки для кількох доходів, введених рядком, використовує Debug.Assert для інваріантів (податок невід’ємний, чиста сума не більша за дохід) і перевіряє вхідні дані винятками; у звіті описати, яка різниця в поведінці програми в конфігураціях Debug і Release.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обчислює податки за прогресивною шкалою з опції --brackets, перевіряє шкалу (зростання меж, ставки 0–100 %) винятками, а внутрішні інваріанти алгоритму – Debug.Assert. Опція --trace вмикає детальне трасування кроків через Debug.WriteLine; помилки введення – у Console.Error з кодом завершення 2.
Варіант 19. Парковка
1. Початковий рівень. Створити консольну програму з методом Park(string[] places, string plate), який генерує InvalidOperationException, якщо вільних місць немає, і ArgumentException для порожнього номера; програма паркує авто з масиву й виводить результат кожної спроби.
2. Базовий рівень. Створити консольну програму керування парковкою з командами in номер, out номер, status: номер перевіряється на формат (FormatException), повторний в’їзд і виїзд відсутнього авто спричиняють InvalidOperationException, а блок finally після кожної команди виводить кількість вільних місць.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє журнал в’їздів і виїздів зі стандартного введення, розраховує оплату, виявляє аномалії (виїзд без в’їзду, в’їзд при переповненні, некоректний час) окремими винятками й формує звіт зміни. Опції --places, --rate; з --strict перша аномалія завершує програму з кодом 2, інакше аномалії виводяться в Console.Error, код 1.
Варіант 20. Вендинговий автомат
1. Початковий рівень. Створити консольну програму з методом Buy(int[] stock, int item), який генерує InvalidOperationException, якщо товар закінчився; IndexOutOfRangeException для неіснуючого номера товару перехоплюється та замінюється зрозумілим повідомленням.
2. Базовий рівень. Створити консольну програму-автомат, яка приймає монети, вибір товару й видає решту; відсутність товару, недостатня сума й неможливість видати решту обробляються винятками, а в блоці catch внесені кошти повертаються користувачеві.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який моделює автомат зі стандартного введення команд (coin, select, cancel, service refill), з обмеженим запасом монет для решти й сервісним режимом. Кожна операція виконується транзакційно: у разі винятку стан автомата відновлюється. Звіт інкасації виводиться таблицею, помилки – у Console.Error; коди завершення: 0, 1, 2.
Варіант 21. Статистика спортсменів
1. Початковий рівень. Створити консольну програму з методом Average(int[] results), який генерує InvalidOperationException для порожнього масиву, і програмою, що обчислює середні результати трьох спортсменів (один масив порожній), перехоплюючи виняток.
2. Базовий рівень. Створити консольну програму, яка зчитує результати спортсменів рядками ім’я результати до порожнього рядка, обчислює середнє, найкращий результат і відсоток зростання між першим та останнім виступом; ділення на нуль і порожні дані обробляються винятками з поясненням, а спортсмени з помилками виводяться в окремому розділі.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє протоколи змагань зі стандартного введення, перевіряє формат результатів (м:сс,мс для бігу, метри для стрибків) залежно від дисципліни, генерує винятки для некоректних і неможливих результатів (--limits), будує рейтинг і статистику з позначкою дискваліфікованих записів. Коди завершення: 0, 1, 2.
Варіант 22. Координати
1. Початковий рівень. Створити консольну програму, яка запитує широту в десяткових градусах, перетворює її методом double.Parse у блоці try і генерує ArgumentOutOfRangeException для значень поза −90…90, виводячи повідомлення кожного перехопленого винятку.
2. Базовий рівень. Створити консольну програму, яка розбирає координати у форматі 47°54'36"N 33°23'28"E, генерує FormatException з позицією першого некоректного символу і назвою очікуваного елемента (градуси, хвилини, секунди, півкуля) та виводить десяткові градуси або повідомлення; введення повторюється до коректних даних.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який перетворює координати зі стандартного введення між форматами DD, DMM і DMS (--to), підтримує від’ємні значення й літери півкуль, виявляє суперечності (від’ємне значення з літерою S) та виводить помилки з позицією символу в Console.Error. Опція --distance обчислює відстані між послідовними точками; коди завершення: 0, 1, 2.
Варіант 23. Квиткова каса
1. Початковий рівень. Створити консольну програму, яка продає квитки на сеанс із 50 місцями: метод Sell(int count) генерує ArgumentOutOfRangeException для кількості поза 1–10 і InvalidOperationException, якщо місць недостатньо; програма обробляє задані запити.
2. Базовий рівень. Створити консольну програму каси, яка запитує вік глядача, тип квитка й кількість, визначає ціну з урахуванням пільг, перевіряє вік (0–120) і обмеження віку фільму, повторює запит після помилки й після трьох невдалих спроб переходить до наступного покупця; усі перевірки виконуються методами, що генерують винятки.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє замовлення квитків на кілька сеансів зі стандартного введення, перевіряє ліміти на одного покупця, вікові обмеження, наявність місць поруч для групи й формує звіт продажу. Власний виняток BookingException містить код причини; звіт групує відмови за кодами; коди завершення: 0, 1, 2.
Варіант 24. Складський облік
1. Початковий рівень. Створити консольну програму з методом Remove(int[] stock, int index, int count), який генерує InvalidOperationException, якщо залишок стане від’ємним, і програмою, що виконує задані операції та виводить залишки й повідомлення про помилки.
2. Базовий рівень. Створити консольну програму складського обліку з командами in артикул кількість, out артикул кількість, find частина назви: невідомий артикул спричиняє KeyNotFoundException, від’ємні залишки – InvalidOperationException; кожен виняток записується в журнал (масив рядків) з часом і командою, який виводиться командою log.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який застосовує документи руху товарів зі стандартного введення до залишків складу; документ виконується повністю або не виконується зовсім (відкат у catch), помилки записуються в журнал Console.Error з номером документа й типом винятку, а підсумок містить кількість проведених і відхилених документів. Коди завершення: 0, 1, 2.
Варіант 25. Обмеження глибини рекурсії
1. Початковий рівень. Створити консольну програму з рекурсивним методом суми чисел від 1 до n, який приймає параметр depth і генерує InvalidOperationException, якщо глибина перевищує 1000; програма перехоплює виняток для n = 5000 і повідомляє, що слід використати цикл.
2. Базовий рівень. Створити консольну програму, яка обчислює функцію Аккермана для введених m і n рекурсивним методом з лічильником глибини; якщо глибина перевищує заданий користувачем ліміт, метод генерує виняток, програма повідомляє максимальну досягнуту глибину й пропонує менші аргументи, не допускаючи StackOverflowException.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обчислює рекурсивні функції з опції --function (Аккермана, розбиття числа, обхід дерева каталогів із текстового опису) з обмеженням глибини --max-depth і, у разі перевищення, автоматично перемикається на ітеративну реалізацію з явним стеком. Перемикання записується через Debug.WriteLine, а звіт порівнює кількість кроків; коди завершення: 0, 1, 2.
Варіант 26. Опитування
1. Початковий рівень. Створити консольну програму, яка ставить 3 запитання з варіантами відповідей 1–4, приймає відповідь методом int.Parse у блоці try, перехоплює FormatException і ArgumentOutOfRangeException (для числа поза 1–4) та повторює запитання.
2. Базовий рівень. Створити консольну програму опитування з 10 запитань, у якій відповіді можна пропустити (порожній рядок), некоректні відповіді обробляються винятками з поясненням, а в кінці виводиться підсумок: кількість відповідей на кожен варіант, пропущені запитання й відсоток завершеності.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє анкети респондентів зі стандартного введення, перевіряє обов’язкові запитання, залежні запитання (якщо відповідь А, запитання Б обов’язкове) і діапазони відповідей, генерує власний виняток SurveyValidationException з переліком порушень і формує підсумковий звіт за дійсними анкетами. Коди завершення: 0, 1, 2.
Варіант 27. Котирування акцій
1. Початковий рівень. Створити консольну програму, яка для масиву рядків цін акції за днями (деякі – N/A або порожні) розбирає значення в try, пропускає некоректні й обчислює середню ціну з урахуванням лише коректних значень.
2. Базовий рівень. Створити консольну програму, яка зчитує котирування дата;ціна;обсяг до порожнього рядка, обробляє пропуски, від’ємні ціни й некоректні дати окремими винятками, обчислює денну зміну у відсотках (ділення на нуль для нульової ціни обробляється) і виводить таблицю з позначкою пропущених днів.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє котирування кількох акцій зі стандартного введення, заповнює пропуски лінійною інтерполяцією (опція --fill) або відкидає їх, виявляє аномальні стрибки (--max-jump), обчислює ковзне середнє й волатильність і завжди формує звіт, навіть якщо частина даних некоректна. Помилки – у Console.Error; коди завершення: 0, 1, 2.
Варіант 28. Шифратор
1. Початковий рівень. Створити консольну програму, яка шифрує введений текст шифром Цезаря для латинських літер; метод шифрування генерує ArgumentOutOfRangeException для ключа поза 1–25, а програма перехоплює виняток і повторює запит ключа.
2. Базовий рівень. Створити консольну програму шифрування шифром Віженера, яка перевіряє ключ (лише літери, не порожній) і текст (допустимі символи) методами, що генерують ArgumentException з позицією першого недопустимого символу; режим (шифрування чи дешифрування) обирається в меню, помилки не завершують програму.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який шифрує й дешифрує стандартне введення алгоритмами --cipher caesar|vigenere|xor-base64 з ключем --key; для xor-base64 некоректний Base64 спричиняє FormatException, що обгортається власним винятком CipherException з назвою алгоритму. Опція --verify перевіряє, що дешифрування дає вихідний текст; коди завершення: 0, 1, 2.
Варіант 29. Будильник
1. Початковий рівень. Створити консольну програму, яка запитує час будильника у форматі гг:хх, перетворює його методом TimeOnly.ParseExact у блоці try і виводить, через скільки годин і хвилин спрацює будильник відносно поточного часу.
2. Базовий рівень. Створити консольну програму, яка дозволяє встановити до п’яти будильників із днями тижня (07:30 пн,вт,ср), перевіряє час і дні (некоректний день – FormatException з назвою, дублікати – InvalidOperationException) і виводить найближче спрацювання та TimeSpan до нього; введення повторюється після помилки.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє розклад будильників зі стандартного введення (разові, щоденні, за днями тижня, «кожні N хвилин з … до …»), перевіряє конфлікти та некоректні інтервали винятками й виводить усі спрацювання на добу --date. Помилки розбору містять номер рядка й позицію; коди завершення: 0, 1, 2.
Варіант 30. Результати тестування
1. Початковий рівень. Створити консольну програму, яка обчислює загальний бал за тест із 20 запитань (бали за запитання задані в масиві byte), виконуючи додавання в контексті checked і перехоплюючи OverflowException, а потім повторює обчислення в int.
2. Базовий рівень. Створити консольну програму, яка зчитує відповіді студентів рядками ім’я відповіді і ключ правильних відповідей, перевіряє кількість відповідей (ArgumentException), допустимі символи (FormatException), обчислює бали в checked-арифметиці та виводить рейтинг; студенти з помилками виводяться в Console.Error.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який перевіряє результати тестування зі стандартного введення з вагами запитань --weights, штрафами за неправильні відповіді --penalty і перерахунком у 100-бальну шкалу, використовує власний виняток ScoringException для суперечливих даних і повертає код завершення 0 (усі результати обчислено), 1 (є помилки в даних) або 2 (некоректні опції).
Порядок виконання та захисту роботи
- Опрацювати теоретичні відомості та приклади розв’язання завдань.
- Визначити для свого варіанта, які помилки введення та обчислень можливі, і для кожної вирішити: перевірка умовою чи
TryParse, генерування винятку або перехоплення винятку. - Створити рішення та проєкт для свого варіанта завдання.
- Реалізувати програму відповідно до обраного рівня складності; повідомлення про помилки виводити в
Console.Error, для високого рівня задати коди завершення. - Продемонструвати налагодження програми: точку зупинки (зокрема умовну), покрокове виконання, вікна Locals, Watch і Call Stack; перевірити роботу на коректних і некоректних даних.
- Продемонструвати роботу програми викладачеві, пояснити програмний код і відповісти на контрольні питання.