Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Для всіх рівнів потрібна UML-діаграма з напрямками узагальнення й реалізації інтерфейсів. Клієнтський алгоритм обробляє спільний тип і не розгалужується за назвами конкретних класів, якщо цього не вимагає саме введення даних. У високому рівні додайте --help, повторюваний --item з описом полів, клавіатурний режим без аргументів, stderr і код 2 для помилок, код 0 для успіху. Подайте вирівняний звіт та підсумок. Усі тарифи, податки й повідомлення є заданими навчальними моделями; зовнішні сервіси не викликаються.
Варіанти
Варіант 1. Тіла обертання
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести тип cylinder, cone або sphere, додатний радіус і висоту за потреби; abstract Solid повертає об’єм: πr²h, πr²h/3 або 4πr³/3; густина 2 умовні одиниці, маса дорівнює добутку об’єму на густину. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести тип cylinder, cone або sphere, додатний радіус і висоту за потреби; abstract Solid повертає об’єм: πr²h, πr²h/3 або 4πr³/3; густина 2 умовні одиниці, маса дорівнює добутку об’єму на густину. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести тип cylinder, cone або sphere, додатний радіус і висоту за потреби; abstract Solid повертає об’єм: πr²h, πr²h/3 або 4πr³/3; густина 2 умовні одиниці, маса дорівнює добутку об’єму на густину. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: додати площу поверхні для всіх типів. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 2. Нарахування зарплати
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести вид hourly, fixed або commission, години 0..200 і базову суму в копійках; PayRule повертає години × ставку, оклад або 5% обсягу продажів із округленням донизу. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести вид hourly, fixed або commission, години 0..200 і базову суму в копійках; PayRule повертає години × ставку, оклад або 5% обсягу продажів із округленням донизу. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести вид hourly, fixed або commission, години 0..200 і базову суму в копійках; PayRule повертає години × ставку, оклад або 5% обсягу продажів із округленням донизу. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: спільний звіт працівників і підсумок зарплати. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 3. Транспортні засоби
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести bus або taxi і відстань 0..1000 км; Transport повертає 0 для нуля, інакше bus: 150 коп/км, taxi: 4000+800 коп/км. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести bus або taxi і відстань 0..1000 км; Transport повертає 0 для нуля, інакше bus: 150 коп/км, taxi: 4000+800 коп/км. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести bus або taxi і відстань 0..1000 км; Transport повертає 0 для нуля, інакше bus: 150 коп/км, taxi: 4000+800 коп/км. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: додати bicycle з нульовою навчальною вартістю. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 4. Зоопарк
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести elephant, wolf або rabbit і кількість тварин 1..20; Animal повертає добову норму 50, 3 або 0,2 кг корму на тварину. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести elephant, wolf або rabbit і кількість тварин 1..20; Animal повертає добову норму 50, 3 або 0,2 кг корму на тварину. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести elephant, wolf або rabbit і кількість тварин 1..20; Animal повертає добову норму 50, 3 або 0,2 кг корму на тварину. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: інтерфейс Describable та тижневий звіт. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 5. Банківські рахунки
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести current, deposit або credit і залишок 0..1000000 копійок; Account повертає місячний навчальний дохід: 0, 1% залишку або витрату 2% боргу зі знаком мінус. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести current, deposit або credit і залишок 0..1000000 копійок; Account повертає місячний навчальний дохід: 0, 1% залишку або витрату 2% боргу зі знаком мінус. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести current, deposit або credit і залишок 0..1000000 копійок; Account повертає місячний навчальний дохід: 0, 1% залишку або витрату 2% боргу зі знаком мінус. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: операції поповнення з перевіркою через базовий контракт. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 6. Музичні інструменти
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести piano або guitar та частоту 400..500 Гц; реалізувати Playable.play і Tunable.tune; вивести назву звуку й установлену частоту. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести piano або guitar та частоту 400..500 Гц; реалізувати Playable.play і Tunable.tune; вивести назву звуку й установлену частоту. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести piano або guitar та частоту 400..500 Гц; реалізувати Playable.play і Tunable.tune; вивести назву звуку й установлену частоту. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: додати drum лише з Playable та безпечне as? до Tunable. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 7. Способи оплати
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести cash, card або installment і суму 0..1000000 копійок; Payment повертає суму з комісією 0%, 2% або 5%, округленою донизу. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести cash, card або installment і суму 0..1000000 копійок; Payment повертає суму з комісією 0%, 2% або 5%, округленою донизу. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести cash, card або installment і суму 0..1000000 копійок; Payment повертає суму з комісією 0%, 2% або 5%, округленою донизу. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: показати окрему комісію та підсумок без реальних платежів. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 8. Персонажі гри
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести warrior, mage або archer, здоров’я 1..100 і броню 0..10; Character.attack повертає силу 20, 25 або 15; шкода max(0, сила − броня). Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести warrior, mage або archer, здоров’я 1..100 і броню 0..10; Character.attack повертає силу 20, 25 або 15; шкода max(0, сила − броня). Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести warrior, mage або archer, здоров’я 1..100 і броню 0..10; Character.attack повертає силу 20, 25 або 15; шкода max(0, сила − броня). Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: покроковий бій до 20 раундів з детермінованим порядком. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 9. Побутові прилади
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести lamp, fridge або heater та години роботи 0..24; Appliance використовує потужності 0,01, 0,15 або 1,5 кВт; вивести кВт·год та плату по 4 одиниці. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести lamp, fridge або heater та години роботи 0..24; Appliance використовує потужності 0,01, 0,15 або 1,5 кВт; вивести кВт·год та плату по 4 одиниці. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести lamp, fridge або heater та години роботи 0..24; Appliance використовує потужності 0,01, 0,15 або 1,5 кВт; вивести кВт·год та плату по 4 одиниці. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: тижневий звіт і інтерфейс Switchable. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 10. Документи
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести invoice, act або contract, номер і сторону; Document.render повертає заголовок типу та реквізити через шаблонний метод. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести invoice, act або contract, номер і сторону; Document.render повертає заголовок типу та реквізити через шаблонний метод. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести invoice, act або contract, номер і сторону; Document.render повертає заголовок типу та реквізити через шаблонний метод. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: додати спільну дату у форматі ISO та підсумковий рядок. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 11. Датчики розумного будинку
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести temperature, smoke або motion та показник; Sensor повідомляє тривогу для температури понад 30 °C, диму понад 10 одиниць, руху зі значенням 1; motion приймає лише 0 або 1. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести temperature, smoke або motion та показник; Sensor повідомляє тривогу для температури понад 30 °C, диму понад 10 одиниць, руху зі значенням 1; motion приймає лише 0 або 1. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести temperature, smoke або motion та показник; Sensor повідомляє тривогу для температури понад 30 °C, диму понад 10 одиниць, руху зі значенням 1; motion приймає лише 0 або 1. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: поліморфний журнал тривог без зовнішніх пристроїв. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 12. Податкові режими
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести навчальний режим fixed або percent та дохід 0..1000000 копійок; TaxRule повертає 20000 копійок або 5% доходу; ці правила не є чинним податковим законодавством. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести навчальний режим fixed або percent та дохід 0..1000000 копійок; TaxRule повертає 20000 копійок або 5% доходу; ці правила не є чинним податковим законодавством. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести навчальний режим fixed або percent та дохід 0..1000000 копійок; TaxRule повертає 20000 копійок або 5% доходу; ці правила не є чинним податковим законодавством. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: розбивка за місяцями й підсумки умовного податку. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 13. Шахові фігури
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести rook, bishop або knight і координати 1..8; Piece.moves повертає всі досяжні клітинки на порожній дошці без виходу за межі. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести rook, bishop або knight і координати 1..8; Piece.moves повертає всі досяжні клітинки на порожній дошці без виходу за межі. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести rook, bishop або knight і координати 1..8; Piece.moves повертає всі досяжні клітинки на порожній дошці без виходу за межі. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: Board агрегує фігури й не дозволяє хід на клітинку своєї фігури. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 14. Стратегії знижок
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести percent, fixed або threeForTwo, ціну й кількість 1..100; Discount: 10%, 500 копійок не більше суми або кожна третя однакова одиниця безплатна. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести percent, fixed або threeForTwo, ціну й кількість 1..100; Discount: 10%, 500 копійок не більше суми або кожна третя однакова одиниця безплатна. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести percent, fixed або threeForTwo, ціну й кількість 1..100; Discount: 10%, 500 копійок не більше суми або кожна третя однакова одиниця безплатна. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: інтерфейс опису правила й звіт початкової/кінцевої суми. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 15. Медіафайли
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести audio, video або image; MediaFile обчислює розмір: аудіо seconds×16000 байтів, відео seconds×1000000, зображення width×height×3; параметри додатні до 10000. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести audio, video або image; MediaFile обчислює розмір: аудіо seconds×16000 байтів, відео seconds×1000000, зображення width×height×3; параметри додатні до 10000. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести audio, video або image; MediaFile обчислює розмір: аудіо seconds×16000 байтів, відео seconds×1000000, зображення width×height×3; параметри додатні до 10000. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: спільна таблиця типу, розміру й тривалості або відсутності тривалості. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 16. Способи доставки
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести courier, post або pickup і масу 0,1..30 кг; Delivery: 5000+1000×кг, 3000+500×кг або 0 копійок. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести courier, post або pickup і масу 0,1..30 кг; Delivery: 5000+1000×кг, 3000+500×кг або 0 копійок. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести courier, post або pickup і масу 0,1..30 кг; Delivery: 5000+1000×кг, 3000+500×кг або 0 копійок. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: додати інтерфейс Trackable до courier і post, локальні коди відстеження. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 17. Нерухомість
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести flat, house або land і площу 1..10000 м²; Property повертає умовний збір по 10, 8 або 2 одиниці за м²; це навчальні тарифи. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести flat, house або land і площу 1..10000 м²; Property повертає умовний збір по 10, 8 або 2 одиниці за м²; це навчальні тарифи. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести flat, house або land і площу 1..10000 м²; Property повертає умовний збір по 10, 8 або 2 одиниці за м²; це навчальні тарифи. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: опис адреси та поліморфний звіт зборів. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 18. Навчальні курси
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести online, offline або blended і години 1..200; Course повертає вартість 50, 100 або 75 умовних одиниць за годину. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести online, offline або blended і години 1..200; Course повертає вартість 50, 100 або 75 умовних одиниць за годину. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести online, offline або blended і години 1..200; Course повертає вартість 50, 100 або 75 умовних одиниць за годину. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: базовий опис курсу і перевизначений формат навчання. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 19. Легкоатлетичні дисципліни
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести run, jump або throw і додатний результат до 1000; Event.score: для бігу 1000/час, для стрибка й метання результат×10. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести run, jump або throw і додатний результат до 1000; Event.score: для бігу 1000/час, для стрибка й метання результат×10. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести run, jump або throw і додатний результат до 1000; Event.score: для бігу 1000/час, для стрибка й метання результат×10. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: спільна таблиця балів та переможець за найбільшим балом. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 20. Сповіщення
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести email, sms або push, одержувача й текст до 160 символів; Notification.format повертає префікс типу та повідомлення; нічого не надсилати. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести email, sms або push, одержувача й текст до 160 символів; Notification.format повертає префікс типу та повідомлення; нічого не надсилати. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести email, sms або push, одержувача й текст до 160 символів; Notification.format повертає префікс типу та повідомлення; нічого не надсилати. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: реалізувати інтерфейс Validatable та локальний журнал форматування. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 21. Меню ресторану
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести dish, drink або combo і базову ціну в копійках; MenuItem.price: базова+1000, базова або 90% базової з округленням донизу. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести dish, drink або combo і базову ціну в копійках; MenuItem.price: базова+1000, базова або 90% базової з округленням донизу. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести dish, drink або combo і базову ціну в копійках; MenuItem.price: базова+1000, базова або 90% базової з округленням донизу. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: спільний опис та звіт кількох позицій замовлення. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 22. Проїзні квитки
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести regular, student або benefit і базову вартість; Ticket.price повертає 100%, 50% або 0%; суми в копійках. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести regular, student або benefit і базову вартість; Ticket.price повертає 100%, 50% або 0%; суми в копійках. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести regular, student або benefit і базову вартість; Ticket.price повертає 100%, 50% або 0%; суми в копійках. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: заборонити від’ємну базову ціну й обробити групу пасажирів. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 23. Журналювання
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести console, buffer або filtered та рядки з рівнями INFO/ERROR; Logger.log виводить рядок, накопичує його або пропускає лише ERROR. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести console, buffer або filtered та рядки з рівнями INFO/ERROR; Logger.log виводить рядок, накопичує його або пропускає лише ERROR. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести console, buffer або filtered та рядки з рівнями INFO/ERROR; Logger.log виводить рядок, накопичує його або пропускає лише ERROR. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: композиція фільтра і логера, виведення буфера наприкінці. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 24. Рослини в теплиці
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести tomato, cucumber або cactus та площу 1..100 м²; Plant.water повертає 3, 4 або 0,2 л/м² на день; lightHours: 12, 14 або 8. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести tomato, cucumber або cactus та площу 1..100 м²; Plant.water повертає 3, 4 або 0,2 л/м² на день; lightHours: 12, 14 або 8. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести tomato, cucumber або cactus та площу 1..100 м²; Plant.water повертає 3, 4 або 0,2 л/м² на день; lightHours: 12, 14 або 8. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: тижневий розклад і однаковий контракт для всіх культур. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 25. Рух тіл
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести uniform, accelerated або harmonic, час 0..100 с і параметри; Motion.position: v×t, v×t+a×t²/2 або A×sin(ω×t); параметри скінченні −100..100. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести uniform, accelerated або harmonic, час 0..100 с і параметри; Motion.position: v×t, v×t+a×t²/2 або A×sin(ω×t); параметри скінченні −100..100. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести uniform, accelerated або harmonic, час 0..100 с і параметри; Motion.position: v×t, v×t+a×t²/2 або A×sin(ω×t); параметри скінченні −100..100. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: таблиця координат із кроком часу й інтерфейс опису моделі. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 26. Страхові поліси
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести auto, home або health і умовну страхову суму; Policy повертає 3%, 1% або 5% суми, округлені до копійки донизу; тарифи суто навчальні. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести auto, home або health і умовну страхову суму; Policy повертає 3%, 1% або 5% суми, округлені до копійки донизу; тарифи суто навчальні. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести auto, home або health і умовну страхову суму; Policy повертає 3%, 1% або 5% суми, округлені до копійки донизу; тарифи суто навчальні. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: звіт премій та перевірка спільних меж. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 27. Розв’язувачі рівнянь
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести linear або quadratic і коефіцієнти −100..100; Solver повертає опис дійсних коренів ax+b=0 або ax²+bx+c=0 з обробкою вироджених випадків. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести linear або quadratic і коефіцієнти −100..100; Solver повертає опис дійсних коренів ax+b=0 або ax²+bx+c=0 з обробкою вироджених випадків. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести linear або quadratic і коефіцієнти −100..100; Solver повертає опис дійсних коренів ax+b=0 або ax²+bx+c=0 з обробкою вироджених випадків. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: додати biquadratic через заміну t=x² та відкидання від’ємних t. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 28. Картки лояльності
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести bronze, silver або gold і суму покупки; LoyaltyRule нараховує 1, 3 або 5 балів за кожні повні 100 гривень. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести bronze, silver або gold і суму покупки; LoyaltyRule нараховує 1, 3 або 5 балів за кожні повні 100 гривень. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести bronze, silver або gold і суму покупки; LoyaltyRule нараховує 1, 3 або 5 балів за кожні повні 100 гривень. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: накопичення балів і інтерфейс назви правила. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 29. Бібліотечні видання
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести book, magazine або audio та прострочення 0..365 днів; Publication.fine повертає 100, 50 або 200 копійок за день. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести book, magazine або audio та прострочення 0..365 днів; Publication.fine повертає 100, 50 або 200 копійок за день. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести book, magazine або audio та прострочення 0..365 днів; Publication.fine повертає 100, 50 або 200 копійок за день. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: опис видання, спільний звіт і сумарний штраф. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Варіант 30. Електронні пристрої
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести phone, laptop або watch та заряд 0..100; Chargeable.recharge додає до 100 не більше 20, 10 або 30 пунктів за один навчальний крок. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Подати UML і перевірити однакові контрактні випадки для реалізацій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести phone, laptop або watch та заряд 0..100; Chargeable.recharge додає до 100 не більше 20, 10 або 30 пунктів за один навчальний крок. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Подати UML і перевірити однакові контрактні випадки для реалізацій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести phone, laptop або watch та заряд 0..100; Chargeable.recharge додає до 100 не більше 20, 10 або 30 пунктів за один навчальний крок. Реалізувати спільний абстрактний клас або зазначений інтерфейс і конкретні типи; вивести результат через базове посилання. Прийняти до 20 об’єктів, перевірити введення та сформувати поліморфну таблицю без перевірок конкретного типу в розрахунковому циклі. Розширення: інтерфейс Switchable і кілька кроків заряджання. Підтримати --help, іменовані аргументи, повторюваний --item з описаними полями та клавіатуру без аргументів. Помилки: stderr/код 2; успіх: код 0. Подати підсумки й п’ять перевірок. Подати UML і перевірити однакові контрактні випадки для реалізацій.
Порядок виконання та захисту роботи
- Запишіть контракт спільного типу та передумови його операцій.
- Намалюйте UML, обґрунтуйте абстрактний клас або інтерфейс.
- Реалізуйте щонайменше два конкретні типи та перевірки даних.
- Побудуйте один алгоритм обходу через базовий тип.
- Перевірте однакові допустимі та граничні випадки для всіх реалізацій; додайте помилкове введення й незмінність стану.
- Якщо потрібна рівність, перевірте симетрію, транзитивність, null та однакові хеші для рівних об’єктів.
- Подайте код, UML, README й п’ять перевірок із результатами.
- На захисті покажіть динамічний виклик у налагоджувачі та поясніть, як додати нову реалізацію без переписування клієнта.