Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Біржовий тикер
1. Початковий рівень. Створити клас StockTicker (символ акції, поточна ціна) з подією PriceChanged типу EventHandler<PriceChangedEventArgs> (стара й нова ціна). Консольна програма змінює ціну кілька разів, а підписаний обробник виводить зміну ціни у відсотках.
2. Базовий рівень. Створити тикер акції з подією PriceChanged (стара й нова ціна), генерацією цін з фіксованим зерном і підписниками-стратегіями «купити при падінні на 5 %» і «продати при зростанні на 10 %», що відписуються після угоди. Консольна програма моделює торговий день і виводить журнал угод.
3. Високий рівень. Створити бібліотеку біржі: тикери акцій з подією зміни ціни, портфель, що підписується на всі акції, і стратегії як Func<PriceHistory, TradeSignal> (купити, продати, чекати). Застосунок dotnet CLI обробляє рядки «символ ціна» зі стандартного введення й виводить прибуток кожної стратегії; помилки – у Console.Error.
Варіант 2. Кухонний таймер
1. Початковий рівень. Створити клас KitchenTimer з тривалістю в секундах і подіями Tick (залишок часу) та Finished. Консольна програма моделює відлік 5 секунд циклом кроків без реального очікування, а підписники виводять залишок і повідомлення про завершення.
2. Базовий рівень. Створити клас кухонного таймера з назвою, тривалістю, паузою та подіями Tick, Paused і Finished, кілька незалежних таймерів і підписника, що після кожного кроку виводить таймер, який завершиться найближчим. Консольна програма моделює приготування обіду циклом кроків без реального очікування.
3. Високий рівень. Створити бібліотеку кухонних таймерів з реальним часом (PeriodicTimer або System.Timers.Timer), подіями Tick і Finished, відпискою завершених таймерів і сповіщеннями через Action<string>. Застосунок dotnet CLI запускає таймери з аргументів (назва=секунди) і виводить події; помилки – у Console.Error.
Варіант 3. Конвертер одиниць
1. Початковий рівень. Створити словник Dictionary<string, Func<double, double>> перетворень одиниць (км → милі, °C → °F тощо), де ключ – назва перетворення, а значення – лямбда. Консольна програма перетворює кілька заданих значень і виводить результати.
2. Базовий рівень. Створити конвертер одиниць на словнику делегатів Func<double, double> з прямими й оберненими перетвореннями, ланцюжками (м → км → милі) через композицію делегатів і додаванням нових одиниць лямбдами. Консольна програма виконує команди на кшталт convert 5 km mi і виводить результат.
3. Високий рівень. Створити бібліотеку одиниць з графом перетворень, де ребра – делегати Func<double, double>, і пошуком ланцюжка перетворень у ширину. Застосунок dotnet CLI читає зі стандартного введення значення, вихідну й цільову одиниці та перетворює між будь-якими пов’язаними одиницями; помилки – у Console.Error.
Варіант 4. Пошук квартир
1. Початковий рівень. Створити запис Apartment (адреса, ціна, кількість кімнат, площа) і список квартир. Консольна програма відбирає методом FindAll квартири за умовою Predicate<Apartment> (ціна не вища за задану, потрібна кількість кімнат) і виводить їх.
2. Базовий рівень. Створити запис Apartment (адреса, ціна, кімнати, площа), функції вищого порядку And, Or, Not над умовами Predicate<Apartment> і меню, у якому користувач додає умови. Консольна програма виводить квартири, що задовольняють усі обрані умови, відсортовані лямбдою.
3. Високий рівень. Створити бібліотеку пошуку квартир (Apartment: адреса, ціна, кімнати, площа) з іменованими збереженими фільтрами Dictionary<string, Predicate<Apartment>> і подією NewMatch, що спрацьовує, коли нове оголошення задовольняє фільтр. Застосунок dotnet CLI читає оголошення зі стандартного введення й виводить збіги з назвою фільтра; помилки – у Console.Error.
Варіант 5. Сортування за ключами
1. Початковий рівень. Створити клас Student (прізвище, середній бал) і список студентів. Консольна програма сортує його методом Sort з лямбдою Comparison<Student> за прізвищем, а за однакових прізвищ – за середнім балом за спаданням, і виводить результат.
2. Базовий рівень. Створити функції вищого порядку By<T, TKey>(Func<T, TKey> key) і ThenBy, що будують Comparison<T> для сортування за кількома ключами. Консольна програма сортує список студентів (прізвище, ім’я, група, бал) за полями, обраними користувачем, і виводить результат.
3. Високий рівень. Створити бібліотеку порівнювачів Comparison<T> з напрямком сортування, обробкою null і реєстром ключів-делегатів за назвами полів. Застосунок dotnet CLI сортує CSV зі стандартного введення (перший рядок – назви полів) за опцією --sort name,score:desc; помилки – у Console.Error.
Варіант 6. Рівень води в резервуарі
1. Початковий рівень. Створити клас WaterTank (місткість, поточний рівень) з методами наповнення й витрати та подією LevelChanged. Консольна програма моделює кілька кроків наповнення та витрати води, а підписник виводить новий рівень.
2. Базовий рівень. Створити клас резервуара (місткість, рівень) з подіями LevelChanged, Overflow і LowLevel з власними EventArgs та підписників «насос» (вмикається при низькому рівні) і «клапан» (закривається при переповненні). Консольна програма моделює добу роботи погодинно й виводить журнал.
3. Високий рівень. Створити бібліотеку водопостачання з кількома резервуарами, що генерують події зміни рівня, насосами-підписниками із захистом від частих перемикань і журналом подій. Застосунок dotnet CLI моделює систему за сценарієм зі стандартного введення (приплив і витрата за кроками) і виводить журнал; помилки – у Console.Error.
Варіант 7. Аукціон
1. Початковий рівень. Створити клас Auction (лот, поточна ставка, лідер) з подією BidPlaced, що передає учасника й суму. Консольна програма приймає кілька ставок, а підписник виводить кожну нову ставку.
2. Базовий рівень. Створити клас аукціону з подіями BidPlaced і AuctionClosed (переможець і ціна), перевіркою мінімального кроку ставки та учасниками-підписниками, що автоматично перебивають ставку до свого ліміту. Консольна програма проводить торги й виводить їхній хід.
3. Високий рівень. Створити бібліотеку аукціонів з кількома лотами, подіями ставки й завершення, автоматичним завершенням лота після заданої кількості кроків без ставок і відпискою учасників, що вибули. Застосунок dotnet CLI обробляє ставки «лот учасник сума» зі стандартного введення й виводить протокол; помилки – у Console.Error.
Варіант 8. Статистичні агрегатори
1. Початковий рівень. Створити словник Dictionary<string, Func<double[], double>> агрегаторів «сума», «середнє», «максимум», заданих лямбдами. Консольна програма застосовує кожен агрегатор до масиву чисел і виводить назву та результат.
2. Базовий рівень. Створити словник агрегаторів Func<double[], double> (сума, середнє, медіана, мода, розмах) і функцію вищого порядку Normalize(Func<double[], double> center), що повертає функцію центрування даних. Консольна програма обчислює обрані користувачем агрегатори для введених чисел.
3. Високий рівень. Створити бібліотеку агрегацій записів з групуванням за ключем Func<T, string> і агрегатором Func<double[], double> (сума, середнє, медіана тощо). Застосунок dotnet CLI обробляє CSV зі стандартного введення за опціями --group (поле групи) і --agg (агрегатор і поле) та виводить таблицю груп; помилки – у Console.Error.
Варіант 9. Обробник консольних команд
1. Початковий рівень. Створити словник Dictionary<string, Action> команд help, date і clear, заданих лямбдами. Консольна програма в циклі читає назву команди й виконує її або повідомляє про невідому команду; exit завершує роботу.
2. Базовий рівень. Створити обробник команд на словнику Dictionary<string, Action<string[]>>, де команда отримує аргументи рядка (add 2 3, echo текст), з історією команд і повтором останньої команди. Консольна програма читає й виконує команди з параметрами.
3. Високий рівень. Створити бібліотеку інтерпретатора команд з реєстрацією команд лямбдами, довідкою, скасуванням (команда повертає Func зворотної дії) і подією CommandExecuted. Застосунок dotnet CLI виконує сценарій команд зі стандартного введення й виводить результати; помилки – у Console.Error.
Варіант 10. Паркомат
1. Початковий рівень. Створити клас ParkingMeter (тариф за годину, оплачений час) з подією PaymentAccepted, що передає суму й куплений час. Консольна програма приймає кілька оплат, а підписник виводить чек.
2. Базовий рівень. Створити клас паркомата з оплатою часу та подіями PaymentAccepted, TimeExpiring (за 10 хвилин до кінця) і TimeExpired і підписників «SMS водію» й «інспектор». Консольна програма моделює день роботи з кроком у хвилину й виводить повідомлення.
3. Високий рівень. Створити бібліотеку паркування з кількома паркоматами, подіями закінчення оплати, тарифами як Func<TimeSpan, decimal> і подовженням оплати. Застосунок dotnet CLI обробляє події (оплата, подовження, перевірка інспектора) зі стандартного введення й виводить штрафи; помилки – у Console.Error.
Варіант 11. Ігровий таймер
1. Початковий рівень. Створити клас GameClock з подією Tick, що передає номер кроку. Консольна програма моделює 10 кроків гри, а підписник виводить номер кроку та ігровий час.
2. Базовий рівень. Створити ігровий годинник з подією Tick, прискоренням часу й паузою та ігрові об’єкти (назва, позиція, швидкість), що підписуються на Tick, рухаються й відписуються після знищення. Консольна програма моделює рух об’єктів і виводить їхні позиції.
3. Високий рівень. Створити бібліотеку ігрового циклу з подією Tick, пріоритетами обробників, подіями Collision і GameOver та перевіркою витоку підписок знищених об’єктів. Застосунок dotnet CLI моделює гру з фіксованим зерном і виводить події та кількість активних підписників; помилки – у Console.Error.
Варіант 12. Конвеєр обробки тексту
1. Початковий рівень. Створити масив Func<string, string> перетворень (обрізання пробілів, нижній регістр, заміна символів). Консольна програма застосовує їх послідовно до введеного рядка й виводить результат після кожного кроку.
2. Базовий рівень. Створити перетворення рядка Func<string, string> (обрізання пробілів, нижній регістр, заміна символів), функцію вищого порядку Pipeline(params Func<string, string>[] steps), що повертає одну функцію-композицію, і меню для налаштування кроків. Консольна програма обробляє введений текст.
3. Високий рівень. Створити бібліотеку конвеєра обробки тексту з кроками Func<string, string>, умовними кроками (Predicate<string>), подією StepCompleted і вимірюванням часу кроків. Застосунок dotnet CLI обробляє рядки стандартного введення кроками, заданими в аргументах, і виводить результат; помилки – у Console.Error.
Варіант 13. Валідатор форми
1. Початковий рівень. Створити форму реєстрації (логін, email, пароль) і для кожного поля список правил Func<string, bool> з описами. Консольна програма перевіряє введені значення й виводить, які правила порушено.
2. Базовий рівень. Створити клас правила з повідомленням і делегатом Func<string, bool>, функції вищого порядку MinLength(n), Matches(pattern), Required(), що створюють правила, і збирання всіх помилок. Консольна програма перевіряє форму реєстрації (логін, email, пароль) і виводить помилки.
3. Високий рівень. Створити бібліотеку валідації з правилами-делегатами для окремих полів і між полями (підтвердження пароля), подією ValidationFailed і узагальненим валідатором Validator<T>. Застосунок dotnet CLI перевіряє анкети зі стандартного введення й виводить результат перевірки кожної; помилки – у Console.Error.
Варіант 14. Складський запас
1. Початковий рівень. Створити клас StockItem (назва, залишок, мінімальний запас) з методом продажу й подією LowStock, що спрацьовує при залишку нижче мінімуму. Консольна програма продає товар кількома партіями, а підписник виводить попередження.
2. Базовий рівень. Створити клас товару на складі (назва, залишок, мінімум) з подіями LowStock і Restocked та підписника «відділ закупівель», що при нестачі формує замовлення й поповнює запас. Консольна програма моделює продажі за тиждень і виводить журнал.
3. Високий рівень. Створити бібліотеку складу з кількома товарами з подією LowStock, постачальниками й затримкою постачання та правилами дозамовлення як Func<StockItem, int> (скільки замовити). Застосунок dotnet CLI моделює рух товарів (продажі, надходження) зі стандартного введення й виводить залишки; помилки – у Console.Error.
Варіант 15. Завантаження файлів
1. Початковий рівень. Створити клас Downloader (назва файлу, розмір) з подіями ProgressChanged (відсоток) і Completed. Консольна програма моделює завантаження частинами без реальної мережі, а підписники виводять прогрес і повідомлення про завершення.
2. Базовий рівень. Створити клас завантаження файлу, що моделює завантаження частинами, з подіями ProgressChanged, Completed і Cancelled, можливістю скасування та підписника-індикатор прогресу в консолі. Консольна програма моделює завантаження трьох файлів.
3. Високий рівень. Створити бібліотеку черги завантажень з подіями прогресу й завершення, обмеженням одночасних завантажень, повторними спробами (Func<bool> – спроба завантажити частину) і загальним прогресом. Застосунок dotnet CLI моделює завантаження списку файлів зі стандартного введення з фіксованим зерном; помилки – у Console.Error.
Варіант 16. Розумна лампа
1. Початковий рівень. Створити клас MotionSensor з подією MotionDetected і клас Lamp, що підписується на неї та вмикається при русі. Консольна програма моделює кілька спрацювань датчика й виводить стан лампи.
2. Базовий рівень. Створити датчики руху й освітленості з подіями MotionDetected і DarknessChanged та лампу-підписника, що вмикається при русі в темряві, вимикається через 5 хвилин без руху, а в ручному режимі відписується від датчиків. Консольна програма моделює вечір з кроком у хвилину.
3. Високий рівень. Створити бібліотеку розумного освітлення з кімнатами, датчиками з подіями, сценаріями як Action<Room> і правилами Predicate<SensorState>, що визначають, коли запускати сценарій. Застосунок dotnet CLI обробляє події датчиків зі стандартного введення й виводить стан ламп; помилки – у Console.Error.
Варіант 17. Крокомір
1. Початковий рівень. Створити клас Pedometer (кількість кроків, денна ціль) з подією GoalReached. Консольна програма моделює кроки за день порціями, а підписник виводить повідомлення про досягнення цілі.
2. Базовий рівень. Створити клас крокоміра з денною ціллю й подіями GoalReached, NewRecord і проміжних цілей (25 %, 50 %, 75 %) та підписників «сповіщення» і «статистика». Консольна програма моделює тиждень кроків і виводить повідомлення та підсумки.
3. Високий рівень. Створити бібліотеку фітнес-цілей з денною статистикою DayStats (кроки, дистанція, активні хвилини), налаштовуваними умовами досягнень Func<DayStats, bool> і серіями днів поспіль. Застосунок dotnet CLI обробляє дані днів зі стандартного введення й виводить досягнення; помилки – у Console.Error.
Варіант 18. Футбольний матч
1. Початковий рівень. Створити клас Match (команди, рахунок) з подією GoalScored, що передає команду, автора й хвилину, та підписника-табло. Консольна програма моделює кілька голів, а табло виводить рахунок.
2. Базовий рівень. Створити клас футбольного матчу з подіями GoalScored, CardShown і MatchEnded, підписників «табло», «коментатор» і «статистика» та видалення гравця після другої жовтої картки. Консольна програма відтворює матч за сценарієм.
3. Високий рівень. Створити бібліотеку трансляції матчів туру з подіями голів, карток і завершення, букмекером-підписником, що змінює коефіцієнти після подій, і турнірною таблицею. Застосунок dotnet CLI обробляє події матчів зі стандартного введення й виводить таблицю; помилки – у Console.Error.
Варіант 19. Вимір часу виконання
1. Початковий рівень. Створити функцію вищого порядку Measure(Action action), що повертає тривалість виконання (Stopwatch). Консольна програма вимірює кілька дій, заданих лямбдами (цикл обчислень, сортування масиву), і виводить час.
2. Базовий рівень. Створити узагальнену функцію Measure<T>(Func<T> func, out T result), повторення вимірювань з мінімумом і середнім та порівняння двох алгоритмів сортування. Консольна програма виводить таблицю.
3. Високий рівень. Створити бібліотеку міні-бенчмарків з реєстрацією випадків лямбдами, прогрівом і подією CaseCompleted. Застосунок dotnet CLI запускає набір випадків з аргументів і виводить звіт; помилки – у Console.Error.
Варіант 20. Генератор паролів
1. Початковий рівень. Написати консольну програму, що генерує пароль заданої довжини з випадкових символів, які задовольняють умову Predicate<char> (літери, цифри), з фіксованим зерном Random і виводить його.
2. Базовий рівень. Створити генератор паролів з фіксованим зерном і список правил Predicate<string> (довжина, цифра, велика літера, спецсимвол); пароль генерується, доки не задовольнить усі правила. Консольна програма виводить пароль і кількість спроб.
3. Високий рівень. Створити бібліотеку політик паролів з правилами Predicate<string>, оцінкою надійності як сумою Func<string, int> і подією WeakPasswordRejected. Застосунок dotnet CLI генерує паролі (--generate) або перевіряє паролі зі стандартного введення (--check) і виводить оцінки; помилки – у Console.Error.
Варіант 21. Генератор послідовностей
1. Початковий рівень. Створити метод Generate(int count, Func<int, long> term), що повертає перші count членів послідовності за формулою n-го члена. Консольна програма виводить квадрати та степені двійки, задані лямбдами.
2. Базовий рівень. Створити функції, що повертають генератори-замикання Func<long>: арифметична та геометрична прогресії, числа Фібоначчі (кожен виклик повертає наступний член). Консольна програма виводить перші члени послідовностей з параметрами, введеними користувачем.
3. Високий рівень. Створити бібліотеку послідовностей з рекурентними правилами Func<long, long, long> (наступний член за двома попередніми), фільтрами Predicate<long> і пошуком відомої послідовності за першими членами. Застосунок dotnet CLI читає перші члени зі стандартного введення й продовжує послідовність; помилки – у Console.Error.
Варіант 22. Консольне меню
1. Початковий рівень. Створити консольне меню як масив пар «назва – Action» (привітання, поточна дата, вихід). Програма в циклі виводить нумеровані пункти, читає номер і виконує обраний пункт.
2. Базовий рівень. Створити клас Menu з пунктами-делегатами Action, вкладеними підменю, пунктом «Назад», умовною доступністю пунктів Func<bool> і подією ItemSelected. Консольна програма керує бібліотекою книг (додати, знайти, видати).
3. Високий рівень. Створити бібліотеку меню з пунктами-делегатами, гарячими клавішами, історією переходів і побудовою меню з текстового опису. Застосунок dotnet CLI будує меню за описом зі стандартного введення й виконує сценарій вибору пунктів; помилки – у Console.Error.
Варіант 23. Чат-кімната
1. Початковий рівень. Створити клас ChatRoom з подією MessagePosted (автор, текст) і клас учасника, що підписується на неї. Консольна програма додає двох учасників, публікує кілька повідомлень, і кожен учасник виводить отримані.
2. Базовий рівень. Створити чат-кімнату з подіями MessagePosted, UserJoined і UserLeft, фільтром заборонених слів як ланцюжком Func<string, string> та учасниками, що відписуються при виході. Консольна програма моделює розмову й виводить повідомлення, отримані кожним учасником.
3. Високий рівень. Створити бібліотеку чату з кімнатами, подіями повідомлень, приватними повідомленнями, ботами-підписниками з правилами Predicate<Message> і перевіркою відписок учасників, що вийшли. Застосунок dotnet CLI обробляє сценарій зі стандартного введення; помилки – у Console.Error.
Варіант 24. Інтернет-магазин
1. Початковий рівень. Створити клас Order (номер, клієнт, сума) і клас OrderService з подією OrderPlaced. Консольна програма оформлює замовлення, а підписник виводить підтвердження.
2. Базовий рівень. Створити сервіс замовлень з подією OrderPlaced, підписників «склад» (резервує товар), «розсилка» та «бонуси» і правила знижок як список Func<Order, decimal>. Консольна програма оформлює кілька замовлень (клієнт, товари) і виводить дії підписників.
3. Високий рівень. Створити бібліотеку магазину з подіями життєвого циклу замовлення (оформлено, оплачено, відправлено, скасовано), скасуванням замовлення, коли підписник «склад» повідомляє про нестачу, і журналом подій. Застосунок dotnet CLI обробляє замовлення зі стандартного введення; помилки – у Console.Error.
Варіант 25. Моніторинг пацієнта
1. Початковий рівень. Створити клас VitalSignsMonitor з подією CriticalValue, що спрацьовує, коли пульс виходить за межі 50–120 уд./хв. Консольна програма подає послідовність вимірювань пульсу, а підписник виводить тривогу.
2. Базовий рівень. Створити монітор пацієнта з показниками VitalSigns (пульс, тиск, сатурація), порогами як Predicate<VitalSigns>, подією тривоги з рівнем в EventArgs і підписниками «медсестра» та «лікар» (лише критичні). Консольна програма моделює вимірювання.
3. Високий рівень. Створити бібліотеку моніторингу відділення з кількома пацієнтами, подіями тривоги за порогами показників, ескалацією непідтверджених тривог і журналом реакцій персоналу. Застосунок dotnet CLI обробляє показники й підтвердження зі стандартного введення; помилки – у Console.Error.
Варіант 26. Приладова панель авто
1. Початковий рівень. Створити клас FuelSensor (рівень пального) з подією LowFuel і клас панелі, що підписується на неї та виводить попередження. Консольна програма моделює витрату пального під час поїздки.
2. Базовий рівень. Створити датчики пального, тиску в шинах і температури двигуна з подіями попереджень, спільну панель-підписника та пріоритети попереджень (панель показує найважливіше). Консольна програма моделює поїздку з кроком у хвилину.
3. Високий рівень. Створити бібліотеку бортової системи зі станом авто CarState (пальне, тиск у шинах, температура двигуна), правилами попереджень Func<CarState, Warning?>, відключенням попереджень водієм і журналом. Застосунок dotnet CLI обробляє телеметрію зі стандартного введення й виводить попередження; помилки – у Console.Error.
Варіант 27. Табло аеропорту
1. Початковий рівень. Створити клас Flight (номер, напрямок, статус) з подією StatusChanged і клас табло, що підписується на рейси. Консольна програма змінює статуси кількох рейсів, а табло виводить зміни.
2. Базовий рівень. Створити клас рейсу з подіями StatusChanged і GateChanged, підписників «табло» і «SMS пасажирам» (лише свій рейс) та відписку пасажира після посадки. Консольна програма моделює день аеропорту.
3. Високий рівень. Створити бібліотеку інформаційної системи аеропорту з багатьма рейсами з подіями змін, фільтрами табло Predicate<Flight> і затримками, що поширюються на пов’язані рейси. Застосунок dotnet CLI обробляє події зі стандартного введення й виводить табло; помилки – у Console.Error.
Варіант 28. Система досягнень
1. Початковий рівень. Створити клас Player (ім’я, очки) з подією ScoreChanged і досягнення «100 очок», що підписується на неї. Консольна програма нараховує очки, а досягнення виводить повідомлення, коли гравець набере 100 очок.
2. Базовий рівень. Створити гравця зі статистикою PlayerStats (очки, рівень, перемоги), досягнення з умовами Predicate<PlayerStats>, подію AchievementUnlocked і відписку досягнення після отримання. Консольна програма моделює гру й виводить отримані досягнення.
3. Високий рівень. Створити бібліотеку досягнень, що підписуються на ігрові події, з прогресом виконання, прихованими досягненнями й умовами-композиціями предикатів. Застосунок dotnet CLI обробляє ігрові події зі стандартного введення й виводить отримані досягнення; помилки – у Console.Error.
Варіант 29. Нагадування про ліки
1. Початковий рівень. Створити розклад нагадувань про ліки як список пар «час – Action». Консольна програма моделює добу з кроком у годину й виконує нагадування, час яких настав (виводить назву ліків).
2. Базовий рівень. Створити клас MedicationScheduler з розкладом прийому ліків, подіями ReminderDue і DoseMissed, підтвердженням прийому та повтором непідтвердженого нагадування. Консольна програма моделює добу з кроком у 15 хвилин.
3. Високий рівень. Створити бібліотеку нагадувань з курсами прийому ліків, подіями нагадувань, правилами Func<DateTime, bool> (через день, щопонеділка) і звітом дотримання. Застосунок dotnet CLI моделює тиждень за розкладом зі стандартного введення; помилки – у Console.Error.
Варіант 30. Опитування в реальному часі
1. Початковий рівень. Створити клас Poll (питання, варіанти, лічильники голосів) з подією VoteCast. Консольна програма приймає кілька голосів, а підписник після кожного виводить поточні результати.
2. Базовий рівень. Створити клас опитування з варіантами й подіями VoteCast і PollClosed, забороною повторного голосу виборця та підписниками «діаграма» (текстові стовпці) і «лідер змінився». Консольна програма моделює голосування.
3. Високий рівень. Створити бібліотеку опитувань з кількома питаннями, подіями голосування, правилами завершення Func<Poll, bool> (кількість голосів, відрив лідера) і експортом результатів у CSV. Застосунок dotnet CLI обробляє голоси зі стандартного введення; помилки – у Console.Error.
Порядок виконання та захисту роботи
- Опрацювати теоретичні відомості та приклади розв’язання завдань.
- Визначити для свого варіанта, яку поведінку передавати делегатами, які події генерувати та хто на них підписується; побудувати схему «видавець – підписники».
- Створити рішення та проєкт; класи видавців, підписників і аргументів подій розмістити в окремих файлах.
- Реалізувати завдання обраного рівня складності, використовуючи вбудовані делегати, лямбда-вирази та стандартний шаблон подій.
- Перевірити підписку й відписку, роботу за відсутності підписників і значення захоплених змінних у налагоджувачі.
- Продемонструвати роботу програми викладачеві, пояснити програмний код і відповісти на контрольні питання.