Українська
Контрольні завдання
Практичні завдання за темами курсу для перевірки знань. Кожне завдання — окрема програма.
Тема 1. Керування версіями Git
- Створити консольну програму C# «Конвертер температур» (Цельсій, Фаренгейт, Кельвін) у новому репозиторії Git з файлами
.gitignoreі.gitattributes, створеними шаблонамиdotnet new; зафіксувати розробку щонайменше чотирма комітами зі змістовними повідомленнями, показатиgit status,git log --onelineі зміни останнього коміту командоюgit show --stat. - Створити консольну програму C# «Облік завдань» (завдання з пріоритетом і терміном) у репозиторії Git, створити гілки
feature/priorityіfeature/deadline, зробити в кожній по коміту, злити першу гілку перемотуванням, а другу – тристороннім злиттям після нового коміту вmain; видалити злиті гілки й показатиgit log --oneline --graph --all. - Створити консольну програму C# «Телефонний довідник» (імена й номери телефонів) у репозиторії Git, змінити той самий рядок виведення в гілці
feature/formatі вmain, злити гілку, розв’язати конфлікт злиття (у терміналі або у Visual Studio 2026), перевірити збірку й завершити злиття; показати маркери конфлікту,git statusпід час конфлікту та граф історії після злиття. - Створити консольну програму C# «Каса кінотеатру» (сеанси та продаж квитків) у репозиторії Git і зробити два помилкові коміти: перший скасувати командою
git revert, другий прибрати командоюgit reset --hard HEAD~1, а потім відновити його за допомогоюgit reflog; показатиgit log --onelineпісля кожної дії й пояснити, коли допустимо використовуватиgit reset. - Створити консольну програму C# «Облік відвідувань» (студенти та відвідані заняття) у репозиторії Git, почати зміну в гілці
feature/report, сховати незавершену роботу командоюgit stash push -m, перейти наmain, виправити й закомітити помилку, повернутися в гілку, відновити схованку і завершити зміну комітом; показатиgit stash listіgit log --oneline --graph --all. - Створити консольну програму C# «Калькулятор індексу маси тіла» (зріст, вага, ІМТ) у репозиторії Git і позначити дві її версії анотованими тегами
v1.0.0іv1.1.0з описом змін і файломCHANGELOG.md; показатиgit tag -n,git diff --stat v1.0.0 v1.1.0, вмістProgram.csу версії 1.0.0 (git show v1.0.0:Program.cs) і тимчасово перейти до неї командоюgit switch --detach. - Створити консольну програму C# «Облік складу» (товари та залишки) у репозиторії Git, зробити в гілці
experiment/importтри коміти, один з яких виправляє помилку, що є і вmain; перенести вmainлише це виправлення командоюgit cherry-pick, перебазувати гілку наmainі показати, що Git пропустив перенесений коміт. - Створити консольну програму C# «Розклад іспитів» (дисципліна, дата, аудиторія), порожній репозиторій
D:\Labs\remote\Exams.gitі два клони від імені двох учасників; обидва роблять коміти, другий отримує відмовуgit push, виконуєgit pull, за потреби розв’язує конфлікт і надсилає зміни; показатиgit log --oneline --graphв обох клонах іgit remote -v. - Створити консольну програму C# «Конвертер валют» (сума та курс обміну) у репозиторії Git з історією не менше ніж із шести комітів, в одному з яких внесено помилку в обчислення; знайти цей коміт командою
git bisect, переглянути його командамиgit showіgit blame, скасувати помилку командоюgit revertі показатиgit log --oneline. - Створити консольну програму C# «Облік бюджету» (доходи та витрати) у репозиторії Git і хук
pre-commitу папці.githooks, який виконуєdotnet buildі скасовує коміт, якщо збірка не вдалася; підключити папку командоюgit config core.hooksPath .githooks, показати відмову коміту з помилкою компіляції та успішний коміт після виправлення.
Тема 2. Регулярні вирази
- Створити консольну програму, яка запитує в користувача поштовий індекс (п’ять цифр), номер телефону
+380XXXXXXXXXі датудд.мм.рррр, перевіряє кожне значення методомRegex.IsMatchз якорями^і\z, для дати додатково перевіряє її існування методомDateOnly.TryParseExactта виводить для кожного поля «правильно» або опис очікуваного формату. - Створити консольну програму, яка запитує в користувача текст і слово, знаходить усі входження слова як цілого слова без урахування регістру (межі
\b,Regex.Escape) та виводить кількість збігів і позицію кожного з них. - Створити консольну програму, яка запитує рядки
Прізвище Ім’я, КН-21, 87до введення порожнього рядка, розбирає їх шаблоном з іменованими групами (прізвище, ім’я, група, бал від 0 до 100), відхиляє неправильні рядки з повідомленням і виводить таблицю студентів та середній бал кожної групи. - Створити консольну програму, яка читає текст із файлу, замінює дати
рррр-мм-дднадд.мм.ррррпідстановкою груп, а ціни в доларах$12.50на ціни в гривнях за курсом, введеним користувачем, методомReplaceзMatchEvaluator, та виводить результат і кількість замін кожного виду. - Створити консольну програму, яка запитує рядок чисел, розділених комами, крапками з комою, пробілами або табуляціями в будь-якій кількості, розбиває його методом
Regex.Split, перевіряє кожне число методомTryParseі виводить суму, середнє значення та некоректні елементи. - Створити консольну програму, яка запитує пароль, перевіряє його одним шаблоном із переглядами вперед (щонайменше 10 символів, велика й мала літери, цифра, без пробілів), а якщо перевірка не пройдена, окремими шаблонами визначає та виводить усі порушені правила.
- Створити консольну програму, яка читає текстовий файл із кінцями рядків Windows, у режимі
RegexOptions.Multilineзнаходить рядки, що починаються словамиHACKабоFIXMEбез урахування регістру, та виводить номер кожного рядка і текст після ключового слова без символу\r. - Створити консольну програму зі статичним
partial-класом, у якому атрибутом[GeneratedRegex]оголошено шаблони адреси e-mail, українського IBAN і поштового індексу; програма читає значення з файлу (одне в рядку) та виводить таблицю «значення – тип – формат правильний». - Створити консольну програму, яка запитує кількість символів n, будує рядок з n літер
aі символу!, перевіряє його шаблоном^(a+)+$з тайм-аутом 200 мс, перехоплюєRegexMatchTimeoutException, а потім перевіряє той самий рядок з параметромRegexOptions.NonBacktrackingі рівносильним шаблоном^a+$, виводячи час кожної перевірки. - Створити консольну програму, яка читає файл журналу застосунку з рядками
2026-09-17 10:15:32 [ERROR] текст, підраховує записи за рівнями (INFO,WARN,ERROR), замінює числа в текстах помилок наNдля групування однакових повідомлень і виводить п’ять найчастіших повідомлень про помилки з кількістю.
Тема 3. Основи Windows Forms
- Створити застосунок Windows Forms, у якому користувач вводить у текстові поля довжини трьох сторін трикутника, а після натискання кнопки Calculate бачить периметр, площу за формулою Герона та вид трикутника. Некоректні значення (не числа, недодатні числа, сторони, що не утворюють трикутник) позначаються компонентом
ErrorProvider. - Створити застосунок Windows Forms «Реєстрація користувача» з полями логіна (3–20 латинських літер і цифр), електронної пошти, пароля та підтвердження пароля. Поля перевіряються в подіях
ValidatingзErrorProvider, кнопка Cancel закриває форму без перевірки, а кнопка Register показуєMessageBoxлише за коректних даних. - Створити застосунок Windows Forms для замовлення кави з вибором напою (
RadioButton), розміру (ComboBox), додатків (CheckBox) і кількості (NumericUpDown). Вартість оновлюється після кожної зміни одним спільним обробником подій, а кнопка Order показує підсумок замовлення вMessageBox. - Створити застосунок Windows Forms зі списком міст у
ListBoxі полем введення назви міста з кнопками Add, Remove і Sort. Порожні назви й дублікати не додаються (повідомлення вMessageBox), кнопка Remove доступна лише тоді, коли місто виділено, а напис показує кількість міст. - Створити застосунок Windows Forms «Анкета» з написами й полями, розміщеними в
TableLayoutPanel, і кнопками OK і Cancel, прив’язаними до правого нижнього кута форми (Anchor). Під час зміни розміру вікна поля розтягуються, форма має мінімальний розмір, а клавіші Enter і Esc натискають відповідні кнопки. - Створити застосунок Windows Forms «Нотатник» з головним меню File (New, Open…, Save As…, Exit) з клавішами швидкого доступу, багаторядковим полем тексту на всю форму і рядком стану з кількістю символів. Файли відкриваються й зберігаються через
OpenFileDialogіSaveFileDialog, а помилки читання й запису показуються вMessageBox. - Створити застосунок Windows Forms «Таймер зворотного відліку», у якому користувач задає хвилини й секунди в
NumericUpDown, запускає, призупиняє й скидає відлік кнопками. КомпонентTimerоновлює напис щосекунди, а після завершення відліку форма змінює колір тла й показуєMessageBox. - Створити застосунок Windows Forms з головною формою зі списком товарів і модальною формою додавання товару (назва, ціна, кількість) з кнопками OK і Cancel. Модальна форма перевіряє поля й закривається з
DialogResult.OKлише за коректних даних; головна форма додає товар і показує загальну вартість. - Створити застосунок Windows Forms «Облік студентів» з таблицею
DataGridView, прив’язаною доBindingList<T>черезBindingSource, і полями прізвища, групи та середнього балу (60–100) з кнопками Add і Delete. Рядок стану показує кількість студентів і середній бал групи. - Створити застосунок Windows Forms, який під час руху миші над панеллю показує координати курсора в рядку стану, після клацання лівою кнопкою додає точку «X, Y» у
ListBox, після натискання Ctrl+Z (подіяKeyDownформи зKeyPreview) видаляє останню точку, а контекстне меню списку містить команди Copy (копіювати точки в буфер обміну) і Clear.
Тема 4. Графіка GDI+
- Створити застосунок Windows Forms, який у методі
OnPaintмалює будиночок із прямокутника, трикутного даху (FillPolygon), вікон зі штриховкою та сонця-кола; малюнок масштабується під розмір вікна і не зникає після згортання вікна. - Створити застосунок Windows Forms, який малює три прямокутники, заповнені пензлями
SolidBrush,HatchBrushіLinearGradientBrush, з підписами назв пензлів, вирівняними по центру прямокутників; тип штриховки вибирається вComboBox. - Створити застосунок Windows Forms, у якому текст, введений у поле, виводиться в рамці по центру вікна; розмір шрифту автоматично підбирається через
MeasureStringтак, щоб текст займав не більше 80 % ширини вікна. - Створити застосунок Windows Forms, який будує графік функції y =
− 4 на відрізку, заданому користувачем (початок менший за кінець), з осями, поділками й підписами; математичні координати перетворюються на пікселі за допомогою класуMatrix. - Створити застосунок Windows Forms, який створює
Bitmap400 × 300, малює в ньому таблицю множення 5 × 5 з рамками і зберігає зображення у PNG-файл, вибраний уSaveFileDialog; зображення показується уPictureBox. - Створити застосунок Windows Forms, який відкриває зображення і перетворює його на негатив методами
GetPixelіSetPixel, показуючи оригінал і результат; про некоректний файл повідомляється без аварійного завершення програми. - Створити застосунок Windows Forms, у якому користувач малює мишею прямокутники (натиснути, протягнути, відпустити), усі прямокутники зберігаються в списку, а правий клік видаляє прямокутник під курсором.
- Створити застосунок Windows Forms, у якому м’яч-коло рухається й відбивається від країв вікна за
Timer, швидкість змінюється клавішами «+» і «−», а анімація не мерехтить завдяки подвійній буферизації. - Створити власний елемент керування
BatteryIndicatorз властивістюLevel(0–100) з атрибутамиCategory,DescriptionіDefaultValue, який малює батарейку з сегментами заряду, та форму, на якій рівень змінюєтьсяTrackBar. - Створити застосунок Windows Forms, який малює п’ять фігур (коло, квадрат, трикутник, зірка, еліпс) як об’єкти
GraphicsPathі після клацання мишею виводить у рядку стану назву фігури під курсором (перевіркаIsVisible).
Тема 5. Асинхронність async/await
- Створити застосунок Windows Forms, який після натискання кнопки підраховує в
Task.Runкількість простих чисел до введеного числа (не більше 50 000 000). Під час обчислення кнопка вимкнена, курсор має вигляд очікування, а результат і час виводяться в напис. - Створити застосунок Windows Forms «Нотатки», який асинхронно відкриває та зберігає текстові файли (
File.ReadAllTextAsync,File.WriteAllTextAsync) через стандартні діалоги й показує помилки читання та запису вMessageBox, не блокуючи інтерфейс. - Створити застосунок Windows Forms, який імітує тривалу операцію з десяти кроків (
Task.Delay500 мс кожен) з перебігом уProgressBarчерезIProgress<int>і кнопкою Cancel; після скасування напис показує номер кроку, на якому операцію зупинено. - Створити застосунок Windows Forms, який асинхронно копіює вибраний файл у вибрану папку порціями по 1 МБ з перебігом у відсотках і кнопкою Cancel; після скасування частково скопійований файл видаляється.
- Створити застосунок Windows Forms, який запускає п’ять імітованих завантажень різної тривалості одночасно, показує час завершення кожного в списку (
Task.WhenAll) і назву найшвидшого (Task.WhenAny). - Створити застосунок Windows Forms, який виконує імітовану операцію випадкової тривалості від 1 до 5 с із тайм-аутом, заданим у
NumericUpDown; якщо операцію не завершено вчасно, вона скасовується, а напис показує «Timeout». - Створити застосунок Windows Forms, який обробляє 20 імітованих задач (
Task.Delayвипадкової тривалості), виконуючи одночасно не більше заданої кількості (SemaphoreSlim), і показує в написі поточну та максимальну кількість задач, що виконуються одночасно. - Створити застосунок Windows Forms, який асинхронно обробляє кілька вибраних текстових файлів одночасно (підрахунок слів); якщо деякі файли не вдалося прочитати, застосунок показує результати успішних файлів і список усіх помилок (
Task.WhenAll,Exception.InnerExceptions). - Створити застосунок Windows Forms, який асинхронно читає великий текстовий файл рядок за рядком через метод, що повертає
IAsyncEnumerable<string>, і додає вListBoxрядки, що містять введене слово, одразу після знаходження, з можливістю скасування. - Створити застосунок Windows Forms, у якому фонова задача щосекунди генерує випадкове вимірювання температури й оновлює напис і список останніх 10 вимірювань без помилок звернення з іншого потоку (
Control.InvokeAsyncабоIProgress<T>), а кнопки запускають і зупиняють вимірювання.
Тема 6. DI, конфігурація, журналювання
- Створити консольну програму, у якій інтерфейс
IMessageSenderмає дві реалізації (e-mail і SMS, вивід на консоль), сервісOrderServiceотримує його через конструктор, а реалізація обирається реєстрацією вServiceCollectionвідповідно до введеного користувачем словаemailабоsms. - Створити консольну програму, яка реєструє три сервіси з часами життя Singleton, Scoped і Transient, створює дві області та виводить ідентифікатори екземплярів, отриманих у кожній області, а також повідомлення про звільнення об’єктів.
- Створити консольну програму, у якій три способи оплати (картка, готівка, переказ) зареєстровано як ключові сервіси
IPayment; користувач вводить суму й спосіб, а для невідомого способу програма виводить список доступних. - Створити консольну програму з хостом і
BackgroundService, яка кожні N секунд (N уappsettings.json) записує в журнал поточний час і номер ітерації, а після Ctrl+C записує загальну кількість ітерацій. - Створити консольну програму з хостом, яка виводить значення ключів
App:NameіApp:Portта назву середовища і демонструє перевизначення значень зappsettings.jsonфайломappsettings.Development.json, змінною середовища та аргументом командного рядка. - Створити консольну програму з хостом, у якій розділ
Smtp(сервер, порт 1–65535, адреса відправника) зв’язано з класом параметрів із перевіркоюValidateDataAnnotationsіValidateOnStart, а програма виводить параметри або завершується з повідомленням про помилку. - Створити консольну програму з хостом, яка читає рядок підключення до бази даних із секретів користувача, виводить його з прихованим паролем і повідомляє, якщо секрет не задано; описати команди
dotnet user-secretsдля налаштування. - Створити консольну програму, у якій сервіс обробки замовлень отримує
ILogger<T>і записує структуровані повідомлення з полямиOrderIdіAmountрізних рівнів, а мінімальний рівень для категорії сервісу задано вappsettings.json. - Створити застосунок Windows Forms із хостом, у якому головна форма створюється контейнером і отримує через конструктор сервіс калькулятора та
ILogger<T>, а кожне обчислення записується в журнал. - Створити бібліотеку з сервісом, що визначає, чи відкрито магазин (години роботи в
IOptions<T>, час ізTimeProvider), і модульні тести xUnit.net зFakeTimeProviderіNullLogger<T>для меж робочого часу.
Тема 7. SQL та ADO.NET
- Створити скрипт SQL для PostgreSQL, який створює таблиці
departmentsіemployeesз первинними ключами-ідентичностями, зовнішнім ключем, обмеженнямиNOT NULL,UNIQUE(email) іCHECK(зарплата додатна), наповнює їх п’ятьма рядками і виводить працівників з назвами відділів. - Створити скрипт SQL для таблиці
products(назва, категорія, ціна, кількість), який додає товари командоюINSERT … RETURNING, підвищує ціни товарів заданої категорії на 5 %, видаляє товари з нульовою кількістю і після кожної команди виводить стан таблиці. - Створити скрипт SQL, який для таблиці
students(ім’я, група, рік вступу, середній бал) виводить студентів групи з балом від 75 до 90, відсортованих за спаданням балу, а також знаходить студентів, прізвище яких починається із заданої літери (ILIKE). - Створити скрипт SQL для таблиць
authors,booksіbook_authors(N:M), який виводить книги з усіма авторами, авторів без книг (LEFT JOIN) і кількість книг кожного автора. - Створити скрипт SQL для таблиці
orders(клієнт, дата, сума), який виводить кількість і суму замовлень за місяцями та клієнтів із сумою замовлень понад 10 000 грн (GROUP BY,HAVING). - Створити консольну програму C#, яка підключається до PostgreSQL через
NpgsqlDataSource(рядок з’єднання в секретах користувача) і виводить усі рядки таблиціcities(назва, населення) вирівняною таблицею, читаючи їхNpgsqlDataReaderз перевіркоюNULL. - Створити консольну програму C#, яка запитує частину назви товару і виводить знайдені товари з таблиці
productsбази PostgreSQL параметризованим запитом зILIKE; показати, що введення' OR '1'='1не повертає всіх рядків. - Створити консольну програму C#, яка методом
ExecuteScalarAsyncвиводить кількість записів, мінімальну й максимальну ціну в таблиціproducts, а методомExecuteNonQueryAsyncдодає товар, введений з клавіатури з перевіркою. - Створити консольну програму C#, яка переказує суму між двома рахунками таблиці
accountsу транзакціїNpgsqlTransaction: якщо на рахунку недостатньо коштів або рахунку немає, транзакція скасовується з повідомленням. - Створити застосунок Windows Forms, який заповнює
DataTableз таблиціemployeesі показує її вDataGridViewз пошуком за прізвищем і кількістю записів у рядку стану; помилки підключення показуються вMessageBox.
Тема 8. Entity Framework Core
- Створити консольну програму C# з EF Core і PostgreSQL із сутностями «Автор» і «Книга» (зв’язок 1:N), створити таблиці міграцією, додати три книги двох авторів і вивести авторів з кількістю їхніх книг.
- Створити консольну програму C# з EF Core, у якій модель «Товар» налаштована через Fluent API: назва до 100 символів з унікальним індексом, ціна
numeric(10,2), обмеженняCHECKна невід’ємний залишок; програма додає товар і обробляє порушення обмежень повідомленням. - Створити консольну програму C# з EF Core, яка для сутностей «Категорія» і «Товар» запитує назву категорії та виводить її товари, завантажені через
Include, відсортовані за ціною; про відсутню категорію повідомляється. - Створити консольну програму C# з EF Core, у якій студенти і курси пов’язані N:M; програма запитує студента і курс, записує студента на курс (повторний запис відхиляється) і виводить курси студента.
- Створити консольну програму C# з EF Core, яка запитує мінімальну і максимальну ціну (мінімальна не більша за максимальну) та виводить товари цього діапазону проєкцією в запис
(Name, Category, Price)з сортуванням за назвою. - Створити консольну програму C# з EF Core, яка виводить для кожної категорії кількість товарів, середню і максимальну ціну, обчислені в базі даних через
GroupBy, відсортовані за кількістю товарів. - Створити консольну програму C# з EF Core, яка запитує номер сторінки і розмір сторінки (від 1 до 50) та виводить відповідну сторінку списку клієнтів, відсортованих за прізвищем, і загальну кількість сторінок.
- Створити консольну програму C# з EF Core з меню для сутності «Нотатка»: додати, змінити текст, видалити за номером і вивести всі нотатки; зміни зберігаються
SaveChangesAsync, про неіснуючий номер повідомляється. - Створити консольну програму C# з EF Core, яка запитує категорію і відсоток знижки (від 1 до 90) та змінює ціни всіх товарів категорії одним викликом
ExecuteUpdateAsync, виводячи кількість змінених товарів. - Створити консольну програму C# з EF Core, яка переказує суму між двома рахунками в явній транзакції (недостатній залишок скасовує переказ), а конфлікт одночасної зміни рахунку виявляється токеном
xminі обробляється повідомленням.
Тема 9. Мережні застосунки та сокети
- Створити консольні програми TCP-сервер і клієнт: клієнт надсилає введені користувачем рядки, а сервер повертає кожен рядок у зворотному порядку символів разом з його довжиною; порожній рядок завершує сесію, а сервер після відключення клієнта чекає наступного.
- Створити TCP-сервер, який одночасно обслуговує кількох клієнтів, веде лічильник отриманих від усіх клієнтів повідомлень і на кожне повідомлення відповідає його номером, та консольний клієнт; сервер виводить у консоль підключення й відключення клієнтів.
- Створити TCP-сервер оголошень, який розсилає кожне отримане від клієнта повідомлення всім підключеним клієнтам із зазначенням імені відправника, та консольний клієнт з окремою задачею для отримання повідомлень.
- Створити TCP-сервер із протоколом команд
SUM числа,MAX числаіQUIT, що відповідає кодами200,400(неправильні аргументи) і404(невідома команда), та консольний клієнт, який виводить відповіді сервера. - Створити консольні програми, які передають по TCP масив цілих чисел: клієнт надсилає кількість чисел і самі числа в мережному порядку байтів (
BinaryPrimitives), а сервер читає їх методомReadExactlyAsyncі повертає суму та середнє значення. - Створити TCP-сервер і клієнт, які обмінюються повідомленнями JSON (один об’єкт у рядку): клієнт надсилає дані студента (ім’я, група, оцінки), а сервер повертає об’єкт із середнім балом і висновком «зараховано», якщо середній бал не менший за 60.
- Створити UDP-відправник, який надсилає на
127.0.0.1:6200дейтаграми з введеними користувачем рядками, та UDP-приймач, що виводить кожну дейтаграму з адресою відправника й загальною кількістю отриманих дейтаграм. - Створити UDP-сервер, що на широкомовний запит
WHOвідповідає своєю назвою та TCP-портом, і клієнт, який надсилає запит на широкомовну адресу, протягом 3 с збирає відповіді та виводить список знайдених серверів. - Створити TCP-клієнт, який підключається до сервера з тайм-аутом 3 с, чекає на відповідь не довше 5 с і виводить зрозумілі повідомлення для відмови в з’єднанні, тайм-ауту та розриву з’єднання, а також сервер, що відповідає на запит із випадковою затримкою 0–8 с.
- Створити застосунок Windows Forms, який підключається до TCP-сервера за адресою й портом з текстових полів, надсилає рядок із поля введення та показує відповіді сервера в
ListBoxбез блокування інтерфейсу, а також консольний ехо-сервер для перевірки.
Тема 10. Вебсервіси REST
- Створити вебсервіс ASP.NET Core Minimal API «Каталог товарів» з даними в пам’яті та кінцевими точками
GET,POST,PUT,DELETEдля ресурсу/api/products, які повертають коди 200, 201 із заголовкомLocation, 204 і 404. - Створити вебсервіс Minimal API «Розклад занять», у якому маршрут
GET /api/lessons/{day:int:range(1,7)}повертає заняття дня тижня, а запит із номером дня поза діапазоном отримує 404. - Створити вебсервіс Minimal API «Бібліотека», кінцева точка
GET /api/booksякого підтримує параметри рядка запитуauthor,year,pageіpageSize(1–20) і повертає сторінку книг із загальною кількістю знайдених. - Створити вебсервіс Minimal API «Реєстрація на курси», у якому обробники мають типи повернення
Results<Created<T>, Conflict>іResults<Ok<T>, NotFound>, а повторна реєстрація того самого email на курс повертає 409. - Створити вебсервіс Minimal API «Анкети», який за допомогою
AddValidationі атрибутів[Required],[Range],[EmailAddress]перевіряє анкету (ім’я, вік 16–100, email) і повертає помилки у форматіProblemDetails; необроблені винятки також повертаються якProblemDetailsз кодом 500. - Створити вебсервіс Minimal API «Кінотеатр» з групою маршрутів
/api/hallsі вкладеною групою/api/halls/{hallId}/seats, спільними тегами OpenAPI і фільтром кінцевої точки, що записує в журнал метод, адресу і час виконання кожного запиту. - Створити вебсервіс Minimal API «Облік студентів», який зберігає дані в базі даних через EF Core (
AddDbContext), реалізує CRUD-операції асинхронно і повертає список студентів групи, відсортований за прізвищем. - Створити вебсервіс Minimal API «Нотатки» з документом OpenAPI (
AddOpenApi,MapOpenApi) і описами кінцевих точок, а також файл.httpзі змінною адреси, запитами до всіх кінцевих точок і помилковими запитами (400, 404). - Створити консольну програму, яка отримує з вебсервісу
GET /api/ratesкурси валют у форматі JSON за допомогоюHttpClient, запитує в користувача суму і коди валют, виводить результат перерахунку та повідомляє про недоступність сервісу або тайм-аут. - Створити консольну програму з типізованим клієнтом
IHttpClientFactoryдо вебсервісу завдань (GET/POST /api/tasks), яка додає введене користувачем завдання, виводить список таблицею і показує помилки валідації з тілаProblemDetails.
Тема 11. Реальний час із SignalR
- Створити сервер ASP.NET Core SignalR із хабом
NotesHub, метод якого приймає ім’я автора й текст нотатки та розсилає їх усім клієнтам, і консольний клієнт, який запитує ім’я, надсилає введені рядки та виводить отримані нотатки з часом отримання. - Створити сервер SignalR із методом хабу
Roll, який генерує випадкове число від 1 до 6: викликачу (Clients.Caller) надсилається результат, а іншим клієнтам (Clients.Others) – повідомлення «ім’я кинув кубик: N»; консольний клієнт надсилає кидок за командоюroll. - Створити сервер SignalR з групами-кімнатами, у якому клієнт приєднується до кімнати командою
join назва, залишає її командоюleave, а повідомлення отримують лише учасники його кімнати; спроба написати поза кімнатою відхиляєтьсяHubException. - Створити строго типізований хаб
Hub<IWeatherClient>з методом клієнтаWeatherUpdated(city, temperature)і консольний клієнт, у якому користувач вводить місто й температуру (від −60 до 60), а всі клієнти виводять оновлення; некоректні дані відхиляються сервером. - Створити сервер SignalR, який у
OnConnectedAsyncіOnDisconnectedAsyncведе список підключених користувачів (ім’я передається в рядку запиту) у службі-одинаку й надсилає всім оновлений список, та консольний клієнт, що виводить список після кожної зміни. - Створити сервер SignalR з хабом чату (метод
SendMessageрозсилає ім’я й текст усім) і консольний клієнтHubConnection, який отримує адресу хабу та ім’я аргументами командного рядка, перевіряє їх, обробляє недоступність сервера під час запуску з повідомленням у потік помилок і кодом завершення 1, надсилає введені рядки та виводить отримані повідомлення. - Створити сервер SignalR з хабом чату, що розсилає ім’я й текст повідомлення всім клієнтам, і клієнт Windows Forms з полями імені й повідомлення, кнопкою надсилання та списком повідомлень, які додаються з обробника
Onбезпечно для потоку інтерфейсу; під час відсутності з’єднання кнопка надсилання недоступна. - Створити сервер SignalR з хабом, що має методи приєднання до групи й надсилання повідомлення групі, і консольний клієнт з автоматичним перепідключенням, який виводить з часом події
Reconnecting,Reconnected(новий ідентифікатор підключення) іClosedта після перепідключення повторно приєднується до групи, заданої аргументом командного рядка. - Створити сервер SignalR з фоновою службою
BackgroundService, яка кожні 2 с надсилає черезIHubContext<THub>поточний час сервера всім клієнтам, та кінцеву точкуPOST /api/message, що надсилає всім введений текст; консольний клієнт виводить обидва типи повідомлень. - Створити сервер SignalR з потоковим методом хабу, який повертає
IAsyncEnumerable<int>простих чисел до N з паузою 200 мс, і консольний клієнт, що запитує N (від 2 до 10 000), виводить числа в міру надходження і скасовує потік за натисканням Enter.
Тема 12. Основи WPF
- Створити застосунок WPF з формою реєстрації (логін, пароль
PasswordBox, підтвердження пароля, дата народження), розміченою панеллюGridзі стовпцямиAutoі*. Кнопка Register (IsDefault) перевіряє поля й показує помилки вTextBlock, а кнопка Cancel (IsCancel) закриває вікно. - Створити застосунок WPF, головне вікно якого розміщене панеллю
DockPanel: меню вгорі, рядок стану внизу, список міст ліворуч і картка вибраного міста (назва, населення, опис) праворуч з роздільникомGridSplitter. - Створити застосунок WPF з панеллю з дванадцяти кнопок кольорів на
UniformGrid, де один обробник спливаючої подіїClick, підключений до панелі, змінює колір прямокутника попереднього перегляду та показує назву кольору, аe.Handledзупиняє подію. - Створити застосунок WPF з полем для введення номера телефону, у якому тунельна подія
PreviewTextInputпропускає лише цифри, пробіли й початковий+, а подіяPreviewKeyDownзабороняє вставлення тексту клавішами Ctrl+V з повідомленням у рядку стану. - Створити застосунок WPF зі списком завдань
ListBox, полем введення та кнопками Add, Remove і Clear. Порожні завдання й дублікати не додаються, Remove доступна лише для виділеного завдання, а напис показує кількість завдань. - Створити користувацький елемент керування WPF
RatingControlз властивістю залежностіValue(0–10, з примусовим обмеженням) і методом зворотного виклику, що оновлює відображення, та вікно, у якому повзунокSliderприв’язано доValueелемента за допомогоюElementName. - Створити застосунок WPF, у якому клацання по полотну
Canvasдодає коло в точці клацання (приєднані властивостіCanvas.LeftіCanvas.Topзадаються в коді), права кнопка миші видаляє коло під курсором, а напис показує кількість кіл. - Створити застосунок WPF зі списком товарів і модальним вікном додавання товару (назва, ціна, кількість) з кнопками OK і Cancel. Вікно закривається з
DialogResult = trueлише за коректних даних, а головне вікно додає товар і показує загальну вартість. - Створити застосунок WPF «Нотатник» з меню File (Open, Save, Exit), панеллю інструментів і полем тексту, де пункти меню й кнопки використовують вбудовані команди
ApplicationCommands.OpenіSaveз обробникамиExecutedтаCanExecute, а клавіші Ctrl+O і Ctrl+S працюють без додаткового коду. - Створити застосунок WPF, що обирає папку діалогом
OpenFolderDialog, показує список текстових файлів папки вListBox, а після вибору файлу – його вміст у поліTextBoxі розмір у рядку стану; помилки читання показуються вMessageBox.
Тема 13. Прив’язка даних і MVVM
- Створити застосунок WPF, у якому поля імені та прізвища прив’язані до ViewModel з
INotifyPropertyChanged, напис з повним ім’ям оновлюється під час введення, а розмір шрифту напису прив’язаний доSliderчерезElementName. - Створити застосунок WPF за патерном MVVM зі списком студентів (
ObservableCollection<T>), показаних уListBoxчерезDataTemplate, полями додавання студента та командою Add, недоступною за порожнього імені. - Створити застосунок WPF, який показує список товарів з ціною і за допомогою власного
IValueConverterвиводить ціну словами «дешево», «помірно» або «дорого» залежно від меж, переданих параметром конвертера. - Створити застосунок WPF з формою реєстрації (логін, електронна пошта, вік), у якій ViewModel реалізує
INotifyDataErrorInfo, помилки показуються рамкою й підказкою, а кнопка збереження недоступна, поки є помилки. - Створити застосунок WPF зі стилем кнопок у ресурсах вікна, який через
Triggerзмінює шрифт під курсором миші, і стилем на основі першого (BasedOn) для кнопки видалення. - Створити застосунок WPF з круглою кнопкою, вигляд якої задано власним
ControlTemplateзTemplateBindingі тригерамиIsMouseOverтаIsPressed, і перемикачем світлої та темної теми черезDynamicResource. - Створити застосунок WPF за патерном MVVM зі списком міст (назва, область, населення), пошуком під час введення та сортуванням за населенням через
ICollectionView. - Створити застосунок WPF, у якому лічильник збільшується й зменшується командами на основі власного класу
RelayCommand : ICommand, причому команда зменшення недоступна, коли значення дорівнює нулю. - Створити застосунок WPF «Список покупок» на CommunityToolkit.Mvvm з атрибутами
[ObservableProperty]і[RelayCommand], командами додавання й видалення та написом із кількістю позицій. - Створити бібліотеку класів з ViewModel калькулятора знижок на CommunityToolkit.Mvvm, застосунок WPF, який її використовує, і модульні тести xUnit.net, що перевіряють обчислення та недоступність команди за некоректних даних.
Тема 14. Анімація та мультимедіа WPF
- Створити застосунок WPF, у якому логотип із фігур (
Ellipse,Path) з градієнтним пензлем повертається на 360° за 2 с після клацання по ньому; центр повороту – центр логотипа, повторне клацання під час обертання ігнорується. - Створити застосунок WPF, у якому кнопки під курсором плавно збільшуються на 10 % і повертаються до звичайного розміру, коли курсор їх залишає (стиль із тригером
IsMouseOver,EnterActionsіExitActions). - Створити застосунок WPF, у якому прямокутник після натискання кнопки переміщується полотном праворуч за 1 с, змінює колір фону анімацією
ColorAnimationі повертається назад (AutoReverse) двічі; повзунок задає тривалість 0,5–5 с. - Створити застосунок WPF з анімованою смугою завантаження, описаною розкадруванням у ресурсах, і кнопками Start, Pause, Resume, Stop; після завершення рядок стану показує «Done», після паузи – поточний час розкадрування.
- Створити застосунок WPF, у якому повідомлення з’являється згори з відскоком (
ThicknessAnimationзBounceEase), тримається 3 с і зникає анімацією прозорості; кнопка показує повідомлення з введеним текстом, порожній текст не приймається. - Створити застосунок WPF, у якому кулька проходить шлях через чотири ключові кадри (лінійний, дискретний, сплайновий і з пом’якшенням), а список дозволяє вибрати функцію пом’якшення останнього кадру (
BounceEase,ElasticEase,CubicEase). - Створити застосунок WPF, у якому м’ячик, кинутий клацанням миші в напрямку курсора, рухається під дією сили тяжіння і відскакує від стін та підлоги з втратою швидкості; рух обчислюється в
CompositionTarget.Renderingза часом кадру. - Створити застосунок WPF із полем, у якому клацання створює коло, що розширюється й зникає за 1 с (анімація з коду
BeginAnimation); після завершення анімації коло видаляється з полотна. - Створити застосунок WPF-відеоплеєр на
MediaElementз кнопками Play/Pause, Stop, повзунком позиції, що оновлюється таймером і дозволяє перемотування, показом часу та повідомленням у разі помилки відкриття файлу. - Створити застосунок WPF із трьома кнопками звуків, які відтворюють WAV-файли з папки програми класом
MediaPlayer, мають спільний повзунок гучності і показують у рядку стану тривалість звуку або повідомлення про відсутній файл.
Тема 15. Кросплатформний .NET MAUI
- Створити застосунок .NET MAUI з однією сторінкою, на якій
Gridрозміщує поля введення маси й зросту, кнопку Calculate і напис з індексом маси тіла. Кнопки мають явний стиль зx:Key, а кольори тексту задано черезAppThemeBindingдля світлої й темної тем. - Створити застосунок .NET MAUI, який показує в
CollectionViewсписок студентів (прізвище, група, середній бал) з шаблоном елемента,EmptyViewдля порожнього списку й кнопкою Add, що додає студента з полів введення після перевірки даних. - Створити застосунок .NET MAUI зі сторінкою налаштувань, на якій
Switchперемикає темну тему (UserAppTheme),Sliderзадає розмір шрифту зразка тексту, а обрані значення зберігаються вPreferencesі відновлюються після перезапуску. - Створити застосунок .NET MAUI «Лічильник» з ViewModel на CommunityToolkit.Mvvm (
[ObservableProperty],[RelayCommand]), кнопками +1, −1 і Reset та скомпільованими прив’язкамиx:DataType; кнопка −1 недоступна, коли значення дорівнює нулю. - Створити застосунок .NET MAUI з двома сторінками Shell: список міст і сторінка деталей міста. Маршрут сторінки деталей реєструється в
AppShell, назва міста передається рядковим параметром запиту, а сторінка деталей отримує його черезIQueryAttributable. - Створити застосунок .NET MAUI «Нотатки», у якому текст нотатки зберігається у файлі в
FileSystem.AppDataDirectory, завантажується під час появи сторінки, а кнопки Save і Delete зберігають і видаляють файл з повідомленнямDisplayAlertAsync. - Створити застосунок .NET MAUI, який після натискання кнопки перевіряє й запитує дозвіл
Permissions.LocationWhenInUse, отримує координати пристрою черезGeolocationі показує їх з відстанню до Лондона; відмова в дозволі та вимкнена геолокація пояснюються користувачу. - Створити застосунок .NET MAUI, у якому кнопка Pick photo відкриває
MediaPicker, вибране фото показується вImageі копіюється в папку даних застосунку, а кнопка Take photo доступна лише тоді, колиIsCaptureSupportedдорівнюєtrue. - Створити простий вебсервіс ASP.NET Core Minimal API
GET /api/products(назва, ціна) і застосунок .NET MAUI, який черезHttpClientотримує список товарів у форматі JSON, показує його вCollectionViewвсерединіRefreshViewі повідомляє про помилку, якщо сервіс недоступний. - Створити застосунок .NET MAUI, у якому сторінка списку завдань і її ViewModel реєструються в
MauiProgramразом із сервісом зберіганняITaskStore, ViewModel отримує сервіс через конструктор, а завдання додаються, позначаються виконаними й зберігаються у файлі JSON.
Тема 16. Штучний інтелект у .NET
- Створити консольну програму-чат, яка через
IChatClientіз системною інструкцією «консультант книгарні» відповідає українською на питання користувача, а для порожнього введення або недоступної моделі виводить повідомлення про помилку. - Створити консольну програму-чат, яка зберігає історію діалогу в
List<ChatMessage>, обрізає її до 10 останніх повідомлень (системне залишається) і після кожної відповіді виводить кількість вхідних і вихідних токенів. - Створити консольну програму, яка виводить відповідь моделі потоком (
GetStreamingResponseAsync) і дає змогу перервати генерацію натисканням Esc черезCancellationToken, після чого виводить «Скасовано». - Створити консольну програму, яка надсилає однаковий запит із температурою 0 і 1 по три рази (
ChatOptions), обмежує відповідь 100 токенами і виводить відповіді таFinishReasonтаблицею. - Створити консольну програму, яка витягує з введеного тексту оголошення про подію
record EventInfo(назва, дата, місто, ціна абоnull) черезGetResponseAsync<T>, перевіряє дату та ціну кодом і повідомляє про некоректну відповідь моделі. - Створити консольну програму, у якій модель для відповіді про курси валют викликає функцію C#
GetRate(string currency)з курсами в пам’яті; функція перевіряє код валюти з трьох літер і повертає повідомлення про невідому валюту. - Створити консольну програму, яка будує конвеєр
ChatClientBuilderзUseLogging(рівеньDebug) і власним проміжним клієнтом, що вимірює та виводить час кожного запиту до моделі. - Створити консольну програму, яка створює векторні подання десяти речень з файлу і для введеного речення виводить три найближчі з косинусною подібністю, обчисленою
TensorPrimitives.CosineSimilarity. - Створити консольну програму, яка відповідає на питання за текстовим файлом правил: знаходить три найближчі пункти за векторними поданнями, передає їх моделі з інструкцією відповідати лише за ними і виводить відповідь із номерами пунктів.
- Створити бібліотеку класів із сервісом
TicketClassifier, що використовуєIChatClientдля визначення категорії звернення, і модульні тести xUnit з фейковимIChatClient, які перевіряють коректну відповідь, некоректний JSON і недоступність моделі.