Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Кути
1. Початковий рівень. Створити структуру Angle з кутом у градусах, нормалізацією до діапазону [0; 360) і операціями + та -. Консольна програма обчислює й виводить суму та різницю кількох кутів.
2. Базовий рівень. Створити структуру Angle (градуси, нормалізовані до [0; 360)) з операціями +, -, множенням на число, порівняннями ==, !=, <, > (узгодженими з Equals і IComparable<Angle>) та явним перетворенням у double радіан. Консольна програма обчислює курс після серії введених поворотів і виводить відсортовані кути.
3. Високий рівень. Створити бібліотеку кутів з градусами, хвилинами й секундами, розбором рядка 47°30'15", неявним перетворенням з double і операціями. Застосунок dotnet CLI обчислює азимути маршруту зі стандартного введення й виводить поворот на кожній точці; помилки – у Console.Error.
Варіант 2. 3D-вектори
1. Початковий рівень. Створити структуру Vector3 (x, y, z) з операціями +, - і множенням на число з обох боків. Консольна програма обчислює й виводить суму кількох сил, що діють на тіло.
2. Базовий рівень. Створити структуру Vector3 (x, y, z) з операціями +, -, ==/!=, множенням на число, скалярним і векторним добутками, довжиною, нормалізацією та індексатором [int axis] (0 – x, 1 – y, 2 – z) з перевіркою меж. Консольна програма за трьома введеними точками виводить площу трикутника й нормаль до площини.
3. Високий рівень. Створити бібліотеку тривимірної геометрії з векторами, точками й операціями між ними (різниця точок – вектор, точка + вектор – точка). Застосунок dotnet CLI обчислює об’єм тетраедра й відстань від точки до площини для даних зі стандартного введення; помилки – у Console.Error.
Варіант 3. Кільцевий буфер
1. Початковий рівень. Створити клас RingBuffer цілих чисел фіксованої місткості з методом Add, що витісняє найстаріший елемент, та індексатором лише для читання, де індекс 0 – найстаріший елемент. Консольна програма додає більше елементів, ніж місткість, і виводить буфер.
2. Базовий рівень. Створити клас RingBuffer фіксованої місткості (метод Add витісняє найстаріший елемент) з властивістю Count, індексатором із перевіркою меж, індексами з кінця (buffer[^1]) і методом Slice для діапазонів. Консольна програма зберігає останні 10 введених вимірювань і виводить ковзне середнє останніх трьох.
3. Високий рівень. Створити бібліотеку кільцевого буфера з методами розширення для статистики (мінімум, максимум, медіана) і блоком extension з властивістю IsFull. Застосунок dotnet CLI обробляє потік чисел зі стандартного введення й виводить аномалії, що відхиляються від ковзного середнього; помилки – у Console.Error.
Варіант 4. Часові ряди курсу валют
1. Початковий рівень. Створити клас RateSeries курсу валюти з індексатором за датою DateOnly, що повертає й задає курс. Консольна програма заповнює курси за тиждень і виводить курс на введену дату.
2. Базовий рівень. Створити клас RateSeries поденних курсів валюти з індексаторами за датою DateOnly і за номером дня, операцією - двох рядів (поденна різниця курсів) і множенням ряду на число. Консольна програма виводить зміну курсу за період і різницю між двома валютами.
3. Високий рівень. Створити бібліотеку часових рядів із заповненням пропусків, методами розширення для ковзного середнього й максимального спаду. Застосунок dotnet CLI обробляє CSV курсів зі стандартного введення й виводить звіт за період з аргументів; помилки – у Console.Error.
Варіант 5. Рейтингові бали
1. Початковий рівень. Створити структуру Score зі значенням 0–100 і операцією +, що не перевищує 100 (насичення). Консольна програма додає до бала кілька бонусів і виводить результат.
2. Базовий рівень. Створити структуру Score зі значенням 0–100, операціями + і - з насиченням до меж, порівнянням, неявним перетворенням з int із перевіркою діапазону та явним у double. Консольна програма нараховує бали студентам за введені активності й виводить рейтинг.
3. Високий рівень. Створити бібліотеку рейтингу з checked-операціями (переповнення – виняток) і звичайними (насичення), власним складеним присвоєнням +=. Застосунок dotnet CLI обробляє журнал нарахувань зі стандартного введення в режимі --strict або звичайному; помилки – у Console.Error; коди завершення: 0, 1, 2.
Варіант 6. Довге ціле
1. Початковий рівень. Створити клас BigNumber, що зберігає цифри невід’ємного числа в масиві, з конструктором із рядка, операцією + і ToString. Консольна програма додає два введені 30-значні числа й виводить суму.
2. Базовий рівень. Створити клас BigNumber невід’ємного довгого цілого (цифри в масиві, конструктор із рядка) з операціями +, *, порівнянням, індексатором цифри за розрядом і неявним перетворенням з long. Консольна програма обчислює й виводить факторіал 50 і числа Фібоначчі до 200-го.
3. Високий рівень. Створити бібліотеку довгих цілих BigNumber зі знаком (цифри в масиві, розбір рядка) з операціями +, -, *, діленням з остачею (/, %), порівнянням і IComparable<BigNumber>. Застосунок dotnet CLI обчислює вираз з двома операндами й операцією з аргументів і перевіряє результат через System.Numerics.BigInteger; помилки – у Console.Error.
Варіант 7. Тривалість треків
1. Початковий рівень. Створити структуру Duration з хвилинами й секундами та операцією + з перенесенням секунд у хвилини. Консольна програма обчислює й виводить загальну тривалість треків альбому.
2. Базовий рівень. Створити структуру Duration (хвилини, секунди) з операціями +, -, множенням на ціле, порівнянням, операціями true/false (ненульова тривалість) і розбором рядка 3:45. Консольна програма з введених треків формує й виводить плейлист заданої тривалості.
3. Високий рівень. Створити бібліотеку медіатеки з тривалістю, записами треків і методами розширення для масивів треків (сумарна тривалість, найдовший). Застосунок dotnet CLI розподіляє треки зі стандартного введення на дві сторони платівки з мінімальною різницею тривалостей; помилки – у Console.Error.
Варіант 8. Температура
1. Початковий рівень. Створити структуру Celsius з операціями + і - для різниці температур та порівнянням. Консольна програма обчислює й виводить середню й максимальну температуру за тиждень.
2. Базовий рівень. Створити структури Celsius, Fahrenheit і Kelvin з явними й неявними перетвореннями між шкалами та перевіркою абсолютного нуля (виняток). Консольна програма перетворює введені температури із заданої шкали в дві інші й виводить результат.
3. Високий рівень. Створити бібліотеку температур, у якій операції між різними шкалами працюють через перетворення, і методи розширення для double (25.0.Celsius). Застосунок dotnet CLI обробляє вимірювання в різних шкалах зі стандартного введення й виводить статистику; помилки – у Console.Error.
Варіант 9. Множина символів
1. Початковий рівень. Створити клас CharSet з індексатором bool this[char c] для перевірки й зміни належності символу. Консольна програма будує множину голосних і виводить голосні введеного слова.
2. Базовий рівень. Створити клас множини символів CharSet з індексатором bool this[char c], операціями | (об’єднання), & (перетин), - (різниця), ==/!= і неявним перетворенням з рядка. Консольна програма порівнює набори літер двох введених слів і виводить спільні й відмінні літери.
3. Високий рівень. Створити бібліотеку множин символів для всієї таблиці Unicode BMP на основі бітового масиву з операцією ^ і методами розширення для рядків. Застосунок dotnet CLI знаходить слова зі стандартного введення, складені лише з літер заданого набору; помилки – у Console.Error.
Варіант 10. Камери схову
1. Початковий рівень. Створити клас LockerBank з рядковим індексатором ["B3"] (ряд – літера, номер – число), що повертає й задає вміст комірки. Консольна програма кладе й забирає кілька речей і виводить стан комірок.
2. Базовий рівень. Створити клас камер схову LockerBank з індексаторами за позначенням ["B3"] і за рядом та номером, перевіркою позначень із винятком і пошуком вільної комірки. Консольна програма обслуговує клієнтів за введеними командами: покласти, забрати, показати вільні комірки.
3. Високий рівень. Створити бібліотеку камер схову з комірками різних розмірів, тарифами й часом зберігання та методами розширення для звітів. Застосунок dotnet CLI обробляє журнал подій зі стандартного введення й виводить виручку та заповненість; помилки – у Console.Error.
Варіант 11. Розклад тижня
1. Початковий рівень. Створити клас Timetable з індексатором [DayOfWeek day, int pair], що повертає й задає назву дисципліни. Консольна програма заповнює розклад на тиждень і виводить його.
2. Базовий рівень. Створити клас Timetable з індексаторами [DayOfWeek day, int pair] і ["Пн", 2], що повертають назву дисципліни, перевіркою номерів пар і методом розширення ToUkrainianShort для DayOfWeek. Консольна програма виводить розклад на тиждень таблицею та вільні пари.
3. Високий рівень. Створити бібліотеку розкладу з парними й непарними тижнями, індексатором за датою й номером пари та перевіркою конфліктів аудиторій. Застосунок dotnet CLI виводить розклад на дату з аргументів; помилки – у Console.Error.
Варіант 12. Телефонна книга
1. Початковий рівень. Створити клас PhoneBook з рядковим індексатором за іменем, що повертає й задає номер телефону. Консольна програма додає кілька контактів і виводить номер за введеним іменем.
2. Базовий рівень. Створити клас PhoneBook з індексаторами за іменем (з обробкою відсутнього імені) і за номером запису та методи розширення для string: нормалізацію й форматування номера телефону. Консольна програма в меню додає контакти й шукає номер за іменем.
3. Високий рівень. Створити бібліотеку контактів з кількома номерами на контакт, індексатором [name, kind] і блоком extension з властивістю IsMobile для рядка номера. Застосунок dotnet CLI імпортує контакти зі стандартного введення й виводить нормалізований довідник; помилки – у Console.Error.
Варіант 13. Розширення масивів
1. Початковий рівень. Створити статичний клас з методами розширення для int[]: Sum, Average і Print. Консольна програма застосовує їх до кількох масивів і виводить результати.
2. Базовий рівень. Створити методи розширення для double[]: Shuffle(Random random), ChunkBy(int size) і IsSorted. Консольна програма перемішує введений масив із фіксованим зерном, розбиває його на групи заданого розміру, перевіряє впорядкованість і виводить результати.
3. Високий рівень. Створити бібліотеку розширень масивів із блоком extension (властивості IsEmpty, Middle, статичний метод Range) і класичними методами. Застосунок dotnet CLI застосовує до чисел зі стандартного введення операції з аргументів; помилки – у Console.Error.
Варіант 14. Розширення тривалостей
1. Початковий рівень. Створити методи розширення Minutes() і Hours() для int, що повертають TimeSpan, і метод ToUkrainian() для TimeSpan (1 год 30 хв). Консольна програма виводить кілька тривалостей.
2. Базовий рівень. Створити методи розширення int.Minutes(), int.Hours() і double.Seconds(), що повертають TimeSpan, а також TimeSpan.RoundTo(TimeSpan step), TimeSpan.ToUkrainian() і розбір рядків 1 год 30 хв. Консольна програма підсумовує тривалості, введені в різних форматах, і виводить округлену суму.
3. Високий рівень. Створити бібліотеку розширень у блоках extension з властивістю TimeSpan.IsWorkingDay (не більше 8 год) і статичним методом TimeSpan.ParseUkrainian. Застосунок dotnet CLI обробляє табель робочого часу зі стандартного введення й виводить переробки; помилки – у Console.Error.
Варіант 15. Кольори
1. Початковий рівень. Створити структуру Color з каналами RGB (0–255) і операцією + з насиченням до 255. Консольна програма змішує кілька кольорів і виводить результат.
2. Базовий рівень. Створити структуру Color з каналами RGB, операцією + з насиченням до 255, множенням на коефіцієнт яскравості, індексаторами каналів [0..2] і ["R"], операціями ==/!= та неявним перетворенням з uint (0xRRGGBB). Консольна програма будує й виводить градієнт між двома введеними кольорами.
3. Високий рівень. Створити бібліотеку кольорів з альфа-каналом, накладанням операцією * за правилом «source over» і явним перетворенням у відтінки сірого. Застосунок dotnet CLI накладає шари кольорів зі стандартного введення й виводить результат; помилки – у Console.Error.
Варіант 16. Кватерніони
1. Початковий рівень. Створити структуру Quaternion з чотирма компонентами, операціями + і * та ToString. Консольна програма показує некомутативність множення, виводячи a * b і b * a.
2. Базовий рівень. Створити структуру Quaternion (w, x, y, z) з операціями +, *, /, ==/!=, спряженням, нормою й оберненим кватерніоном. Консольна програма перевіряє та виводить тотожності i² = j² = k² = ijk = −1.
3. Високий рівень. Створити бібліотеку поворотів: кватерніон з осі й кута, поворот 3D-точки, композиція поворотів операцією *. Застосунок dotnet CLI повертає точки зі стандартного введення за послідовністю поворотів з аргументів; помилки – у Console.Error.
Варіант 17. Електричні величини
1. Початковий рівень. Створити структури Voltage, Current і Resistance з операцією /, що за законом Ома повертає Current (Voltage / Resistance). Консольна програма обчислює й виводить струм у колі за введеними напругою й опором.
2. Базовий рівень. Створити структури Voltage, Current, Resistance і Power з операціями закону Ома (Voltage / Resistance, Current * Resistance, Voltage * Current → Power), додаванням однорідних величин і явними перетвореннями в double. Консольна програма розраховує просте коло за введеними даними й виводить струм, напругу та потужність.
3. Високий рівень. Створити бібліотеку електричних величин з префіксами (мА, кОм), розбором рядків і розрахунком послідовних та паралельних з’єднань. Застосунок dotnet CLI обчислює коло, описане у стандартному введенні; помилки – у Console.Error.
Варіант 18. Кошик товарів
1. Початковий рівень. Створити клас Cart з рядковим індексатором за артикулом, що повертає й задає кількість товару. Консольна програма заповнює кошик і виводить його вміст.
2. Базовий рівень. Створити клас Cart з рядковим індексатором кількості за артикулом (кількість 0 видаляє товар, від’ємна – виняток) і методи розширення для кошика Total і MostExpensive за довідником цін. Консольна програма виконує введені команди покупця й виводить кошик та суму.
3. Високий рівень. Створити бібліотеку кошика з цінами у структурі грошей з операціями, знижками й блоком extension з властивістю IsFreeDelivery. Застосунок dotnet CLI обробляє замовлення зі стандартного введення й виводить чек; помилки – у Console.Error.
Варіант 19. Бітовий масив
1. Початковий рівень. Створити клас Bits фіксованої довжини з індексатором bool this[int i] на основі масиву ulong. Консольна програма встановлює кілька бітів і виводить значення перевірених бітів.
2. Базовий рівень. Створити клас Bits фіксованої довжини на основі масиву ulong з індексатором bool this[int i], операціями &, |, ^, ~, ==/!=, властивістю кількості встановлених бітів і ToString у вигляді рядка з 0 та 1. Консольна програма реалізує решето Ератосфена й виводить прості числа до введеної межі.
3. Високий рівень. Створити бібліотеку бітових масивів змінної довжини з підтримкою ^1 і діапазонів та неявним перетворенням з рядка. Застосунок dotnet CLI обчислює побітові вирази з аргументів; помилки – у Console.Error.
Варіант 20. Розріджений вектор
1. Початковий рівень. Створити клас SparseVector, що зберігає лише ненульові елементи в масивах індексів і значень, з індексатором для читання та запису. Консольна програма заповнює кілька елементів вектора довжини 1 000 000 і виводить їх.
2. Базовий рівень. Створити клас SparseVector (ненульові елементи в масивах індексів і значень, індексатор) з операцією +, множенням на число, скалярним добутком і кількістю ненульових елементів. Консольна програма порівнює пам’ять і результати зі щільним масивом double[] і виводить їх.
3. Високий рівень. Створити бібліотеку розріджених векторів і матриць з індексатором [i, j] та множенням матриці на вектор. Застосунок dotnet CLI розв’язує задачу PageRank для графа зі стандартного введення; помилки – у Console.Error.
Варіант 21. Числові інтервали
1. Початковий рівень. Створити структуру Interval з нижньою й верхньою межами та операцією & (перетин). Консольна програма знаходить і виводить перетин кількох введених інтервалів.
2. Базовий рівень. Створити структуру Interval з межами й операціями & (перетин), | (об’єднання інтервалів, що перетинаються), + (зсув на число), порівнянням і методом Contains. Консольна програма об’єднує введені інтервали зайнятості й виводить результат.
3. Високий рівень. Створити бібліотеку інтервальної арифметики (+, -, *, / над інтервалами) з урахуванням відкритих і закритих меж. Застосунок dotnet CLI обчислює інтервал значень виразу для вхідних даних з похибками зі стандартного введення; помилки – у Console.Error.
Варіант 22. Гістограма
1. Початковий рівень. Створити клас Histogram із заданою кількістю кошиків на відрізку [a; b] та індексатором за номером кошика. Консольна програма заповнює гістограму випадковими числами з фіксованим зерном і виводить кількості в кошиках.
2. Базовий рівень. Створити клас Histogram із заданою кількістю кошиків на відрізку, індексаторами за номером кошика й за значенням double, операцією + для об’єднання гістограм з однаковими межами та виведенням зірочками. Консольна програма порівнює й виводить гістограми двох вибірок.
3. Високий рівень. Створити бібліотеку гістограм з методами розширення для масивів double (ToHistogram) і нормуванням. Застосунок dotnet CLI будує гістограму чисел зі стандартного введення з кількістю кошиків з аргументів; помилки – у Console.Error.
Варіант 23. Електронна таблиця
1. Початковий рівень. Створити клас Sheet з рядковим індексатором ["B3"], що зберігає числа клітинок. Консольна програма заповнює кілька клітинок і виводить таблицю.
2. Базовий рівень. Створити клас Sheet числових клітинок з індексаторами ["B3"] і [row, col], перевіркою адрес і методом суми діапазону Sum("A1:B3"). Консольна програма виконує введені команди присвоєння й обчислення суми та виводить таблицю.
3. Високий рівень. Створити бібліотеку електронної таблиці з формулами =A1+B2*2, перерахунком залежних клітинок і виявленням циклічних посилань. Застосунок dotnet CLI обробляє команди зі стандартного введення й виводить таблицю; помилки – у Console.Error.
Варіант 24. Дуальні числа
1. Початковий рівень. Створити структуру Dual (a + bε, ε² = 0) з операціями +, - і *. Консольна програма обчислює й виводить добуток двох дуальних чисел.
2. Базовий рівень. Створити структуру дуальних чисел Dual (a + bε, ε² = 0) з операціями +, -, *, /, неявним перетворенням з double і функціями Sin, Exp. Консольна програма обчислює значення й похідну функції f(x) = x³ + sin x у введеній точці.
3. Високий рівень. Створити бібліотеку автоматичного диференціювання на основі дуальних чисел і метод Ньютона для розв’язання рівнянь. Застосунок dotnet CLI знаходить корені кількох функцій з вибором функції в аргументах і порівнює похідні з чисельними; помилки – у Console.Error.
Варіант 25. Модульна арифметика
1. Початковий рівень. Створити структуру ModInt з модулем 7 і операціями +, - та *. Консольна програма виводить таблицю множення за модулем 7.
2. Базовий рівень. Створити структуру ModInt з довільним простим модулем, операціями +, -, *, / через обернений елемент, піднесенням до степеня й перевіркою однакових модулів. Консольна програма розв’язує введене лінійне порівняння ax ≡ b (mod p) і виводить x.
3. Високий рівень. Створити бібліотеку модульної арифметики з неявним перетворенням з long, checked-операціями та простим RSA на малих числах. Застосунок dotnet CLI шифрує й розшифровує числа зі стандартного введення; помилки – у Console.Error.
Варіант 26. Шкали оцінок
1. Початковий рівень. Створити структури Points100 (0–100) і Grade5 (2–5) з явним перетворенням Points100 → Grade5. Консольна програма переводить кілька балів в оцінки й виводить їх.
2. Базовий рівень. Створити структури Points100 (0–100) і Grade5 (2–5) з явним перетворенням Points100 → Grade5, неявним Grade5 → Points100 (нижня межа), операціями порівняння та перетворенням в оцінку ЄКТС. Консольна програма виводить відомість студентів у трьох шкалах.
3. Високий рівень. Створити бібліотеку шкал оцінювання з конфігурованими межами й методами розширення для масивів балів. Застосунок dotnet CLI перераховує відомість зі стандартного введення між шкалами з аргументів; помилки – у Console.Error.
Варіант 27. Відсотки
1. Початковий рівень. Створити структуру Percent з операцією множення decimal * Percent, що повертає частку суми. Консольна програма обчислює знижку для кількох цін і виводить ціни зі знижкою.
2. Базовий рівень. Створити структуру Percent з операціями decimal * Percent і +, неявним перетворенням з decimal, явним у double, розбором рядка 12,5 % і порівнянням. Консольна програма обчислює й виводить ціну після кількох введених знижок.
3. Високий рівень. Створити бібліотеку фінансових розрахунків з Percent, методами розширення для decimal (AddPercent, PercentOf) і складними відсотками. Застосунок dotnet CLI обчислює графік накопичення за параметрами з аргументів; помилки – у Console.Error.
Варіант 28. Ігрове поле
1. Початковий рівень. Створити клас Grid з двовимірним індексатором [x, y] символів. Консольна програма заповнює поле 10×10 стінами й порожніми клітинками та виводить його.
2. Базовий рівень. Створити клас поля символів Grid з індексаторами [x, y] і за структурою Point з перевіркою меж, методом розширення Print і пошуком сусідніх клітинок. Консольна програма реалізує заливку області з введеної точки й виводить поле.
3. Високий рівень. Створити бібліотеку ігрового поля з тороїдальними індексами (вихід за межі – з протилежного боку) і блоком extension для char (IsWall, IsFree). Застосунок dotnet CLI шукає найкоротший шлях у лабіринті зі стандартного введення; помилки – у Console.Error.
Варіант 29. Гроші в копійках
1. Початковий рівень. Створити структуру Kopecks зі значенням long (сума в копійках) та операціями + і -. Консольна програма обчислює суму покупок і виводить її у гривнях і копійках.
2. Базовий рівень. Створити структуру Kopecks зі значенням long (сума в копійках) з операціями +, - та їх checked-версіями, множенням на ціле, порівнянням і розбором рядка 12,50. Консольна програма показує різницю поведінки операцій у контекстах checked і unchecked.
3. Високий рівень. Створити клас гаманця з власними складеними операціями += і -= (C# 14) без створення нового об’єкта та перевіркою недостатнього залишку. Застосунок dotnet CLI обробляє мільйон операцій зі стандартного введення й порівнює час роботи зі звичайними операціями; помилки – у Console.Error.
Варіант 30. Звукові відліки
1. Початковий рівень. Створити клас Signal з масивом відліків double, індексатором і операцією множення на число (гучність). Консольна програма виводить відліки синусоїди до й після зміни гучності.
2. Базовий рівень. Створити клас Signal з масивом відліків, індексатором із підтримкою ^1 і діапазонів, операціями множення на число та + (накладання сигналів різної довжини), методами Peak і Rms. Консольна програма змішує два тони, нормалізує результат і виводить пік та RMS.
3. Високий рівень. Створити бібліотеку обробки сигналів з ефектами (ехо, затухання) як методами розширення й збереженням у форматі WAV. Застосунок dotnet CLI генерує мелодію з нот зі стандартного введення у WAV-файл; помилки – у Console.Error.
Порядок виконання та захисту роботи
- Опрацювати теоретичні відомості та приклади розв’язання завдань.
- Визначити для свого варіанта, які операції мають очевидний зміст і які перетворення можуть бути неявними; обґрунтувати вибір.
- Створити рішення та проєкт; кожен тип і кожен статичний клас розширень розмістити в окремому файлі.
- Реалізувати типи відповідно до обраного рівня складності; узгодити
==зEqualsіGetHashCode, перевіряти межі в індексаторах. - Перевірити операції на граничних значеннях (нуль, від’ємні числа, невідповідні розміри) та значення індексаторів у вікні Watch.
- Продемонструвати роботу програми викладачеві, пояснити програмний код і відповісти на контрольні питання.