Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Служба таксі
1. Початковий рівень. Створити запис Order (номер, адреса, клас поїздки) і консольну програму, що додає кілька замовлень у чергу Queue<Order> та обслуговує їх у порядку надходження, виводячи кожне обслужене замовлення.
2. Базовий рівень. Створити консольну програму служби таксі із записом замовлення (номер, район, клас: бізнес, стандарт, економ, час надходження), PriorityQueue замовлень за класом зі збереженням порядку надходження серед однакових класів та словником вільних водіїв за районами. Програма призначає водіїв і виводить час очікування.
3. Високий рівень. Створити бібліотеку класів диспетчерської таксі: замовлення (номер, координати, район), водії з координатами, вибір найближчого вільного водія через PriorityQueue за відстанню, скасування замовлень і статистика за районами. Застосунок dotnet CLI моделює зміну з журналу подій зі стандартного введення (замовлення, скасування, звільнення водія) і виводить статистику; помилки – у Console.Error.
Варіант 2. Термінологічний словник
1. Початковий рівень. Створити Dictionary<string, string> термінів ООП і визначень. Вивести визначення введеного терміна або повідомлення про його відсутність (TryGetValue).
2. Базовий рівень. Створити консольну програму термінологічного словника ООП (Dictionary<string, string> термінів і визначень) з пошуком без урахування регістру, лічильником запитів у другому словнику та виведенням термінів за абеткою через SortedDictionary. Програма виконує команди пошуку, додавання й статистики.
3. Високий рівень. Створити бібліотеку класів глосарію ООП: терміни з визначеннями, синоніми (кілька ключів на одне визначення), пошук за префіксом і топ запитів. Застосунок dotnet CLI імпортує глосарій зі стандартного введення (рядки «термін; синоніми; визначення») і відповідає на запити з аргументів командного рядка; помилки – у Console.Error.
Варіант 3. Калькулятор ОПЗ
1. Початковий рівень. Написати консольну програму, що обчислює введений вираз у зворотному польському записі (наприклад, 3 4 + 2 *) з операціями +, -, *, / за допомогою Stack<double> і виводить результат.
2. Базовий рівень. Створити власний узагальнений клас ArrayStack<T> на основі масиву з Push, Pop, TryPop і Peek та консольний калькулятор, що за його допомогою обчислює введений вираз у зворотному польському записі (3 4 + 2 *) і повідомляє про помилки: невідомий токен, нестача операндів, ділення на нуль.
3. Високий рівень. Створити бібліотеку калькулятора: ітератор токенів інфіксного виразу з yield return, перетворення на зворотний польський запис алгоритмом сортувальної станції з дужками й пріоритетами та обчислення через Stack<double>. Застосунок dotnet CLI обчислює вирази зі стандартного введення (по одному в рядку); помилки – у Console.Error; коди завершення: 0, 1, 2.
Варіант 4. Нотатки з тегами
1. Початковий рівень. Створити запис Note з назвою й множиною тегів HashSet<string> і консольну програму, що зберігає кілька нотаток у списку та виводить нотатки з введеним тегом.
2. Базовий рівень. Створити консольну програму нотаток (запис Note з назвою й множиною тегів) з індексом Dictionary<string, List<Note>> за тегами та пошуком нотаток, що мають усі введені теги (перетин множин). Програма виводить знайдені нотатки.
3. Високий рівень. Створити бібліотеку класів нотаток з тегами (HashSet<string>) та індексом за тегами: перейменування й злиття тегів, хмара тегів за частотою, пошук «будь-який з тегів». Застосунок dotnet CLI обробляє команди додавання нотаток, роботи з тегами й пошуку зі стандартного введення; помилки – у Console.Error.
Варіант 5. LRU-кеш
1. Початковий рівень. Написати консольну програму, що кешує результати повільного обчислення (наприклад, квадрата числа) у Dictionary<int, string>, обробляє послідовність запитів-чисел і виводить кількість влучань і промахів кешу.
2. Базовий рівень. Створити узагальнений клас LruCache<TKey, TValue> з обмеженою місткістю на основі словника й LinkedList<TKey>, що витісняє найдавніше використаний елемент. Консольна програма обробляє введені ключі й показує вміст кешу після кожного запиту.
3. Високий рівень. Створити бібліотеку з узагальненим LRU-кешем LruCache<TKey, TValue> обмеженої місткості (словник і LinkedList<TKey>) з часом життя записів, статистикою влучань і методом GetOrAdd, що завантажує відсутнє значення через інтерфейс IValueLoader<TKey, TValue>. Застосунок dotnet CLI порівнює частку влучань для різної місткості на послідовності ключів зі стандартного введення.
Варіант 6. Карта міст
1. Початковий рівень. Написати консольну програму, що зберігає двосторонні дороги між містами у словнику списків суміжності Dictionary<string, List<string>> і виводить сусідів кожного міста.
2. Базовий рівень. Створити консольну програму карти міст (словник списків суміжності Dictionary<string, List<string>>) з пошуком у ширину через Queue<string> і словник попередників. Програма знаходить і виводить найкоротший за кількістю доріг маршрут між введеними містами.
3. Високий рівень. Створити бібліотеку з узагальненим класом зваженого графа Graph<TNode> (довжини доріг), алгоритмом Дейкстри з PriorityQueue і перевіркою зв’язності. Застосунок dotnet CLI читає дороги «місто1 місто2 довжина» зі стандартного введення й виводить найкоротший маршрут між містами з аргументів; помилки – у Console.Error.
Варіант 7. Історія браузера
1. Початковий рівень. Написати консольну програму, що моделює переходи браузера на введені адреси сторінок і кнопку «Назад» за допомогою Stack<string> та виводить поточну сторінку після кожної дії.
2. Базовий рівень. Створити консольну програму історії браузера з двома стеками Stack<string> для кнопок «Назад» і «Вперед», очищенням стеку «вперед» після нового переходу та виведенням обох стеків. Програма виконує команди open, back, forward.
3. Високий рівень. Створити бібліотеку історії браузера з вкладками (словник вкладок, у кожної історія «назад» і «вперед» на стеках), обмеженням глибини історії та списком часто відвідуваних сайтів. Застосунок dotnet CLI обробляє сценарій команд (open, back, forward, tab) зі стандартного введення; помилки – у Console.Error.
Варіант 8. Унікальні відвідувачі
1. Початковий рівень. Написати консольну програму, що для масиву логінів відвідувачів за день підраховує унікальних відвідувачів за допомогою HashSet<string> і виводить їх кількість та список.
2. Базовий рівень. Написати консольну програму, що для журналу відвідувань за тиждень (масив логінів на кожен день) через операції над HashSet<string> визначає відвідувачів, що заходили щодня (перетин), хоча б раз (об’єднання), і нових для кожного дня (різниця), та виводить звіт.
3. Високий рівень. Створити бібліотеку аналітики відвідувань на основі HashSet<T>: утримання користувачів (частка тих, хто повернувся через N днів) і порівняння швидкості пошуку в HashSet<T> та List<T> на великому журналі. Застосунок dotnet CLI обробляє журнал «дата логін» зі стандартного введення; помилки – у Console.Error.
Варіант 9. Турнірна таблиця
1. Початковий рівень. Написати консольну програму, що за введеними результатами матчів («команда1 команда2 рахунок») накопичує очки команд у Dictionary<string, int> (перемога – 3, нічия – 1) і виводить турнірну таблицю.
2. Базовий рівень. Створити клас Team зі статистикою (очки, забиті й пропущені м’ячі), порівнювач IComparer<Team> (очки, різниця м’ячів, забиті) і консольну програму, що обробляє введені результати матчів і виводить відсортований List<Team>.
3. Високий рівень. Створити бібліотеку з класом команди, що реалізує IComparable<T> (очки, різниця м’ячів, забиті), і узагальненим класом Standings<T> where T : IComparable<T> на SortedSet<T>, що підтримує впорядковану таблицю після кожного матчу. Застосунок dotnet CLI обробляє сезон (тури з результатами матчів) зі стандартного введення й виводить таблицю після кожного туру.
Варіант 10. Узагальнені пари
1. Початковий рівень. Створити узагальнений клас Pair<TFirst, TSecond> з властивостями First і Second та консольну програму, що заповнює масив пар «місто – населення» і виводить пари.
2. Базовий рівень. Створити узагальнений клас Pair<TFirst, TSecond> і узагальнений метод MinMax<T>(T[] items) where T : IComparable<T>, що повертає Pair<T, T>. Консольна програма застосовує метод до масивів чисел, рядків і дат та виводить результати.
3. Високий рівень. Створити узагальнену бібліотеку статистики з методами MinMax (повертає пару), Median<T> і Mode<T> (словник частот) та обмеженнями IComparable<T> і notnull. Застосунок dotnet CLI обчислює статистику чисел або рядків зі стандартного введення за опцією --type; помилки – у Console.Error.
Варіант 11. Розклад рейсів
1. Початковий рівень. Написати консольну програму, що зберігає рейси в SortedDictionary<TimeOnly, string> (час відправлення – напрямок) і виводить розклад у порядку часу.
2. Базовий рівень. Створити консольну програму розкладу рейсів на SortedDictionary<TimeOnly, string> (час – напрямок) з додаванням і скасуванням рейсів, пошуком найближчого рейсу після введеного часу та рейсів у заданому інтервалі.
3. Високий рівень. Створити бібліотеку розкладу аеропорту: рейси (номер, напрямок, час, затримка) у впорядкованій за часом колекції, словник рейсів за напрямками, облік затримок і узагальнений ітератор рейсів у проміжку часу. Застосунок dotnet CLI читає рейси зі стандартного введення й виводить табло відправлень для часу з аргументів; помилки – у Console.Error.
Варіант 12. Черга на двох стеках
1. Початковий рівень. Написати консольну програму, що заносить введені числа в Stack<int>, перекладає їх у другий Stack<int> і виводить у порядку FIFO, показуючи, як два стеки утворюють чергу.
2. Базовий рівень. Створити узагальнений клас TwoStackQueue<T> (черга на двох стеках) з Enqueue, Dequeue, TryPeek, Count та ітератором yield return. Консольна програма виконує однакові операції з ним і Queue<T> та порівнює результати.
3. Високий рівень. Створити бібліотеку з узагальненою чергою з мінімумом за O(1) MinQueue<T> where T : IComparable<T> (на двох стеках, що зберігають поточний мінімум) і тести на великих послідовностях. Застосунок dotnet CLI обчислює мінімум у ковзному вікні заданого розміру для чисел зі стандартного введення; помилки – у Console.Error.
Варіант 13. Ігровий інвентар
1. Початковий рівень. Написати консольну програму ігрового інвентарю, що зберігає предмети в Dictionary<string, int> (назва – кількість), додає й використовує кілька предметів (предмет з нульовою кількістю видаляється) і виводить інвентар.
2. Базовий рівень. Створити клас предмета Item (назва, вага) і клас інвентарю з обмеженням загальної ваги, стосами однакових предметів і сортуванням за вагою через IComparer<T>. Консольна програма виконує команди гравця: підібрати, викинути, показати.
3. Високий рівень. Створити бібліотеку інвентарю: базовий клас Item (назва, вага) з похідними, узагальнені слоти Slot<T> where T : Item (предмет і кількість), рецепти крафту (словник інгредієнтів з кількостями) і перевірка можливості крафту. Застосунок dotnet CLI обробляє команди зі стандартного введення; помилки – у Console.Error.
Варіант 14. Черга друку
1. Початковий рівень. Створити запис PrintJob (документ, кількість сторінок) і консольну програму, що ставить кілька завдань у чергу Queue<PrintJob> та друкує їх по черзі, виводячи кожне завдання.
2. Базовий рівень. Створити консольну програму, що моделює принтер: завдання друку (документ, сторінки, терміновість) у PriorityQueue з пріоритетом за терміновістю й кількістю сторінок, скасування завдання та звіт про надруковані сторінки.
3. Високий рівень. Створити бібліотеку сервера друку: завдання друку (документ, сторінки, пріоритет), кілька принтерів, словник черг за принтерами й перерозподіл завдань при відмові принтера. Застосунок dotnet CLI обробляє журнал подій (нове завдання, відмова, відновлення) зі стандартного введення й виводить статистику; помилки – у Console.Error.
Варіант 15. Словник синонімів
1. Початковий рівень. Написати консольну програму, що зберігає синоніми в Dictionary<string, HashSet<string>> і виводить синоніми введеного слова.
2. Базовий рівень. Створити консольну програму словника синонімів (Dictionary<string, HashSet<string>>) із симетричним відношенням (якщо «великий» – синонім «значний», то й навпаки) та об’єднанням груп під час додавання. Програма виконує команди додавання й пошуку синонімів.
3. Високий рівень. Створити бібліотеку тезаурусу з групами синонімів (система неперетинних множин), антонімами й пошуком без урахування регістру. Застосунок dotnet CLI завантажує тезаурус з файлу з аргументів і замінює слова тексту зі стандартного введення синонімами за опцією; помилки – у Console.Error.
Варіант 16. Бінарне дерево пошуку
1. Початковий рівень. Створити клас бінарного дерева пошуку цілих чисел з методами Add і Contains та консольну програму, що додає введені числа й перевіряє наявність кількох значень.
2. Базовий рівень. Створити узагальнене дерево BinarySearchTree<T> where T : IComparable<T> з симетричним обходом через yield return, мінімумом, максимумом і висотою. Консольна програма будує дерево зі слів введеного тексту й виводить слова за абеткою, мінімум, максимум і висоту.
3. Високий рівень. Створити бібліотеку з узагальненим бінарним деревом пошуку BinarySearchTree<T> where T : IComparable<T>, що реалізує IEnumerable<T>, з видаленням вузлів, висотою й обходами в ширину (Queue) та в глибину (Stack). Застосунок dotnet CLI порівнює висоту дерева для відсортованих і перемішаних чисел зі стандартного введення; помилки – у Console.Error.
Варіант 17. Граф залежностей пакетів
1. Початковий рівень. Написати консольну програму, що зберігає залежності пакетів у Dictionary<string, List<string>> (пакет – прямі залежності) і виводить прямі залежності кожного пакета.
2. Базовий рівень. Створити консольну програму графа залежностей пакетів (Dictionary<string, List<string>>), що знаходить усі транзитивні залежності введеного пакета обходом з HashSet<string> відвіданих вершин і виводить дерево залежностей.
3. Високий рівень. Створити бібліотеку графа залежностей пакетів (словник списків) з топологічним сортуванням алгоритмом Кана (Queue і словник вхідних степенів) та виявленням циклів. Застосунок dotnet CLI читає рядки «пакет: залежності» зі стандартного введення й виводить порядок встановлення; помилки – у Console.Error; коди завершення: 0, 1, 2.
Варіант 18. Витрати на відрядження
1. Початковий рівень. Створити запис Expense (дата, категорія, сума) і консольну програму, що зберігає витрати на відрядження в List<Expense>, обчислює суму за кожною категорією в словнику й виводить її.
2. Базовий рівень. Створити консольну програму витрат на відрядження (запис Expense: дата, категорія, сума), що групує витрати за датами в SortedDictionary<DateOnly, List<Expense>>, перевіряє добові ліміти за категоріями (словник лімітів) і виводить звіт за днями з перевищеннями.
3. Високий рівень. Створити бібліотеку авансових звітів: витрати (дата, категорія, сума, валюта), словник курсів валют, ліміти за категоріями й виявлення перевищень. Застосунок dotnet CLI обробляє CSV витрат зі стандартного введення й виводить звіт у гривнях; помилки – у Console.Error.
Варіант 19. Результат операції
1. Початковий рівень. Створити узагальнений клас Result<T> з властивостями IsSuccess, Value і Error та статичними методами Ok і Fail. Консольна програма ділить два введені числа й виводить значення або помилку ділення на нуль.
2. Базовий рівень. Створити узагальнений клас Result<T> (IsSuccess, Value, Error, методи Ok і Fail) і консольну програму, що для кількох введених рядків розбирає число, перевіряє діапазон і обчислює результат без винятків, збирає помилки в List<string> та виводить їх.
3. Високий рівень. Створити бібліотеку валідації з узагальненим класом Result<T> (успіх, значення, помилки), узагальненим інтерфейсом правил IRule<T> і накопиченням усіх помилок перевірки. Застосунок dotnet CLI перевіряє анкети (ім’я, вік, пошта) зі стандартного введення й виводить звіт; помилки – у Console.Error.
Варіант 20. Планувальник завдань
1. Початковий рівень. Написати консольну програму, що ставить завдання в PriorityQueue<string, DateTime> за дедлайном і виконує (виводить) їх по черзі від найближчого дедлайну.
2. Базовий рівень. Створити консольну програму планувальника: завдання з дедлайнами в PriorityQueue<string, DateTime>, залежності завдань у словнику (завдання доступне після виконання всіх залежностей) і HashSet виконаних. Програма виводить порядок виконання.
3. Високий рівень. Створити бібліотеку планувальника: завдання (назва, тривалість, дедлайн, залежності), кілька виконавців, черга готових завдань і виявлення прострочень. Застосунок dotnet CLI моделює виконання проєкту зі стандартного введення й виводить діаграму Ганта символами; помилки – у Console.Error.
Варіант 21. Частотний аналіз
1. Початковий рівень. Написати консольну програму, що підраховує частоти літер введеного тексту в Dictionary<char, int> без урахування регістру й виводить їх.
2. Базовий рівень. Написати консольну програму, що для введеного тексту підраховує у словниках частоти літер і біграм без урахування регістру та виводить топ-10 літер і біграм, сортуючи список пар порівнювачем IComparer<T>.
3. Високий рівень. Створити бібліотеку частотного аналізу тексту (словники частот літер) з визначенням мови (українська чи англійська) за відхиленням від еталонних частот. Застосунок dotnet CLI зламує шифр Цезаря для тексту зі стандартного введення частотним аналізом і виводить ключ та розшифрований текст; помилки – у Console.Error.
Варіант 22. Узагальнена матриця
1. Початковий рівень. Створити узагальнений клас Grid<T> з двовимірним індексатором і методом заповнення значенням. Консольна програма створює й виводить сітки int і char.
2. Базовий рівень. Створити узагальнений клас Grid<T> з двовимірним індексатором, ітератором усіх елементів, пошуком IndexOf(T value) з EqualityComparer<T>.Default і транспонуванням. Консольна програма демонструє роботу з сітками різних типів.
3. Високий рівень. Створити бібліотеку з класом Matrix<T> where T : INumber<T> (індексатор, розміри) з операціями додавання й множення для int, double і decimal (огляд generic math). Застосунок dotnet CLI множить дві матриці зі стандартного введення з типом з опції --type; помилки – у Console.Error.
Варіант 23. Соціальна мережа
1. Початковий рівень. Написати консольну програму, що зберігає друзів користувачів у Dictionary<string, HashSet<string>> і виводить спільних друзів двох введених користувачів.
2. Базовий рівень. Створити консольну програму соціальної мережі (Dictionary<string, HashSet<string>> друзів) із симетричним додаванням дружби та рекомендаціями «друзі друзів», відсортованими за кількістю спільних друзів. Програма виконує команди додавання й рекомендацій.
3. Високий рівень. Створити бібліотеку соціального графа (словник множин друзів) з відстанню між користувачами (пошук у ширину) і пошуком спільнот (компонент зв’язності). Застосунок dotnet CLI читає пари друзів і запити зі стандартного введення й виводить відстані та спільноти; помилки – у Console.Error.
Варіант 24. Undo/Redo
1. Початковий рівень. Написати консольну програму, що моделює введення тексту: після кожного введеного рядка зберігає стан у Stack<string>, а за командою undo відкочує останню дію й виводить поточний текст.
2. Базовий рівень. Створити консольний текстовий редактор, що зберігає в стеках команди (вставка, видалення) замість повних станів і реалізує Undo/Redo. Програма виконує введені команди редактора й виводить текст.
3. Високий рівень. Створити бібліотеку історії змін з узагальненим інтерфейсом ICommand<TState> (Execute, Undo), операціями Undo/Redo, групуванням команд і обмеженням глибини (LinkedList). Застосунок dotnet CLI виконує сценарій редагування тексту зі стандартного введення й виводить результат; помилки – у Console.Error.
Варіант 25. Склад поїзда
1. Початковий рівень. Написати консольну програму, що формує поїзд як LinkedList<string> вагонів, додає вагони на початок і в кінець та виводить склад.
2. Базовий рівень. Створити консольну програму складу поїзда (LinkedList<string> номерів вагонів) зі вставкою вагона після заданого, від’єднанням групи вагонів і пошуком вагона за номером (LinkedListNode). Програма виконує маневрові команди й виводить склад.
3. Високий рівень. Створити бібліотеку сортувальної станції: вагони з номерами, кілька тупикових колій (Stack) і складання поїзда в заданому порядку вагонів з мінімальною кількістю переміщень. Застосунок dotnet CLI обробляє завдання (початковий і потрібний порядок) зі стандартного введення й виводить переміщення; помилки – у Console.Error.
Варіант 26. Реєстр домашніх тварин
1. Початковий рівень. Створити клас Pet (чип, кличка, вид) і консольну програму, що зберігає тварин у Dictionary<string, Pet> за номером чипа й знаходить тварину за введеним номером.
2. Базовий рівень. Створити консольну програму реєстру тварин (клас Pet: чип, кличка, вид, дати вакцинацій) у Dictionary<string, Pet> за чипом з перевіркою унікальності чипа, групуванням за видами в Dictionary<string, List<Pet>> і звітом про прострочені вакцинації.
3. Високий рівень. Створити бібліотеку з узагальненим реєстром Registry<TKey, TValue> where TKey : notnull та індексами за кількома полями через інтерфейс IKeySelector<TValue, TIndex> і застосувати її до тварин (чип, кличка, вид, власник). Застосунок dotnet CLI імпортує тварин зі стандартного введення й виконує запити за полями; помилки – у Console.Error.
Варіант 27. Мультимножина
1. Початковий рівень. Написати консольну програму, що підраховує кількість кожного введеного товару в кошику за допомогою Dictionary<string, int> і виводить результат.
2. Базовий рівень. Створити узагальнений клас мультимножини Bag<T> where T : notnull на основі словника з методами Add, Remove, CountOf і ітератором, що повертає кожен елемент стільки разів, скільки він трапляється. Консольна програма демонструє його на словах введеного тексту.
3. Високий рівень. Створити бібліотеку з узагальненою мультимножиною Bag<T> where T : notnull (словник кількостей) з операціями об’єднання, перетину й різниці та перевіркою вкладеності. Застосунок dotnet CLI перевіряє, чи можна скласти слово з літер іншого слова, для пар зі стандартного введення; помилки – у Console.Error.
Варіант 28. Двомовний словник
1. Початковий рівень. Написати консольну програму з двома словниками «українська – англійська» та «англійська – українська», що перекладає введені слова в обох напрямках.
2. Базовий рівень. Створити узагальнений клас BiDictionary<TFirst, TSecond> (двосторонній словник на двох Dictionary) з перевіркою конфліктів (одне слово – кілька перекладів) і видаленням пар. Консольна програма перекладає введені речення слово за словом.
3. Високий рівень. Створити бібліотеку двомовного словника з кількома перекладами слова (Dictionary<string, SortedSet<string>>) в обох напрямках, частотою вживання й пошуком за префіксом. Застосунок dotnet CLI завантажує словник з файлу з аргументів і перекладає текст зі стандартного введення найуживанішими перекладами; помилки – у Console.Error.
Варіант 29. Турнір на вибування
1. Початковий рівень. Написати консольну програму, що ставить введених учасників у Queue<string>, формує й виводить пари першого раунду турніру на вибування.
2. Базовий рівень. Написати консольну програму турніру на вибування: учасники в Queue<string>, рейтинги в Dictionary<string, int>; переможець пари (вищий рейтинг) стає в кінець черги, при непарній кількості учасник проходить автоматично. Програма виводить результати раундів і переможця.
3. Високий рівень. Створити бібліотеку турнірів на вибування: учасники з рейтингами, посів за рейтингом, сітка для кількості учасників, що не є степенем двійки, і втішний турнір. Застосунок dotnet CLI проводить турнір за даними зі стандартного введення (учасники й рейтинги) і виводить сітку; помилки – у Console.Error.
Варіант 30. Посторінковий перегляд
1. Початковий рівень. Написати консольну програму, що розбиває List<string> новин на сторінки по 5 елементів і виводить сторінку з введеним номером.
2. Базовий рівень. Створити узагальнений клас Paginator<T> з розміром сторінки, кількістю сторінок, властивістю поточної сторінки як IReadOnlyList<T>, переходами вперед і назад та перевіркою меж. Консольна програма гортає список новин за командами.
3. Високий рівень. Створити бібліотеку з узагальненим класом Paginator<T> (розмір і кількість сторінок, поточна сторінка як IReadOnlyList<T>), ітератором сторінок yield return, сортуванням через IComparer<T> і фільтрацією через інтерфейс IFilter<T>. Застосунок dotnet CLI читає каталог товарів з файлу з аргументів і гортає його за командами зі стандартного введення; помилки – у Console.Error.
Порядок виконання та захисту роботи
- Опрацювати теоретичні відомості та приклади розв’язання завдань.
- Визначити для свого варіанта основні операції з даними й обрати колекції; обґрунтувати вибір складністю операцій.
- Створити рішення та проєкт; кожен тип розмістити в окремому файлі.
- Реалізувати узагальнені типи й методи з необхідними обмеженнями відповідно до обраного рівня складності; внутрішні колекції повертати як інтерфейси лише для читання.
- Перевірити роботу з порожніми колекціями й відсутніми ключами; переглянути вміст колекцій у налагоджувачі.
- Продемонструвати роботу програми викладачеві, пояснити програмний код і відповісти на контрольні питання.