Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Подайте UML класів та інтерфейсів. Для операторів письмово задайте семантику, тип результату, межі та правило зміни або незмінності операндів. Для делегата вкажіть власника стану й момент перевірки чи повідомлення. Високий рівень має --help, іменовані аргументи й повторюваний --item зі структурованим значенням, клавіатуру без аргументів, stderr/код 2 для помилок та код 0 для успіху. Звіт містить таблицю й підсумки. Випадкові демонстрації мають фіксоване зерно або явно задану послідовність для перевірки.
Варіанти
Варіант 1. Раціональні числа
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два дроби з чисельниками −1000..1000 і ненульовими знаменниками −1000..1000; Rational нормалізує знак і НСД, реалізує plus, minus, times, div та compareTo; вивести результати, ділення на нуль відхилити. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два дроби з чисельниками −1000..1000 і ненульовими знаменниками −1000..1000; Rational нормалізує знак і НСД, реалізує plus, minus, times, div та compareTo; вивести результати, ділення на нуль відхилити. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два дроби з чисельниками −1000..1000 і ненульовими знаменниками −1000..1000; Rational нормалізує знак і НСД, реалізує plus, minus, times, div та compareTo; вивести результати, ділення на нуль відхилити. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: перевірити узгоджені equals/hashCode й незмінність операндів. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 2. Вектори 3D
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два вектори з трьома координатами −1000..1000; Vector3 реалізує plus, minus, get та іменовані dot/cross; вивести суму, різницю і добутки. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два вектори з трьома координатами −1000..1000; Vector3 реалізує plus, minus, get та іменовані dot/cross; вивести суму, різницю і добутки. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два вектори з трьома координатами −1000..1000; Vector3 реалізує plus, minus, get та іменовані dot/cross; вивести суму, різницю і добутки. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: times для скаляра та compareTo за довжиною з поясненням відмінності від equals. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 3. Грошові суми
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести дві суми в копійках 0..1000000 та UAH/USD; Money реалізує plus і compareTo лише для однакових валют, вивести суму або причину відмови. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести дві суми в копійках 0..1000000 та UAH/USD; Money реалізує plus і compareTo лише для однакових валют, вивести суму або причину відмови. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести дві суми в копійках 0..1000000 та UAH/USD; Money реалізує plus і compareTo лише для однакових валют, вивести суму або причину відмови. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: times для кількості, minus без від’ємного результату, перевірка переповнення. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 4. Час доби
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести години 0..23, хвилини 0..59 та зсув −1440..1440; TimeOfDay.plus додає хвилини за модулем доби, compareTo порівнює хвилини від півночі. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести години 0..23, хвилини 0..59 та зсув −1440..1440; TimeOfDay.plus додає хвилини за модулем доби, compareTo порівнює хвилини від півночі. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести години 0..23, хвилини 0..59 та зсув −1440..1440; TimeOfDay.plus додає хвилини за модулем доби, compareTo порівнює хвилини від півночі. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: rangeTo і contains для діапазону без переходу через північ; порожній, якщо початок пізніший. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 5. Комплексні числа
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два комплексні числа з частинами −1000..1000; Complex реалізує plus, minus, times і invoke, що повертає рядок a+bi з правильним знаком. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два комплексні числа з частинами −1000..1000; Complex реалізує plus, minus, times і invoke, що повертає рядок a+bi з правильним знаком. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два комплексні числа з частинами −1000..1000; Complex реалізує plus, minus, times і invoke, що повертає рядок a+bi з правильним знаком. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: div з відмовою для нуля та порівняння результату з формулою. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 6. Температури
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести дві температури й шкали C/F; Temperature зберігає кельвіни, compareTo порівнює їх; plus приймає лише різницю температур у кельвінах, а не іншу абсолютну температуру. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести дві температури й шкали C/F; Temperature зберігає кельвіни, compareTo порівнює їх; plus приймає лише різницю температур у кельвінах, а не іншу абсолютну температуру. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести дві температури й шкали C/F; Temperature зберігає кельвіни, compareTo порівнює їх; plus приймає лише різницю температур у кельвінах, а не іншу абсолютну температуру. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: окремий DeltaTemperature та minus двох температур повертає різницю. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 7. Календарні дати
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести дату ISO 1900..2100; DateValue реалізує inc і dec як нові дати через LocalDate, вивести попередню й наступну. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести дату ISO 1900..2100; DateValue реалізує inc і dec як нові дати через LocalDate, вивести попередню й наступну. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести дату ISO 1900..2100; DateValue реалізує inc і dec як нові дати через LocalDate, вивести попередню й наступну. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: rangeTo, contains, iterator; перевірити високосний рік та вичерпання. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 8. Кути
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два скінченні кути −100000..100000 градусів; Angle нормалізує до [0;360), реалізує plus, minus і times для скаляра. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два скінченні кути −100000..100000 градусів; Angle нормалізує до [0;360), реалізує plus, minus і times для скаляра. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два скінченні кути −100000..100000 градусів; Angle нормалізує до [0;360), реалізує plus, minus і times для скаляра. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: get для компонентів градус/хвилина/секунда з чітким округленням до цілої секунди. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 9. Налаштування програми
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести початкову тему light/dark і нову тему; Settings.theme використовує observable та журналює старе/нове значення; вивести журнал. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести початкову тему light/dark і нову тему; Settings.theme використовує observable та журналює старе/нове значення; вивести журнал. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести початкову тему light/dark і нову тему; Settings.theme використовує observable та журналює старе/нове значення; вивести журнал. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: валідація допустимих значень перед делегованим записом та кілька змін. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 10. Профіль користувача
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести початковий і новий вік; Profile.age використовує vetoable і приймає 0..120; початкове значення також перевірити; вивести стан після запису. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести початковий і новий вік; Profile.age використовує vetoable і приймає 0..120; початкове значення також перевірити; вивести стан після запису. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести початковий і новий вік; Profile.age використовує vetoable і приймає 0..120; початкове значення також перевірити; вивести стан після запису. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: ім’я з нормалізацією та журнал прийнятих/відхилених спроб. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 11. Кешований звіт
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести три числа −1000..1000; Report зберігає незмінні дані, lazy summary обчислює суму й середнє; прочитати двічі й показати один запуск обчислення. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести три числа −1000..1000; Report зберігає незмінні дані, lazy summary обчислює суму й середнє; прочитати двічі й показати один запуск обчислення. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести три числа −1000..1000; Report зберігає незмінні дані, lazy summary обчислює суму й середнє; прочитати двічі й показати один запуск обчислення. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: окремий лічильник ініціалізації та незалежність двох Report. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 12. Лічильник викликів
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два рядки; інтерфейс Service.process повертає uppercase, CountingService реалізує by та рахує успішні прямі process; вивести результати й кількість. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два рядки; інтерфейс Service.process повертає uppercase, CountingService реалізує by та рахує успішні прямі process; вивести результати й кількість. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два рядки; інтерфейс Service.process повертає uppercase, CountingService реалізує by та рахує успішні прямі process; вивести результати й кількість. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: додати обробку пари й дослідити внутрішні виклики делегата. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 13. Характеристики героя
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести початкове й нове здоров’я 0..100; власний делегат BoundedInt відхиляє значення поза межами до зміни; вивести стан. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести початкове й нове здоров’я 0..100; власний делегат BoundedInt відхиляє значення поза межами до зміни; вивести стан. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести початкове й нове здоров’я 0..100; власний делегат BoundedInt відхиляє значення поза межами до зміни; вивести стан. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: той самий клас делегата для mana 0..50, незалежність властивостей. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 14. Фізичні величини
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести масу 0,1..1000 кг і прискорення −100..100 м/с²; Mass.times(Acceleration) повертає Force; вивести силу з одиницею. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести масу 0,1..1000 кг і прискорення −100..100 м/с²; Mass.times(Acceleration) повертає Force; вивести силу з одиницею. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести масу 0,1..1000 кг і прискорення −100..100 м/с²; Mass.times(Acceleration) повертає Force; вивести силу з одиницею. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: Force.plus і поділ Force на ненульову Mass з типобезпечними результатами. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 15. Числові інтервали
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести межі двох закритих інтервалів −1000..1000 і число; Interval.contains перевіряє належність, intersect повертає інтервал або null. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести межі двох закритих інтервалів −1000..1000 і число; Interval.contains перевіряє належність, intersect повертає інтервал або null. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести межі двох закритих інтервалів −1000..1000 і число; Interval.contains перевіряє належність, intersect повертає інтервал або null. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: union повертає один інтервал лише для перетину/дотику, інакше два; не приховувати розрив. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 16. Права доступу
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести маски 0..7: READ=1, WRITE=2, EXECUTE=4; Permissions має іменовані infix or/and та operator contains для однієї ознаки; вивести результати. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести маски 0..7: READ=1, WRITE=2, EXECUTE=4; Permissions має іменовані infix or/and та operator contains для однієї ознаки; вивести результати. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести маски 0..7: READ=1, WRITE=2, EXECUTE=4; Permissions має іменовані infix or/and та operator contains для однієї ознаки; вивести результати. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: перевірка відсутності невідомих бітів і таблиця всіх дозволів. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 17. Шахова дошка
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести рядок і стовпець 1..8 та зміщення; Cell.plus повертає нову клітинку або відмову за межею; Board.get повертає навчальний вміст клітинки. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести рядок і стовпець 1..8 та зміщення; Cell.plus повертає нову клітинку або відмову за межею; Board.get повертає навчальний вміст клітинки. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести рядок і стовпець 1..8 та зміщення; Cell.plus повертає нову клітинку або відмову за межею; Board.get повертає навчальний вміст клітинки. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: set із перевіркою та contains для координат дошки. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 18. Обсяги пам’яті
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два обсяги 0..1000000000 байтів; Bytes реалізує plus, minus без від’ємного результату і compareTo; invoke повертає формат у KiB з двома знаками. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два обсяги 0..1000000000 байтів; Bytes реалізує plus, minus без від’ємного результату і compareTo; invoke повертає формат у KiB з двома знаками. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два обсяги 0..1000000000 байтів; Bytes реалізує plus, minus без від’ємного результату і compareTo; invoke повертає формат у KiB з двома знаками. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: times для кількості з перевіркою переповнення. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 19. Довжини
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести довжини з одиницями mm/cm/m і числами 0..1000000; Length зберігає цілі мм, реалізує plus і compareTo. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести довжини з одиницями mm/cm/m і числами 0..1000000; Length зберігає цілі мм, реалізує plus і compareTo. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести довжини з одиницями mm/cm/m і числами 0..1000000; Length зберігає цілі мм, реалізує plus і compareTo. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: minus та times для невід’ємного цілого множника без зміни операндів. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 20. Крокомір
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести послідовність до 20 показників 0..100000; делегат Maximum зберігає найбільше надане значення, вивести результат після кожного запису. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести послідовність до 20 показників 0..100000; делегат Maximum зберігає найбільше надане значення, вивести результат після кожного запису. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести послідовність до 20 показників 0..100000; делегат Maximum зберігає найбільше надане значення, вивести результат після кожного запису. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: окремі денний і тижневий лічильники без спільного стану. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 21. Анкета
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести ім’я та місто; делегат TrimmedText обрізає крайні пробіли, відхиляє порожній рядок і довжину понад 40, вивести нормалізовані поля. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести ім’я та місто; делегат TrimmedText обрізає крайні пробіли, відхиляє порожній рядок і довжину понад 40, вивести нормалізовані поля. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести ім’я та місто; делегат TrimmedText обрізає крайні пробіли, відхиляє порожній рядок і довжину понад 40, вивести нормалізовані поля. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: журнал property.name та стан після відмови. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 22. Обмеження швидкості
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести початкову й нову швидкість; ReadWriteProperty SpeedRange приймає скінченні значення 0..130 км/год, вивести стан після спроби. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести початкову й нову швидкість; ReadWriteProperty SpeedRange приймає скінченні значення 0..130 км/год, вивести стан після спроби. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести початкову й нову швидкість; ReadWriteProperty SpeedRange приймає скінченні значення 0..130 км/год, вивести стан після спроби. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: перевикористати делегат для другого незалежного об’єкта та перевірити NaN. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 23. Бонусна картка
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести суму покупки 0..1000000 копійок; BonusRule дає 1 бал за повні 10000 копійок, LoggingBonusRule через by журналює успішні виклики. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести суму покупки 0..1000000 копійок; BonusRule дає 1 бал за повні 10000 копійок, LoggingBonusRule через by журналює успішні виклики. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести суму покупки 0..1000000 копійок; BonusRule дає 1 бал за повні 10000 копійок, LoggingBonusRule через by журналює успішні виклики. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: декоратор, який подвоює результат за явно заданого прапорця promo. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 24. Калькулятор з журналом
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два числа −1000..1000 і add/subtract; Calculator інтерфейс та LoggingCalculator by з журналом аргументів і результату. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два числа −1000..1000 і add/subtract; Calculator інтерфейс та LoggingCalculator by з журналом аргументів і результату. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два числа −1000..1000 і add/subtract; Calculator інтерфейс та LoggingCalculator by з журналом аргументів і результату. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: додати multiply й продемонструвати неперевизначений делегований метод. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 25. Версії програми
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести версії major.minor.patch з компонентами 0..999; Version.compareTo порівнює лексикографічно, rangeTo створює лише інтервал належності без перебору. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести версії major.minor.patch з компонентами 0..999; Version.compareTo порівнює лексикографічно, rangeTo створює лише інтервал належності без перебору. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести версії major.minor.patch з компонентами 0..999; Version.compareTo порівнює лексикографічно, rangeTo створює лише інтервал належності без перебору. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: contains для перевірки версії між включеними межами та узгоджена рівність. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 26. Гральні кубики
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести кількість граней 2..20 і фіксовану послідовність чисел 1..грані; Dice.invoke повертає наступний елемент циклічно, plus створює DicePair, що повертає суму двох кидків. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести кількість граней 2..20 і фіксовану послідовність чисел 1..грані; Dice.invoke повертає наступний елемент циклічно, plus створює DicePair, що повертає суму двох кидків. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести кількість граней 2..20 і фіксовану послідовність чисел 1..грані; Dice.invoke повертає наступний елемент циклічно, plus створює DicePair, що повертає суму двох кидків. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: журнал кидків без випадкової залежності; незалежні курсори. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 27. Змішування фарб
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести два RGB-кольори з каналами 0..255; Color.plus повертає поканальне середнє з округленням донизу, times масштабує канали з обмеженням 0..255. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести два RGB-кольори з каналами 0..255; Color.plus повертає поканальне середнє з округленням донизу, times масштабує канали з обмеженням 0..255. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести два RGB-кольори з каналами 0..255; Color.plus повертає поканальне середнє з округленням донизу, times масштабує канали з обмеженням 0..255. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: get за індексом 0..2 та перевірка неправильних індексів. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 28. Бюджет подорожі
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести початковий бюджет 0..1000000 копійок і витрату; Budget використовує observable для повідомлення після успішного списання; від’ємний залишок заборонено. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести початковий бюджет 0..1000000 копійок і витрату; Budget використовує observable для повідомлення після успішного списання; від’ємний залишок заборонено. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести початковий бюджет 0..1000000 копійок і витрату; Budget використовує observable для повідомлення після успішного списання; від’ємний залишок заборонено. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: попередження при залишку нижче 10000 копійок та журнал переходу порога. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 29. Замішування бетону
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести маси цементу, піску й щебеню 0..1000 кг та множник 0..10; Mix.times повертає нову суміш, plus додає компоненти; вивести маси й загальну масу. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести маси цементу, піску й щебеню 0..1000 кг та множник 0..10; Mix.times повертає нову суміш, plus додає компоненти; вивести маси й загальну масу. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести маси цементу, піску й щебеню 0..1000 кг та множник 0..10; Mix.times повертає нову суміш, plus додає компоненти; вивести маси й загальну масу. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: componentN для деструктуризації та перевірка скінченності. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Варіант 30. Поліноми другого степеня
1. Початковий рівень. Створити консольну програму Kotlin/JVM: ввести коефіцієнти двох поліномів ax²+bx+c у межах −1000..1000 і x; Polynomial.plus, times зі скаляром та invoke(x) обчислюють результат. Подати UML, пояснити власника стану та семантику операцій.
2. Базовий рівень. Створити консольну програму Kotlin/JVM: ввести коефіцієнти двох поліномів ax²+bx+c у межах −1000..1000 і x; Polynomial.plus, times зі скаляром та invoke(x) обчислюють результат. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Подати UML, пояснити власника стану та семантику операцій.
3. Високий рівень. Створити консольну програму Kotlin/JVM: ввести коефіцієнти двох поліномів ax²+bx+c у межах −1000..1000 і x; Polynomial.plus, times зі скаляром та invoke(x) обчислюють результат. Обробити до 20 наборів, перевірити межі й помилки до зміни стану, вивести таблицю результатів. Розширення: get за степенем 0..2, unaryMinus і перевірка незмінності операндів. Реалізувати --help, іменовані аргументи, повторюваний --item з описом полів, клавіатуру без аргументів. Помилки: stderr/код 2, успіх: код 0. Подати підсумки та п’ять перевірок із відмовою. Подати UML, пояснити власника стану та семантику операцій.
Порядок виконання та захисту роботи
- Визначте контракт операцій і накресліть UML.
- Реалізуйте перевірені конструктори та обмеження чисел.
- Перевірте оператори без зміни вхідних значень, якщо це контракт типу; окремо перевірте plusAssign, якщо він потрібний.
- Перевірте межі індексів, порожні діапазони й вичерпання ітератора.
- Для властивостей перевірте початкове значення, успішний запис, відмову та незмінність стану після неї.
- Для декоратора перевірте прямі та внутрішні виклики делегата.
- Подайте код, UML, README і щонайменше п’ять перевірок.
- На захисті перейдіть від символу операції до функції в IDE та поясніть момент виклику вашого делегата.