Українська
Контрольні завдання
Практичні завдання за темами курсу для перевірки знань. Кожне завдання — окрема програма.
Тема 1. .NET і структура програми
- Створити консольну програму, яка запитує в користувача тривалість фільму у хвилинах (ціле додатне число) та виводить її у форматі «X год Y хв». Некоректне або від’ємне значення відхиляється з повідомленням.
- Створити консольну програму, яка запитує в користувача ціну товару (грн) і знижку у відсотках (від 0 до 100) та виводить суму знижки й ціну до сплати в грошовому форматі.
- Створити консольну програму, яка обчислює площу та периметр рівностороннього трикутника. Довжина сторони передається аргументом командного рядка, а якщо аргументу немає – запитується в користувача; недодатне значення відхиляється.
- Створити консольну програму, яка запитує в користувача довжину в метрах та виводить її в сантиметрах, футах і дюймах з двома знаками після коми.
- Створити консольну програму, яка запитує в користувача рік народження, визначає поточний рік за системною датою та виводить вік користувача й кількість днів до наступного Нового року.
- Створити консольну програму, яка запитує в користувача два дійсних числа та виводить їх суму, різницю, добуток і частку у вигляді вирівняної таблиці; при діленні на нуль замість частки виводиться повідомлення.
- Створити за допомогою dotnet CLI консольний застосунок із методом
Main, який виводить кількість аргументів командного рядка та суму тих аргументів, що є цілими числами. - Створити консольну програму, яка запитує в користувача потужність електроприладу (Вт), кількість годин його роботи на добу та тариф (грн за кВт·год) і виводить вартість електроенергії за 30 днів.
- Створити консольну програму, яка запитує в користувача радіус і висоту циліндричного бака в сантиметрах (додатні числа) та виводить його об’єм у літрах.
- Створити консольну програму, яка запитує в користувача відстань (км) і час у дорозі (години та хвилини) та виводить середню швидкість у км/год і м/с з двома знаками після коми.
Тема 2. Типи, змінні, операції
- Створити консольну програму, яка запитує в користувача кількість хвилин (ціле невід’ємне число) та виводить її у форматі «X діб Y год Z хв», використовуючи цілочисельне ділення та операцію
%. Некоректне значення відхиляється з повідомленням. - Створити консольну програму, яка запитує в користувача ціну товару (грн) і кількість, обчислює в типі
decimalсуму та ПДВ 20 % у її складі й виводить ПДВ, округлений до копійок режимамиMidpointRounding.ToEvenіMidpointRounding.AwayFromZero. - Створити консольну програму, яка запитує в користувача ціле число від 0 до 255 та виводить його двійковий запис із 8 цифр, шістнадцятковий запис, кількість одиничних бітів і число з інвертованими бітами в межах байта.
- Створити консольну програму, яка запитує в користувача температуру за Фаренгейтом та виводить її за Цельсієм і Кельвіном з одним знаком після коми; значення, нижчі за абсолютний нуль, відхиляються з повідомленням.
- Створити консольну програму, яка запитує в користувача два цілі числа типу
intта виводить їх суму й добуток, обчислені в перевіреному контекстіchecked; якщо виникає переповнення, програма повідомляє про нього та виводить результат, обчислений у типіlong. - Створити консольну програму, яка запитує в користувача компоненти кольору R, G, B (0–255), упаковує їх у ціле число зсувами та виводить колір у форматі
#RRGGBBі відтінок сірого 0,299R + 0,587G + 0,114B, округлений до цілого. - Створити консольну програму, яка запитує в користувача масу (кг) і швидкість (км/год) тіла та виводить кінетичну енергію в джоулях і кілоджоулях та імпульс; швидкість переводиться в м/с, некоректні значення відхиляються.
- Створити консольну програму, яка запитує в користувача розмір файлу в байтах (тип
long) та виводить його в КБ, МБ, ГБ (степені 1000) і КіБ, МіБ, ГіБ (степені 1024) з двома знаками після коми. - Створити консольну програму, яка запитує в користувача дійсне число та кількість знаків після коми (0–10) і виводить результати
Math.Roundу режимахToEvenіAwayFromZero, а також результатиMath.Floor,Math.Ceiling,Math.Truncateта явного приведення доint. - Створити консольну програму, яка запитує в користувача суму рахунку (грн), відсоток чайових і кількість осіб та виводить частку кожної особи, округлену вгору до цілої гривні, і загальну суму переплати через округлення.
Тема 3. Розгалуження та цикли
- Створити консольну програму, яка запитує в користувача натуральне число та виводить кількість його цифр, суму цифр і число, записане цифрами у зворотному порядку.
- Створити консольну програму, яка запитує в користувача кількість балів (0–100), повторює запит у разі некоректного введення та виводить оцінку ЄКТС (A – 90–100, B – 80–89, C – 71–79, D – 61–70, E – 50–60, FX – 30–49, F – 0–29), визначену виразом
switchз реляційними шаблонами. - Створити консольну програму, яка запитує в користувача номер місяця та рік і виводить кількість днів у місяці з урахуванням високосного року та назву пори року.
- Створити консольну програму, яка запитує в користувача два натуральні числа та виводить їх найбільший спільний дільник, обчислений алгоритмом Евкліда, і найменше спільне кратне.
- Створити консольну програму, яка зчитує дійсні числа до порожнього рядка, пропускає некоректні значення та виводить кількість додатних і від’ємних чисел, їх середнє арифметичне та найбільше число.
- Створити консольну програму, яка запитує в користувача ціле число n (від 1 до 20) та за допомогою вкладених циклів виводить таблицю множення розміром n × n з вирівняними стовпцями.
- Створити консольну програму, яка запитує в користувача x і точність та обчислює cos x сумою ряду 1 − x2/2! + x4/4! − …, виводячи результат, кількість доданків і значення
Math.Cos. - Створити консольну програму, яка запитує в користувача межі діапазону та виводить усі прості числа з нього і їх кількість, використовуючи оператор
breakдля завершення перевірки дільників. - Створити консольну програму-меню в циклі
do/while, яка виконує над двома введеними числами операції додавання, віднімання, множення та ділення за вибором користувача до вибору пункту «вихід» і повідомляє про ділення на нуль. - Створити консольну програму-гру, у якій комп’ютер загадує випадкове число від 1 до 50, а користувач має 6 спроб, щоб його вгадати; після кожної спроби програма підказує «більше» або «менше».
Тема 4. Масиви та рядки
- Створити консольну програму, яка зчитує цілі числа, введені через пробіл, і виводить масив після циклічного зсуву ліворуч на одну позицію, суму від’ємних елементів та індекс найбільшого елемента.
- Створити консольну програму, яка запитує розмір квадратної матриці n (від 2 до 10), заповнює її випадковими числами від 1 до 99 та виводить матрицю, транспоновану матрицю, суми головної та побічної діагоналей.
- Створити консольну програму, яка запитує кількість рядків і будує зубчастий масив, у якому рядок з номером i містить числа від 1 до i + 1, та виводить його й суму елементів кожного рядка.
- Створити консольну програму, яка запитує речення та виводить кількість слів, найдовше слово й слова в алфавітному порядку без урахування регістру.
- Створити консольну програму, яка зчитує рядок із цілими числами, розділеними комами та пробілами, пропускає некоректні значення і виводить суму, середнє та числа у зростаючому порядку.
- Створити консольну програму, яка запитує рядок і виводить кількість літер, цифр, пробілів та інших символів, а також рядок без повторних пробілів.
- Створити консольну програму, яка шифрує та розшифровує введений текст шифром Цезаря з ключем, введеним користувачем, для латинського алфавіту, зберігаючи регістр і не змінюючи інші символи.
- Створити консольну програму, яка запитує кількість рядків n і за допомогою
StringBuilderбудує та виводить таблицю квадратів і кубів чисел від 1 до n з рамкою та вирівняними стовпцями. - Створити консольну програму, яка зчитує масив цілих чисел, сортує його копію, виводить вихідний і відсортований масиви та для введеного числа виконує бінарний пошук у відсортованому масиві.
- Створити консольну програму, яка запитує слово або фразу та перевіряє, чи є вона паліндромом без урахування регістру, пробілів і розділових знаків.
Тема 5. Методи, параметри, рекурсія
- Створити консольну програму з методом
static bool TryReadInt(string prompt, int min, int max, out int value), який робить до трьох спроб введення числа з діапазону, і продемонструвати його для зчитування віку та кількості дітей. - Створити консольну програму з методом
static void Swap(ref double a, ref double b)і методом, що впорядковує три дійсні числа, введені користувачем, за спаданням. - Створити консольну програму з методом
static double Average(params double[] values), який повертає 0 для порожнього набору, і продемонструвати його виклики з різною кількістю аргументів і з масивом, введеним користувачем. - Створити консольну програму зі статичним класом, що містить перевантажені методи
Maxдля двох і трьох цілих чисел та для масивуdouble[], і продемонструвати їх виклики. - Створити консольну програму з рекурсивним методом обчислення суми цифр і кількості цифр натурального числа, введеного користувачем.
- Створити консольну програму з рекурсивним методом бінарного пошуку в упорядкованому масиві, який повертає індекс знайденого елемента або −1, та продемонструвати його на масиві з 20 випадкових чисел.
- Створити консольну програму з рекурсивним методом, що генерує всі перестановки рядка з різних символів, введеного користувачем (до 6 символів), і виводить їх кількість.
- Створити консольну програму з методом
static double PowerRec(double x, int n), що обчислює степінь рекурсивно (зокрема для від’ємних n), і порівнює результат ізMath.Pow. - Створити консольну програму з методом, що повертає мінімум, максимум і середнє масиву цілих чисел через
out-параметри, та методомTryParseNumbers(string text, out int[] numbers)для розбору введеного рядка. - Створити консольну програму, яка обчислює n-не число Фібоначчі (до 90) рекурсивним методом із мемоізацією та циклом і виводить обидва результати та кількість рекурсивних викликів.
Тема 6. Налагодження та винятки
- Створити консольну програму, яка запитує два цілі числа та виводить результат ділення, перехоплюючи
FormatException,DivideByZeroExceptionіOverflowExceptionокремими блокамиcatchі виводячи в блоціfinallyповідомлення про завершення. - Створити консольну програму з методом
Withdraw(decimal balance, decimal amount), який генеруєArgumentOutOfRangeExceptionдля недодатної суми таInvalidOperationExceptionза нестачі коштів, і продемонструвати перехоплення обох винятків. - Створити консольну програму, яка зчитує рядки з цілими числами до порожнього рядка, пропускає некоректні рядки з повідомленням у
Console.Errorі виводить суму чисел та кількість помилкових рядків. - Створити консольну програму, яка дає користувачеві три спроби ввести число від 1 до 100 і завершується з кодом 1 після трьох невдалих спроб, використовуючи перевірку
int.TryParseбез винятків. - Створити консольну програму з методом
ParseTime(string text), який генеруєFormatExceptionдля рядка не у форматігг:ххіArgumentOutOfRangeExceptionдля годин або хвилин поза межами, та обробкою винятків з фільтромwhen. - Створити консольну програму з власним класом винятку
InvalidGradeException, методом перевірки оцінки від 0 до 100 і обробкою винятку з виведенням некоректного значення. - Створити консольну програму, яка обчислює середнє масиву, введеного рядком, і генерує
InvalidOperationExceptionдля порожнього масиву, а основна програма перехоплює виняток і повторює введення. - Створити консольну програму, яка перетворює рядки з аргументів командного рядка на числа, виводить суму, повідомляє про некоректні аргументи в
Console.Errorі повертає код завершення 0 або 1. - Створити консольну програму, у якій метод розбору рядка обгортає
FormatExceptionу новий виняток із номером рядка таInnerException, а основна програма виводить обидва повідомлення. - Створити консольну програму, яка використовує
Debug.Assertдля перевірки, що масив після сортування впорядкований, іDebug.WriteLineдля трасування кроків сортування вибором.
Тема 7. Класи та об’єкти
- Створити клас
Rectangleз властивостями ширини й висоти з перевіркою додатності, конструкторами (сторона квадрата; ширина й висота) з ланцюжкомthisта обчислюваними властивостями площі й периметра; продемонструвати роботу в консольній програмі. - Створити клас
BankAccountз приватним балансом, властивістю лише для читання, методами поповнення та зняття з винятками й продемонструвати операції з двома рахунками. - Створити клас
Studentз обов’язковими властивостямиrequiredпрізвища й групи, масивом оцінок і обчислюваною властивістю середнього бала; вивести студентів із найвищим середнім балом. - Створити клас
Timeз годинами й хвилинами, перевіркою в конструкторі, методом додавання хвилин, що повертає новий об’єкт, і методомToStringу форматігг:хх. - Створити клас
Bookз властивостямиinitта масив із п’яти книг, створених ініціалізаторами об’єктів; вивести книги, видані після введеного року, у порядку зростання року. - Створити клас
Temperatureз властивістюCelsius, що не дозволяє значення нижче −273,15, і обчислюваними властивостямиFahrenheitтаKelvin; вивести таблицю перетворень. - Створити клас
Counterз мінімальним і максимальним значеннями, заданими в конструкторі, методамиIncrementіDecrement, які не виходять за межі, та властивістюValue. - Створити клас
Productз назвою, ціною та кількістю і класCartз масивом товарів, методом додавання й властивістю загальної вартості; вивести чек. - Створити клас
Pointз координатами, методом відстані до іншої точки та класTriangle, конструктор якого перевіряє, що точки не лежать на одній прямій; вивести периметр і площу. - Створити клас
Stopwatch-подібного таймераLapCounterз масивом кіл, методом додавання кола та методами пошуку найкращого й середнього кола; вивести звіт.
Тема 8. Інкапсуляція та статичні члени
- Створити клас
BankAccountз приватним балансом, інваріантом «баланс невід’ємний», методами поповнення та зняття і методом, що повертає копію історії операцій. - Створити клас
Orderзі статичним лічильником, який присвоює кожному замовленню номерORD-0001,ORD-0002…, і статичною властивістю кількості створених замовлень. - Створити статичний клас
Converterз константами коефіцієнтів і методами переведення довжини, маси й температури та продемонструвати їх виклики черезusing static. - Створити клас
Temperatureіз закритим конструктором і фабричними методамиFromCelsiusтаFromFahrenheit, які не дозволяють значення нижче абсолютного нуля. - Створити клас
Groupз приватним масивом студентів і методом, що повертає захисну копію; показати, що зміна копії не змінює групу. - Створити клас зі статичним конструктором, який ініціалізує поле
static readonlyдатою запуску програми, і продемонструвати порядок виклику статичного та звичайного конструкторів. - Створити клас
Counterз властивістюValueзprivate set, методамиIncrementіResetта статичним полем, що рахує загальну кількість збільшень усіх лічильників. - Створити рішення з бібліотекою класів, що містить публічний клас
Calculatorіinternalклас перевірки аргументів, та консольний застосунок, який використовує калькулятор. - Створити клас
Productз незмінним артикулом, приватною ціною та методом зміни ціни, що не дозволяє зміну більше ніж на 30 %, і статичним методом перевірки формату артикула. - Створити статичний клас
TextUtilsз методами підрахунку слів, перевірки паліндрома та нормалізації пробілів і продемонструвати їх у консольній програмі.
Тема 9. Наслідування та поліморфізм
- Створити базовий клас
Shapeз віртуальними методамиAreaіPerimeterта похідні класиCircle,Rectangle,Triangle; вивести характеристики фігур поліморфного масиву й фігуру з найбільшою площею. - Створити ієрархію
Employee→Manager,Developerз викликомbase(…), віртуальним методом розрахунку зарплати та відомістю для поліморфного масиву. - Створити клас
Pointз перевизначенимиToString,EqualsіGetHashCodeта показати різницю між==іEqualsдля двох точок з однаковими координатами. - Створити ієрархію
Animal→Dog,Catта масив тварин; за допомогою шаблону типуisпідрахувати кількість собак і котів і викликати специфічний метод кожного типу. - Створити класи
LoggerіFileLoggerта продемонструвати різницю між перевизначеннямoverrideі приховуваннямnewпід час виклику через змінні базового та похідного типів. - Створити власний клас винятку
InvalidAgeExceptionз трьома стандартними конструкторами та властивістю з некоректним значенням і продемонструвати його генерування й перехоплення. - Створити ієрархію рахунків
Account→SavingsAccount,CreditAccountз віртуальним методом щомісячного нарахування таprotected-властивістю балансу. - Створити запечатаний клас
Circle, похідний відShape, і показати, що наслідування від нього неможливе; пояснити помилку компілятора в коментарі. - Переробити помилкову ієрархію «автомобіль є двигуном» на композицію: клас
Carз полямиEngineі масивомWheelта методами, що делегують дії частинам. - Створити ієрархію повідомлень
Message→Email,Smsз перевіркою адрес у конструкторах і віртуальним методом вартості та вивести загальну вартість відправлення.
Тема 10. Абстрактні класи, інтерфейси
- Створити абстрактний клас
Shapeз абстрактними методамиAreaіPerimeterта похідні класиCircleіSquare; вивести фігури поліморфного масиву, відсортованого за площею. - Створити абстрактний клас
Reportіз шаблонним методомPrint, який викликає абстрактний метод тіла звіту, і дві реалізації звіту. - Створити інтерфейс
ISwitchableі класиLampіFan, що його реалізують; увімкнути всі пристрої масиву через змінну інтерфейсу. - Створити клас, що реалізує два інтерфейси з однаковим методом
Showза допомогою явної реалізації, і показати, як викликати кожну реалізацію. - Створити клас
Student, що реалізуєIComparable<Student>за середнім балом, і класIComparer<Student>за прізвищем; відсортувати масив обома способами. - Створити клас
LogFile, що реалізуєIDisposable, і продемонструвати викликDisposeв операторіusing, зокрема в разі винятку. - Створити інтерфейс з членом за замовчуванням і два класи, один з яких надає власну реалізацію цього члена; вивести результати виклику через інтерфейс.
- Створити інтерфейси
IFlyableіISwimmableта класи тварин, що реалізують один або обидва; для масиву тварин вивести, хто вміє літати та плавати. - Створити абстрактний клас
Employeeз абстрактним методом розрахунку зарплати та інтерфейсIBonus, який реалізують лише менеджери; обчислити фонд оплати праці. - Створити клас
Book, що реалізуєIEquatable<Book>з перевизначеннямEqualsіGetHashCode, і перевірити рівність двох книг з однаковим ISBN.
Тема 11. Структури, записи, кортежі
- Написати консольну програму з незмінною структурою точки на площині (координати
X,Y) і методом обчислення відстані між точками; показати, що присвоєння копіює значення. - Написати консольну програму, що на прикладі структури й класу
Counterз полем лічильника показує різницю між ними під час присвоєння та передавання в метод. - Написати консольну програму з позиційним записом
Product(назва, ціна), що демонструє рівність значень,ToStringі створення копії зі зміненою ціною виразомwith. - Написати консольну програму з
readonly record struct Temperature(значення в градусах Цельсія), що сортує масив температур і виводить результат. - Написати консольну програму з переліченням днів тижня, що читає день з клавіатури методом
Enum.TryParseз перевіркоюEnum.IsDefinedі виводить його номер або повідомлення про помилку. - Написати консольну програму з переліченням-прапорцями прав доступу (читання, запис, видалення), що демонструє об’єднання, перевірку й вилучення прав.
- Написати консольну програму з автоматом станів світлофора: перелічення станів і вираз
switchвизначають наступний стан; вивести послідовність станів. - Написати консольну програму з методом, що повертає мінімальний і максимальний елементи масиву кортежем; деконструювати результат і вивести його.
- Написати консольну програму з класом
Student(ім’я, група, середній бал) і методомDeconstruct; використати деконструкцію в цикліforeachдля виведення списку студентів. - Написати консольну програму, що класифікує записи
Point(int X, int Y)(початок координат, точка на осі, номер чверті) виразомswitchз позиційними шаблонами та шаблонами властивостей.
Тема 12. Операції та індексатори
- Створити структуру раціонального дробу (чисельник, знаменник) з операціями
+і*та скороченням дробу. Консольна програма обчислює й виводить суму та добуток двох введених дробів. - Створити клас
Point(x, y) з операціями==і!=, узгодженими зEqualsіGetHashCode. Консольна програма порівнює кілька точок і виводить результати. - Створити клас
Moneyіз сумоюdecimalі операціями<та>. Консольна програма сортує масив сум за допомогою цих операцій і виводить його. - Створити структуру
Metersз неявним перетворенням зintі явним перетворенням уint. Консольна програма демонструє обидва перетворення й виводить результати. - Створити клас
Temperaturesз індексатором за номером дня тижня (1–7), що повертає й задає температуру, з перевіркою меж. Консольна програма заповнює тиждень і виводить температури. - Створити клас матриці
doubleз двовимірним індексатором[i, j]і операцією+. Консольна програма додає дві матриці 3×3 і виводить результат. - Створити клас словника термінів з рядковим індексатором, що повертає й задає визначення. Консольна програма виводить визначення введеного терміна.
- Створити методи розширення
IsPalindromeіWordCountдляstring. Консольна програма застосовує їх до введеного рядка й виводить результати. - Створити методи розширення
IsEvenіDigits(масив цифр числа) дляint. Консольна програма в циклі виводить для кількох чисел парність і цифри. - Створити блок
extensionдляDateTimeз властивістюIsWeekend. Консольна програма виводить дати наступних 14 днів з позначкою вихідних.
Тема 13. Узагальнення та колекції
- Створити узагальнений метод
FindMin<T>з обмеженнямIComparable<T>і застосувати його до масивів чисел і рядків. - Створити узагальнений клас
Box<T>з методомTryGet(out T value), що повертаєdefault, коли коробка порожня. - Створити узагальнений клас-контейнер
Storage<T> where T : classз додаванням, пошуком і виведенням елементів. - Написати консольну програму, що в
List<T>товарів (назва, ціна) додає, вставляє й видаляє елементи, сортує список порівнювачемIComparer<T>за ціною й виводить результат. - Написати консольну програму, що підраховує частоту слів введеного тексту без урахування регістру за допомогою
Dictionary<string, int>і виводить слова з частотами. - Написати консольну програму, що за допомогою
HashSet<T>знаходить і виводить спільні елементи двох введених масивів чисел та елементи, що є лише в одному з них. - Написати консольну програму, що перевіряє правильність дужок
(),[],{}у введеному рядку за допомогоюStack<char>і виводить результат. - Написати консольну програму, що моделює обслуговування клієнтів: звичайних – у
Queue<T>, пріоритетних – уPriorityQueue<TElement, TPriority>за рівнем пріоритету, та виводить порядок обслуговування. - Написати консольну програму, що заповнює
LinkedList<T>рядками, вставляє елемент після знайденого вузла, видаляє заданий вузол і виводить список. - Написати консольну програму з методом-ітератором
yield return, що повертає числа Фібоначчі, не більші за введене число, і виводить їх.
Тема 14. Делегати, лямбди, події
- Написати консольну програму, що оголошує тип делегата для бінарної операції над цілими числами, викликає через нього три різні методи (сума, добуток, степінь) і виводить результати.
- Створити груповий делегат
Action<string>з трьома методами, вилучити один метод і викликати делегат. - Створити метод табулювання функції з параметром
Func<double, double>і викликати його для методу бібліотеки й лямбда-виразу. - Написати консольну програму, що зі списку цілих чисел відбирає (
FindAll) і вилучає (RemoveAll) елементи за умовамиPredicate<int>, заданими лямбда-виразами, та виводить результати. - Створити запис
Student(прізвище, бал) і відсортувати список студентів методомSortз лямбдоюComparison<Student>за балом за спаданням, а за рівних балів – за прізвищем; вивести результат. - Створити функцію вищого порядку, що повертає композицію двох функцій
Func<double, double>. - Створити замикання-лічильник і продемонструвати незалежність двох лічильників.
- Написати консольну програму, що демонструє пастку захоплення змінної циклу
forу лямбдах, збережених уList<Action>, і виправляє її локальною копією змінної. - Створити клас
Thermometerз подієюTemperatureChangedза шаблономEventHandler<TEventArgs>(власнийEventArgsзі старою й новою температурою) і двома підписниками, що виводять зміни. - Створити подію без даних (
EventHandler), підписатися на неї методом і лямбдою, збереженою у змінній, та відписатися обома способами.
Тема 15. LINQ
- Написати консольну програму зі списком товарів (record
Product: назва, категорія, ціна). Відібрати товари введеної категорії, відсортувати за ціною та вивести назви й ціни анонімними об’єктами (Select). - Написати консольну програму зі списком студентів (ПІБ, група, бал). Відібрати студентів введеної групи з балом від 60, відсортувати за балом і вивести ПІБ; запит записати в синтаксисі методів і в синтаксисі запитів.
- Написати консольну програму зі списком оцінок студентів (ПІБ, бал). Обчислити кількість, середнє, мінімум і максимум балів і знайти студента з найвищим балом (
MaxBy). - Написати консольну програму зі списком замовлень (клієнт, дата, сума). Згрупувати замовлення за клієнтами (
GroupBy) і вивести кількість і суму замовлень кожного клієнта. - Написати консольну програму зі списками груп (ідентифікатор, назва) і студентів (ПІБ, ідентифікатор групи). З’єднати їх (
Join) і вивести назву групи для кожного студента. - Написати консольну програму зі списками відділів (ідентифікатор, назва) і співробітників (ПІБ, ідентифікатор відділу). Використовуючи
GroupJoinабоLeftJoin, вивести всі відділи з кількістю співробітників, зокрема порожні. - Написати консольну програму з двома списками імен відвідувачів виставки (перший і другий день). Знайти відвідувачів обох днів, усіх відвідувачів і тих, хто був лише першого дня (
Intersect,Union,Except). - Написати консольну програму, що виводить список із 50 товарів (назва, ціна) посторінково по 10 записів: користувач вводить номер сторінки, вибірка – через
SkipіTake. - Написати консольну програму зі списком чисел, що демонструє відкладене виконання LINQ-запиту: змінити список після створення запиту й показати різницю між повторним переліком запиту та результатом, зафіксованим
ToList. - Написати консольну програму, що зчитує текст із консолі, підраховує частоту слів без урахування регістру (
CountBy) і виводить п’ять найчастіших.
Тема 16. Файли, потоки та JSON
- Написати консольну програму, що записує масив рядків у текстовий файл, читає файл і виводить кількість рядків і слів.
- Написати консольну програму, що читає CSV-файл з числами, записаними з крапкою (
CultureInfo.InvariantCulture), пропускає помилкові рядки й виводить суму. - Написати консольну програму, що для введеного каталогу виводить файли з підкаталогами, їхні розміри та загальний розмір.
- Написати консольну програму журналу подій, що дописує введені події з часом у текстовий файл через
StreamWriterу режимі дописування й виводить журнал черезStreamReader. - Написати консольну програму, що записує в двійковий файл записи товарів фіксованої довжини (код, ціна) і читає запис за введеним номером.
- Написати консольну програму, що читає текстовий файл за введеним шляхом і обробляє винятки
FileNotFoundException,DirectoryNotFoundExceptionтаIOExceptionз повідомленнями. - Написати консольну програму, що серіалізує список студентів (ім’я, група, середній бал) у JSON з відступами й назвами в camelCase, десеріалізує його й виводить.
- Створити клас налаштувань застосунку зі значеннями за замовчуванням і атрибутами
[JsonPropertyName]та[JsonIgnore]. Консольна програма зберігає налаштування в JSON і читає їх назад. - Написати консольну програму, що зберігає в JSON список завдань з пріоритетом-переліченням, записаним назвами за допомогою
JsonStringEnumConverter, і читає його назад. - Написати консольну програму, що безпечно зберігає список нотаток у файл через тимчасовий файл і
File.Move, а під час запуску читає їх, якщо файл існує.
Тема 17. SOLID і шаблони проєктування
- Створити консольну програму, у якій клас
OrderProcessorрозраховує суму замовлення, зберігає його у файл і надсилає сповіщення; виявити порушення принципу єдиної відповідальності та розділити клас на калькулятор, репозиторій і сповіщувач. Обробити замовлення й вивести результат. - Створити консольну програму розрахунку площ фігур (коло, прямокутник, трикутник), у якій
switchза типом фігури замінено поліморфізмом відповідно до принципу відкритості/закритості. Вивести площі списку фігур. - Створити консольну програму з ієрархією
Rectangle/Square, що показує порушення принципу підстановки Лісков, і виправити ієрархію. Вивести результати поліморфного коду до й після виправлення. - Створити консольну програму, у якій «товстий» інтерфейс пристрою
IMachine(друк, сканування, факс) розділено відповідно до принципу розділення інтерфейсів; простий принтер і багатофункціональний пристрій реалізують лише потрібні інтерфейси. - Створити консольну програму, у якій сервіс замовлень отримує репозиторій і сповіщувач (інтерфейси) через конструктор, а об’єкти збираються в композиційному корені. Оформити замовлення й вивести результат.
- Створити консольну програму з шаблоном «Стратегія» для розрахунку вартості доставки (стандартна, експрес, самовивіз). Користувач вводить вагу посилки й обирає спосіб, програма виводить вартість.
- Створити консольну програму з шаблоном «Декоратор»: до напою (назва, ціна) додаються молоко й сироп, що змінюють опис і ціну. Вивести кілька напоїв з різними добавками.
- Створити консольну програму з шаблоном «Спостерігач» на основі інтерфейсу або подій: акція змінює ціну, а підписники (дисплей, журнал) отримують сповіщення. Змінити ціну кілька разів і вивести сповіщення.
- Створити консольну програму з шаблоном «Команда» для текстового редактора: команди вставки й видалення тексту з методами
ExecuteіUndoта історія команд. Виконати й скасувати кілька команд, виводячи текст. - Створити консольну програму з шаблоном «Фабричний метод» (створення транспорту за назвою) або «Адаптер» (сторонній термометр у градусах Фаренгейта під інтерфейс у градусах Цельсія). Продемонструвати роботу через спільний інтерфейс.
Тема 18. Тестування та рефакторинг
- Створити метод обчислення площі прямокутника і тести MSTest за шаблоном Arrange–Act–Assert.
- Створити метод визначення високосного року і параметризований тест MSTest з
[DataRow]. - Створити метод переведення 100-бальної оцінки у «відмінно», «добре», «задовільно», «незадовільно», підібрати граничні значення й написати тести MSTest.
- Створити метод з перевіркою діапазону аргументу і тест MSTest, що перевіряє генерування
ArgumentOutOfRangeExceptionдля некоректного аргументу. - Створити метод з результатом
double(наприклад, площа круга) і тест MSTest з допуском. - Створити інтерфейс репозиторію, сервіс, що його використовує, і фейкову реалізацію репозиторію в пам’яті для тестів MSTest сервісу.
- Створити метод, що залежить від поточного часу через
TimeProvider(наприклад, привітання за часом доби), і тести MSTest зFakeTimeProvider. - Розробити через TDD метод перевірки паліндрома, показавши послідовність тестів.
- Написати метод розрахунку вартості замовлення з «запахами коду» (довгий метод, магічні числа) і виконати рефакторинг Extract Method та Introduce Constant.
- Написати метод з невдалими іменами змінних, характеризаційні тести MSTest для нього і перейменувати змінні та метод без зміни поведінки.