Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Журнал оцінок
1. Початковий рівень. Створити консольну програму, яка для прямокутного масиву оцінок 4 студентів з 5 предметів (значення задані в програмі виразом ініціалізації) обчислює та виводить середній бал кожного студента, середній бал з кожного предмета та загальний середній бал групи.
2. Базовий рівень. Створити консольну програму, яка запитує кількість студентів і предметів, прізвища студентів, назви предметів та оцінки (0–100) з перевіркою введення, зберігає оцінки в масиві int[,] і виводить вирівняну таблицю з середнім балом кожного студента, рейтинг студентів за спаданням середнього бала та предмет з найвищим середнім балом.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує журнал зі стандартного введення у форматі CSV (перший рядок – Прізвище;Предмет1;…, далі – рядки оцінок, порожні клітинки – відсутні оцінки) і з опціями --sort name|avg, --min-avg та --subject назва виводить таблицю з рамкою, середніми значеннями за рядками й стовпцями (відсутні оцінки не враховуються), кількістю оцінок нижче 50 і студентами без жодної такої оцінки. Некоректні рядки повідомляються в потік помилок з номером рядка; коди завершення: 0, 1 (частину рядків відхилено), 2 (помилка опцій).
Варіант 2. Шифр Цезаря
1. Початковий рівень. Створити консольну програму, яка шифрує рядок «Привіт, Україно!» (заданий у програмі) шифром Цезаря зі зсувом 3 за українським алфавітом із 33 літер (рядок-алфавіт задано в програмі), зберігаючи регістр і не змінюючи інші символи, та виводить зашифрований і розшифрований рядки.
2. Базовий рівень. Створити консольну програму, яка запитує режим (e – шифрувати, d – розшифрувати), ключ (ціле число, зокрема від’ємне або більше за 33) і текст, перевіряє введені дані та шифрує або розшифровує текст шифром Цезаря окремо для українського та англійського алфавітів, зберігаючи регістр; результат будується в StringBuilder.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який шифрує (--encrypt), розшифровує (--decrypt) і зламує (--crack) текст зі стандартного введення шифром Цезаря. Для злому програма обчислює частоти літер у масиві з 33 лічильників і для кожного з 33 ключів порівнює їх з частотами літер української мови (задані в програмі масивом) за сумою квадратів відхилень, виводить три найімовірніші ключі з оцінками та текст для найкращого ключа. Помилки опцій виводяться в потік помилок з кодом завершення 2; --help виводить довідку.
Варіант 3. Морський бій
1. Початковий рівень. Створити консольну програму, яка розміщує в масиві char[,] розміром 10×10 чотири кораблі із заданими в програмі координатами та виводить поле із заголовками стовпців «А»–«К» і рядків 1–10, позначаючи кораблі символом # і порожні клітинки – ..
2. Базовий рівень. Створити консольну програму, яка розміщує на полі 10×10 кораблі за правилами (кораблі не торкаються навіть кутами), використовуючи координати, введені користувачем у форматі Б7 горизонтально 3, перевіряє кожне розміщення та виводить поле після кожного успішного розміщення або причину відмови.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main для гри проти комп’ютера: кораблі (1 чотирипалубний, 2 трипалубні, 3 двопалубні, 4 однопалубні) розставляються випадково з перевіркою правил (--seed для відтворюваності), користувач стріляє за координатами Б7, комп’ютер – випадково, а після влучання добиває корабель по сусідніх клітинках. Поле гравця й поле пострілів виводяться поруч, для потоплених кораблів навколишні клітинки позначаються автоматично. Наприкінці виводиться статистика влучань. Некоректні координати не зараховуються як хід.
Варіант 4. Продажі за місяцями
1. Початковий рівень. Створити консольну програму, яка для масиву продажів за 12 місяців (значення задані в програмі) виводить місяць із найбільшими та найменшими продажами, загальну суму та кількість місяців, у яких продажі перевищили середнє значення.
2. Базовий рівень. Створити консольну програму, яка запитує продажі за 12 місяців з перевіркою введення та виводить суми за кварталами, найкращий квартал, зміну продажів кожного місяця відносно попереднього у відсотках і горизонтальну діаграму: для кожного місяця – рядок символів █, довжина якого пропорційна продажам (найбільше значення – 40 символів).
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який приймає продажі кількох років у форматі рік:12 значень через кому і опції --chart bar|column, --moving-average N. Програма виводить таблицю «місяць – значення за роками – зміна рік до року, %», ковзне середнє за N місяців, лінійний тренд (коефіцієнти методу найменших квадратів) і вертикальну діаграму стовпців із символів, побудовану в масиві рядків. Некоректні записи повідомляються в потік помилок; коди завершення: 0, 1, 2.
Варіант 5. Аналіз тексту
1. Початковий рівень. Створити консольну програму, яка для тексту з трьох речень (заданого в програмі) рахує кількість речень, слів і символів без пробілів, знаходить найдовше слово та виводить слова тексту в зворотному порядку.
2. Базовий рівень. Створити консольну програму, яка зчитує текст рядками до порожнього рядка, розбиває його на слова без урахування розділових знаків і регістру, нормалізує апостроф і виводить кількість речень, кількість різних слів, 10 найчастіших слів із кількістю входжень (масиви слів і лічильників) та середню довжину слова.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який аналізує текст зі стандартного введення з опціями --top N, --min-length, --stop-words файл_або_перелік і --report text|table. Програма виводить частоти слів (без стоп-слів), розподіл довжин слів у вигляді гістограми, найдовше речення, середню кількість слів у реченні та індекс читабельності (середня довжина речення + середня кількість складів на слово, склади – голосні). Помилки опцій виводяться в потік помилок з кодом завершення 2; --help виводить довідку.
Варіант 6. Надійність пароля
1. Початковий рівень. Створити консольну програму, яка для пароля «Rome2026!» (заданого в програмі) перевіряє довжину (не менше 8 символів) і наявність великих і малих літер, цифр і спеціальних символів методами char.IsUpper, char.IsLower, char.IsDigit та виводить результат кожної перевірки.
2. Базовий рівень. Створити консольну програму, яка в циклі запитує паролі до порожнього рядка, для кожного обчислює оцінку надійності від 0 до 5 (довжина, типи символів, відсутність трьох однакових символів поспіль і послідовностей 123, abc, qwerty) і виводить оцінку, її словесну назву виразом switch та перелік невиконаних вимог.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який генерує паролі (--generate --length N --count K --no-similar, де --no-similar виключає схожі символи 0O1lI) з гарантованою наявністю кожного типу символів і перемішуванням масиву символів алгоритмом Фішера – Єйтса, або оцінює паролі зі стандартного введення (--check): ентропія в бітах (довжина · log2 розміру алфавіту), приблизний час підбору та перевірка за вбудованим масивом поширених паролів. Помилки опцій виводяться в потік помилок з кодом завершення 2; --help виводить довідку.
Варіант 7. Кінозал
1. Початковий рівень. Створити консольну програму, яка створює зубчастий масив місць кінозалу з 5 рядів по 8, 9, 10, 10 і 12 місць, позначає кілька заброньованих місць (задані в програмі) та виводить схему залу (O – вільне, X – зайняте) з номерами рядів і кількістю вільних місць у кожному ряду.
2. Базовий рівень. Створити консольну програму бронювання місць у кінозалі із зубчастим масивом рядів різної довжини: у циклі виводить схему залу, запитує ряд і місце (або q для виходу), перевіряє, що місце існує та вільне, бронює його, а наприкінці виводить кількість заброньованих місць і виручку (ціна залежить від ряду: перші 3 ряди – 120 грн, інші – 160 грн).
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який моделює кінозал з конфігурацією рядів --rows 8,9,10,10,12 і командами зі стандартного введення: book ряд місце, book-group ряд N (N місць поспіль у ряду, найближче до центру), best N (N сусідніх місць у найкращому вільному ряду за відстанню від центру залу), cancel ряд місце, show, stats. Некоректні команди повідомляються в потік помилок; наприкінці виводиться завантаженість залу у відсотках за рядами.
Варіант 8. Лабіринт
1. Початковий рівень. Створити консольну програму, яка зберігає лабіринт 7×9 у масиві рядків (# – стіна, . – прохід, S – старт, F – фініш, задано в програмі), знаходить координати старту й фінішу та виводить кількість прохідних клітинок.
2. Базовий рівень. Створити консольну програму, яка зчитує лабіринт рядками до порожнього рядка (усі рядки однакової довжини, рівно один S і один F), перетворює його на масив char[,], перевіряє коректність і хвильовим алгоритмом (масив відстаней int[,], повторні проходи до стабілізації) визначає довжину найкоротшого шляху від S до F або повідомляє, що шляху немає.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує лабіринт зі стандартного введення, знаходить найкоротший шлях хвильовим алгоритмом із чергою на масиві координат, відновлює шлях від фінішу до старту та виводить лабіринт із позначеним шляхом (*). Підтримуються опції --diagonal (дозволити рух по діагоналі), --keys (клітинки a–z відкривають двері A–Z, стан пошуку включає зібрані ключі) та --stats. Некоректний лабіринт повідомляється в потік помилок; коди завершення: 0 – шлях знайдено, 1 – шляху немає, 2 – помилка введення.
Варіант 9. Гра «Життя»
1. Початковий рівень. Створити консольну програму, яка на полі 10×10 типу bool[,] з фігурою «планер» (задана в програмі) обчислює кількість живих сусідів для кожної клітинки та виводить поле й матрицю кількостей сусідів.
2. Базовий рівень. Створити консольну програму, яка моделює гру «Життя» Конвея на замкненому (тороїдальному) полі, розміри якого та початкові живі клітинки вводить користувач, і виводить задану кількість поколінь; нове покоління обчислюється в окремому масиві, а моделювання зупиняється, якщо поле стало порожнім або не змінилося.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який завантажує початковий стан зі стандартного введення у форматі рядків . і O, моделює гру з опціями --generations, --rule B3/S23 (довільні правила народження й виживання), --wrap і --delay (затримка виведення, мс) та виявляє цикли: зберігає рядкові подання останніх 50 поколінь і повідомляє період, якщо стан повторився. Наприкінці виводяться кількість поколінь, максимальна кількість живих клітинок і період. Помилки введення виводяться в потік помилок з кодом завершення 2.
Варіант 10. Хрестики-нулики
1. Початковий рівень. Створити консольну програму, яка для заповненого поля 3×3 типу char[,] (задане в програмі) перевіряє всі рядки, стовпці та дві діагоналі й виводить переможця (X або O) або повідомлення про нічию.
2. Базовий рівень. Створити консольну програму для гри двох гравців у хрестики-нулики на полі 3×3: у циклі виводить поле, запитує хід поточного гравця у форматі рядок стовпець, перевіряє, що клітинка існує й порожня, та після кожного ходу перевіряє перемогу або нічию.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main для гри на полі N×N (--size від 3 до 15) з умовою перемоги K в ряд (--win), у якій можна грати проти комп’ютера (--ai): комп’ютер спочатку виграє, якщо може, потім блокує перемогу суперника, інакше обирає клітинку з найбільшою кількістю потенційних ліній. Перевірка перемоги виконується лише навколо останнього ходу в чотирьох напрямках. Помилки опцій виводяться в потік помилок з кодом завершення 2; --help виводить довідку.
Варіант 11. Температури міст
1. Початковий рівень. Створити консольну програму, яка для матриці температур 4 міст за 7 днів (значення задані в програмі, назви міст – в окремому масиві) виводить таблицю з середньою температурою кожного міста та найтеплішим днем тижня для всіх міст разом.
2. Базовий рівень. Створити консольну програму, яка запитує кількість міст і днів, назви міст і температури з перевіркою введення, зберігає їх у масиві double[,] і виводить таблицю з мінімальною, максимальною та середньою температурою кожного міста, а також «аномальні» дні, у які температура відрізняється від середньої для міста більш ніж на 5 градусів.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує дані у форматі CSV (місто;дата;температура) у довільному порядку, будує матрицю міста × дати (відсутні значення – NaN, заповнюються середнім сусідніх днів з опцією --fill), виводить таблицю, стандартне відхилення для кожного міста, найдовший період морозних днів і пару міст з найбільш схожими температурами (найменша середня абсолютна різниця). Некоректні рядки повідомляються в потік помилок; коди завершення: 0, 1, 2.
Варіант 12. Номери автомобілів
1. Початковий рівень. Створити консольну програму, яка для номерного знака «АЕ 1234 КМ» (заданого в програмі) перевіряє формат: дві літери, чотири цифри, дві літери, і виводить код регіону (перші дві літери), номер і серію окремо.
2. Базовий рівень. Створити консольну програму, яка в циклі зчитує номерні знаки у довільному записі (з пробілами чи дефісами, малими літерами, латинськими літерами, схожими на кириличні), нормалізує їх до формату АА 1234 АА, замінюючи латинські A, B, C, E, H, I, K, M, O, P, T, X відповідними кириличними, та визначає регіон за кодом із масивів кодів і назв регіонів, заданих у програмі.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обробляє журнал проїзду зі стандартного введення у форматі гг:хх номер, нормалізує номери, відхиляє некоректні записи з повідомленням у потік помилок і виводить таблицю регіонів за кількістю проїздів, номери, що проїжджали більше ніж --repeat разів, та проміжки часу між проїздами одного авто. Опція --mask приховує середні цифри номерів у звіті (АЕ 12** КМ). Коди завершення: 0, 1 (є відхилені записи), 2 (помилка опцій).
Варіант 13. Анаграми й паліндроми
1. Початковий рівень. Створити консольну програму, яка перевіряє, чи є фраза «А результатів? Вітать лузера!» (задана в програмі) паліндромом без урахування регістру, пробілів і розділових знаків, будуючи рядок лише з літер і порівнюючи його символи з двох кінців.
2. Базовий рівень. Створити консольну програму, яка запитує два слова або фрази та перевіряє, чи є вони анаграмами (без урахування регістру, пробілів, розділових знаків і різних варіантів апострофа), порівнюючи відсортовані масиви літер, а також виводить, яких літер не вистачає або які зайві, якщо фрази не є анаграмами.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує словник слів зі стандартного введення та з опціями --anagrams (групи анаграм, ключ групи – відсортовані літери), --palindromes (слова-паліндроми), --longest-palindrome текст (найдовший паліндромний фрагмент рядка методом розширення від центру) виводить результати таблицями з кількістю елементів. Помилки опцій виводяться в потік помилок з кодом завершення 2; --help виводить довідку.
Варіант 14. Магічний квадрат
1. Початковий рівень. Створити консольну програму, яка перевіряє, чи є матриця 3×3 (задана в програмі) магічним квадратом: суми всіх рядків, стовпців і двох діагоналей рівні, а числа від 1 до 9 трапляються по одному разу; програма виводить усі суми та результат.
2. Базовий рівень. Створити консольну програму, яка запитує непарне число n (від 3 до 15), будує магічний квадрат n × n сіамським методом (починаючи із середини верхнього рядка, рух по діагоналі вгору-праворуч із переходом через краї, а в разі зайнятої клітинки – вниз) і виводить квадрат, магічну сталу та результат перевірки всіх сум.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який будує магічні квадрати будь-якого порядку n ≥ 3 (--size): непарного – сіамським методом, кратного 4 – методом заміни діагональних клітинок, парного некратного 4 – методом LUX, а з опцією --check зчитує квадрат зі стандартного введення й перевіряє його. Програма виводить квадрат, магічну сталу, результат перевірки та, для перевірки, перелік рядків/стовпців із неправильними сумами. Помилки виводяться в потік помилок з кодом завершення 2.
Варіант 15. Транслітерація
1. Початковий рівень. Створити консольну програму, яка транслітерує прізвище «Шевченко» (задане в програмі) латиницею за таблицею транслітерації, затвердженою постановою Кабінету Міністрів України від 27 січня 2010 року № 55 (масиви українських літер і їх латинських відповідників задано в програмі), та виводить результат.
2. Базовий рівень. Створити консольну програму, яка в циклі транслітерує введені імена та прізвища за офіційною таблицею 2010 року з урахуванням особливих правил: «є», «ї», «й», «ю», «я» на початку слова передаються як Ye, Yi, Y, Yu, Ya, а в інших позиціях – як ie, i, i, iu, ia; сполучення «зг» передається як zgh; м’який знак і апостроф не передаються; регістр зберігається.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який транслітерує текст зі стандартного введення за офіційною таблицею 2010 року (опція --standard kmu2010) або спрощеною таблицею для URL (--slug: лише малі латинські літери, цифри й дефіси, без повторних дефісів). Результат збирається в StringBuilder; опція --check-reverse повідомляє, які слова не можна однозначно відновити назад. Некоректні опції виводяться в потік помилок з кодом завершення 2; --help виводить довідку.
Варіант 16. Порівняння сортувань
1. Початковий рівень. Створити консольну програму, яка сортує масив із 10 цілих чисел (задані в програмі) методом бульбашки, виводячи масив після кожного проходу, та порівнює результат з Array.Sort.
2. Базовий рівень. Створити консольну програму, яка запитує розмір масиву та заповнює його випадковими числами, сортує три копії масиву методами бульбашки (із завершенням, якщо обмінів не було), вставок і вибору, підраховує кількість порівнянь і обмінів для кожного методу та виводить таблицю результатів і перевірку, що всі копії відсортовано однаково.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який порівнює сортування бульбашкою, вставками, вибором, Шелла та Array.Sort для розмірів з опції --sizes 1000,5000,20000 і типів даних --data random|sorted|reversed|few-unique. Для кожної комбінації виводиться таблиця з кількістю порівнянь, обмінів і часом (Stopwatch), а також перевірка правильності та стабільності сортування (на масиві пар ключ – порядковий номер). Помилки опцій виводяться в потік помилок з кодом завершення 2.
Варіант 17. Бінарний пошук
1. Початковий рівень. Створити консольну програму, яка в масиві з 15 відсортованих чисел (задані в програмі) виконує бінарний пошук числа, введеного користувачем, виводячи межі діапазону на кожному кроці, та повідомляє індекс знайденого числа або його відсутність.
2. Базовий рівень. Створити консольну програму, яка заповнює масив із n відсортованих випадкових чисел (з можливими повторами) і для чисел, введених користувачем, знаходить бінарним пошуком першу й останню позицію числа, кількість його входжень, а якщо числа немає – позицію, на яку його слід вставити; результати порівнюються з Array.BinarySearch.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує відсортований словник слів зі стандартного введення (перевіряючи впорядкованість за StringComparer.Ordinal) і відповідає на запити з аргументів: точний пошук, пошук за префіксом (діапазон слів, що починаються з префікса, двома бінарними пошуками) і найближче слово. Для кожного запиту виводяться результат і кількість порівнянь порівняно з лінійним пошуком. Неупорядкований словник повідомляється в потік помилок з кодом завершення 2.
Варіант 18. Розклад занять
1. Початковий рівень. Створити консольну програму, яка зберігає розклад групи на тиждень у масиві string[,] 5 днів × 6 пар (порожній рядок – немає пари, значення задані в програмі) та виводить кількість пар у кожен день і день з найбільшим навантаженням.
2. Базовий рівень. Створити консольну програму, яка виводить розклад у вигляді таблиці з рамкою, знаходить «вікна» (порожні пари між заняттями одного дня), рахує кількість пар кожної дисципліни за тиждень і за запитом користувача (назва дисципліни без урахування регістру) виводить дні та номери пар цієї дисципліни.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує розклад кількох груп зі стандартного введення у форматі група;день;пара;дисципліна; викладач;аудиторія, будує тривимірний масив група × день × пара та перевіряє конфлікти: один викладач або одна аудиторія в одну пару для різних груп. Опції --group, --teacher, --room виводять розклад для обраної сутності; конфлікти виводяться в потік помилок з кодом завершення 1.
Варіант 19. ASCII-зображення
1. Початковий рівень. Створити консольну програму, яка зберігає зображення 6×10 із символів у масиві char[,] (задане в програмі), виводить його, а потім виводить віддзеркалене по горизонталі зображення, сформоване в новому масиві.
2. Базовий рівень. Створити консольну програму, яка зчитує зображення рядками до порожнього рядка (рядки доповнюються пробілами до однакової довжини методом PadRight) і за вибором користувача виконує поворот на 90° за годинниковою стрілкою, віддзеркалення по вертикалі або горизонталі та інвертування (# ↔ пробіл), виводячи результат після кожної операції.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує символьне зображення зі стандартного введення та застосовує послідовність операцій з аргументів: rotate:90|180|270, flip:h|v, scale:N (збільшення в N разів), shrink:N (зменшення: символ блоку, що трапляється найчастіше), crop (обрізати порожні краї), border:символ. Результат виводиться в стандартний вихід, а розміри після кожної операції – у потік помилок з опцією --verbose. Невідомі операції спричиняють код завершення 2.
Варіант 20. Номер IBAN
1. Початковий рівень. Створити консольну програму, яка для українського IBAN «UA213223130000026007233566001» (заданого в програмі) перевіряє довжину (29 символів) і код країни, а також виводить номер групами по 4 символи.
2. Базовий рівень. Створити консольну програму, яка запитує IBAN (пробіли дозволені), видаляє пробіли, переводить у верхній регістр і перевіряє контрольну суму за алгоритмом ISO 13616: перші 4 символи переносяться в кінець, літери замінюються числами (A = 10 … Z = 35), остача від ділення отриманого числа на 97 обчислюється поступово по цифрах і має дорівнювати 1. Програма виводить результат і номер групами по 4 символи.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який перевіряє IBAN зі стандартного введення для країн із таблиці довжин (масиви кодів країн і довжин задано в програмі), обчислює контрольні цифри для номера без них (--generate UA МФО рахунок) і для українських IBAN виділяє код МФО банку (6 цифр після контрольних) та номер рахунку. Результати виводяться таблицею «IBAN – країна – статус – МФО»; некоректні записи повідомляються в потік помилок; коди завершення: 0, 1, 2.
Варіант 21. Арифметичний вираз
1. Початковий рівень. Створити консольну програму, яка розбиває рядок «12 + 7 - 3 + 40» (заданий у програмі) на числа й знаки операцій методом Split і обчислює значення виразу зліва направо.
2. Базовий рівень. Створити консольну програму, яка в циклі зчитує вирази з цілих чисел і операцій +, -, *, / без пробілів (наприклад, 12+7*3-40/5), посимвольно розбирає рядок на масиви чисел і операцій, обчислює вираз з урахуванням пріоритету (спочатку множення й ділення) і повідомляє позицію першого некоректного символу або ділення на нуль.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який обчислює вирази з аргументів або стандартного введення з дійсними числами, дужками, унарним мінусом і операцією ^, перетворюючи вираз на зворотний польський запис алгоритмом сортувальної станції на масивах-стеках. З опцією --rpn виводиться проміжний запис, з --steps – стан стеків на кожному кроці. Помилки (незбалансовані дужки, невідомі символи) виводяться в потік помилок з позицією символу; коди завершення: 0, 1, 2.
Варіант 22. Турнірна таблиця
1. Початковий рівень. Створити консольну програму, яка для матриці результатів кругового турніру 4 команд (int[,] голів, назви команд у масиві, значення задані в програмі) підраховує очки кожної команди (перемога – 3, нічия – 1) і виводить таблицю очок.
2. Базовий рівень. Створити консольну програму, яка зчитує результати матчів у форматі Команда1 2:1 Команда2 до порожнього рядка, знаходить індекси команд у масиві назв (нові команди додаються Array.Resize), накопичує ігри, перемоги, нічиї, поразки, забиті й пропущені голи та очки і виводить турнірну таблицю, упорядковану за очками та різницею голів.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який будує турнірну таблицю з результатів зі стандартного введення з опціями --points 3,1,0, --tiebreak points,h2h,diff,goals (порядок критеріїв, h2h – очки в особистих зустрічах) і --matrix (вивести шахову таблицю результатів команда × команда). Повторні матчі тих самих команд і некоректні рядки повідомляються в потік помилок; коди завершення: 0, 1 (частину рядків відхилено), 2 (помилка опцій).
Варіант 23. Інвентаризація складу
1. Початковий рівень. Створити консольну програму, яка для паралельних масивів назв товарів, залишків і мінімальних запасів (значення задані в програмі) виводить таблицю товарів із позначкою «дефіцит» для товарів, залишок яких менший за мінімальний, та кількість таких товарів.
2. Базовий рівень. Створити консольну програму обліку складу на паралельних масивах: у циклі виконує команди in назва кількість, out назва кількість (не більше залишку), list і find частина (пошук без урахування регістру); новий товар додається збільшенням масивів Array.Resize, а наприкінці виводиться звіт із загальною кількістю одиниць.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує залишки з файлу стандартного введення у форматі CSV (артикул;назва;кількість;ціна; мінімум) і журнал операцій з аргументів, перевіряє унікальність артикулів, виконує операції з контролем від’ємних залишків і виводить звіт --report stock|deficit|value з сортуванням за вибраним полем (--sort) і таблицею з рамкою. Помилки операцій виводяться в потік помилок; коди завершення: 0, 1, 2.
Варіант 24. Азбука Морзе
1. Початковий рівень. Створити консольну програму, яка кодує слово «SOS» азбукою Морзе, використовуючи масиви латинських літер і відповідних кодів (задані в програмі), та виводить коди літер через пробіл.
2. Базовий рівень. Створити консольну програму, яка за вибором користувача кодує текст азбукою Морзе (латинські літери, цифри; слова розділяються /) або декодує рядок із крапок, тире, пробілів і /, повідомляючи про символи, яких немає в таблиці; результат будується в StringBuilder.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який кодує й декодує текст зі стандартного введення азбукою Морзе з таблицями --alphabet latin|uk (українська азбука Морзе) і опцією --timing WPM, що виводить часову діаграму сигналу (= – крапка, === – тире, паузи 1, 3 і 7 одиниць) та тривалість повідомлення в секундах. З опцією --fuzzy декодування пропускає некоректні коди з позначкою ?. Помилки опцій виводяться в потік помилок з кодом завершення 2.
Варіант 25. Сапер
1. Початковий рівень. Створити консольну програму, яка для поля 6×8 з мінами, заданими в програмі в масиві bool[,], обчислює для кожної клітинки кількість мін у восьми сусідніх клітинках і виводить поле (* – міна, цифра або . – кількість сусідніх мін).
2. Базовий рівень. Створити консольну програму-гру «Сапер» на полі 8×8 з 10 випадковими мінами: у циклі виводить поле (закриті клітинки – #), запитує координати клітинки, відкриває її, а для клітинки без сусідніх мін відкриває сусідів повторними проходами по масиву, доки відкриваються нові клітинки; гра завершується вибухом або відкриттям усіх безпечних клітинок.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main для гри «Сапер» з опціями --rows, --cols, --mines і --seed, де перший хід завжди безпечний (міни розставляються після першого ходу), команди open, flag, chord (відкрити сусідів числа, якщо навколо стоїть потрібна кількість прапорців), відкриття порожніх областей виконується алгоритмом із чергою на масиві координат. Наприкінці виводяться час гри та кількість ходів. Некоректні команди не змінюють стан гри.
Варіант 26. Вирівнювання CSV
1. Початковий рівень. Створити консольну програму, яка перетворює три рядки CSV з роздільником ; (задані в програмі) на таблицю: розбиває рядки методом Split, обчислює ширину кожного стовпця як найбільшу довжину значення та виводить вирівняні стовпці.
2. Базовий рівень. Створити консольну програму, яка зчитує рядки CSV до порожнього рядка (роздільник вводить користувач), доповнює рядки з меншою кількістю полів порожніми значеннями і виводить таблицю з рамкою символами ┌─┬┐│├┼┤└┴┘, вирівнюючи числа за правим краєм, а текст – за лівим.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який форматує CSV зі стандартного введення з підтримкою полів у лапках (роздільник і лапки всередині поля, подвоєні лапки), опціями --delimiter, --header, --max-width N (довші значення обрізаються з …), --align auto|left|right і --style box|markdown|plain. Рядки з неправильною кількістю полів повідомляються в потік помилок з номером рядка; коди завершення: 0, 1, 2.
Варіант 27. Многочлени
1. Початковий рівень. Створити консольну програму, яка для многочлена з коефіцієнтами [2, -3, 0, 5] (коефіцієнт при xi має індекс i, задано в програмі) виводить многочлен у звичному записі та обчислює його значення в точці x = 2 за схемою Горнера.
2. Базовий рівень. Створити консольну програму, яка запитує коефіцієнти двох многочленів (через пробіл від старшого степеня до молодшого) і виводить їх суму, добуток (масив довжиною n + m − 1), похідну кожного многочлена та значення многочленів у введеній точці, записуючи многочлени без нульових доданків і зайвих знаків.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який розбирає многочлени з рядків аргументів у звичному записі (3x^2 - x + 5), виконує операції add, mul, div (ділення з остачею) і roots (цілі корені серед дільників вільного члена та раціональні корені) та виводить результат у звичному записі. Некоректні записи повідомляються в потік помилок з позицією символу; коди завершення: 0, 1, 2.
Варіант 28. Статистика вибірки
1. Початковий рівень. Створити консольну програму, яка для масиву з 11 вимірів (задані в програмі) обчислює середнє арифметичне, медіану (після сортування копії масиву), мінімум, максимум і розмах вибірки.
2. Базовий рівень. Створити консольну програму, яка зчитує числа з одного рядка через пробіл або кому, пропускаючи некоректні значення з повідомленням, і виводить середнє, медіану, моду (усі значення з найбільшою частотою), дисперсію, стандартне відхилення та квартилі Q1 і Q3.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який зчитує числові дані зі стандартного введення (по одному або кілька в рядку) і з опціями --bins N, --outliers (значення поза межами Q1 − 1,5·IQR і Q3 + 1,5·IQR), --percentiles 10,50,90 виводить описову статистику, таблицю частот за інтервалами з гістограмою із символів і перелік викидів. Некоректні значення повідомляються в потік помилок; коди завершення: 0, 1, 2.
Варіант 29. Кросворд
1. Початковий рівень. Створити консольну програму, яка розміщує в сітці 10×10 типу char[,] два слова, горизонтальне й вертикальне (задані в програмі), що перетинаються на спільній літері, та виводить сітку (порожні клітинки – .).
2. Базовий рівень. Створити консольну програму, яка запитує слова та їх розміщення у форматі слово рядок стовпець h|v, перевіряє, що слово не виходить за межі сітки 12×12, а перетини з уже розміщеними словами відбуваються на однакових літерах, та виводить сітку після кожного успішного розміщення або причину відмови.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який автоматично будує кросворд зі слів зі стандартного введення: розміщує найдовше слово в центрі, а кожне наступне – у позиції з найбільшою кількістю перетинів, що не створює сусідніх літер поза перетинами. Програма виводить сітку, пронумеровані питання «по горизонталі» та «по вертикалі» з координатами й перелік слів, які не вдалося розмістити (у потік помилок). Опція --size задає розмір сітки; коди завершення: 0, 1, 2.
Варіант 30. Шаблон листа
1. Початковий рівень. Створити консольну програму, яка в шаблоні листа «Шановна(ий) {Name}, ваше замовлення № {Order} на суму {Sum} грн відправлено.» (заданому в програмі) замінює поля значеннями з паралельних масивів імен полів і значень методом StringBuilder.Replace та виводить лист.
2. Базовий рівень. Створити консольну програму, яка запитує шаблон (багаторядковий, до порожнього рядка) і значення для кожного поля {Назва}, знайденого в шаблоні (поля шукаються посимвольно за дужками, повтори не запитуються повторно), та виводить готовий лист, повідомляючи про незакриті дужки.
3. Високий рівень. Створити за допомогою dotnet CLI консольний застосунок із методом Main, який заповнює шаблон з файлу стандартного введення для кожного рядка CSV з опції --data (перший рядок – назви полів) і підтримує формати {Sum:N2}, значення за замовчуванням {Title|Клієнт} та екранування {{. Для кожного запису виводиться лист, розділений рядком ---; відсутні поля без значення за замовчуванням повідомляються в потік помилок із номером запису; коди завершення: 0, 1, 2.
Порядок виконання та захисту роботи
- Опрацювати теоретичні відомості та приклади розв’язання завдань.
- Визначити, які дані свого варіанта зберігаються в масивах (одновимірних, прямокутних чи зубчастих) і рядках; для кожного масиву визначити тип елементів і розміри.
- Створити рішення та проєкт для свого варіанта завдання.
- Реалізувати програму відповідно до обраного рівня складності; для виведення масивів використовувати
string.Joinабо вирівняні таблиці, для збирання довгих рядків –StringBuilder. - Перевірити роботу програми на коректних і некоректних даних та на граничних випадках: порожній масив або рядок, один елемент, однакові елементи, зайві пробіли; переглянути масиви у вікні Locals налагоджувача.
- Продемонструвати роботу програми викладачеві, пояснити програмний код і відповісти на контрольні питання.