Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Подайте UML: абстрактні члени, реалізацію інтерфейсів і належність вкладених класів.
Варіанти
Варіант 1. Платіжні методи
1. Початковий рівень. Створити консольну програму Java: ввести вид card або transfer і суму 1..1000000 копійок; Payment має метод fee, реалізації повертають 2 відсотки або 100 копійок; вивести комісію та суму разом без реального платежу. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести вид card або transfer і суму 1..1000000 копійок; Payment має метод fee, реалізації повертають 2 відсотки або 100 копійок; вивести комісію та суму разом без реального платежу. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести вид card або transfer і суму 1..1000000 копійок; Payment має метод fee, реалізації повертають 2 відсотки або 100 копійок; вивести комісію та суму разом без реального платежу. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: ваучер з нульовою комісією й анонімний компаратор за комісією. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 2. Креслення фігур
1. Початковий рівень. Створити консольну програму Java: ввести вид rectangle або triangle та розмір 1..20; абстрактна Figure і Drawable будують рядки з символів зірочки: квадрат розміру n або трикутник із рядками 1..n; вивести малюнок. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести вид rectangle або triangle та розмір 1..20; абстрактна Figure і Drawable будують рядки з символів зірочки: квадрат розміру n або трикутник із рядками 1..n; вивести малюнок. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести вид rectangle або triangle та розмір 1..20; абстрактна Figure і Drawable будують рядки з символів зірочки: квадрат розміру n або трикутник із рядками 1..n; вивести малюнок. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: Scalable зі збільшенням розміру в межах 20 та перевіркою відмови. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 3. Сортування студентів
1. Початковий рівень. Створити консольну програму Java: ввести до 20 непорожніх імен та балів 0..100; Student реалізує Comparable за іменем, а анонімний Comparator – за балом спадно, потім іменем; вивести обидва порядки. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести до 20 непорожніх імен та балів 0..100; Student реалізує Comparable за іменем, а анонімний Comparator – за балом спадно, потім іменем; вивести обидва порядки. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести до 20 непорожніх імен та балів 0..100; Student реалізує Comparable за іменем, а анонімний Comparator – за балом спадно, потім іменем; вивести обидва порядки. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: другий компаратор за довжиною імені й узгоджені equals та hashCode. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 4. Діапазон дат
1. Початковий рівень. Створити консольну програму Java: ввести початкову й кінцеву дати ISO у межах 2020..2030 та крок 1..30 днів; DateRange реалізує Iterable з внутрішнім Iterator, видає дати від початку включно до кінця невключно; вивести дати. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести початкову й кінцеву дати ISO у межах 2020..2030 та крок 1..30 днів; DateRange реалізує Iterable з внутрішнім Iterator, видає дати від початку включно до кінця невключно; вивести дати. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести початкову й кінцеву дати ISO у межах 2020..2030 та крок 1..30 днів; DateRange реалізує Iterable з внутрішнім Iterator, видає дати від початку включно до кінця невключно; вивести дати. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: два незалежні ітератори і явну перевірку next після завершення. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 5. Фільтри тексту
1. Початковий рівень. Створити консольну програму Java: ввести рядок до 200 символів і вид trim або upper; TextFilter та реалізації застосовують strip або toUpperCase з Locale.ROOT; вивести результат. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести рядок до 200 символів і вид trim або upper; TextFilter та реалізації застосовують strip або toUpperCase з Locale.ROOT; вивести результат. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести рядок до 200 символів і вид trim або upper; TextFilter та реалізації застосовують strip або toUpperCase з Locale.ROOT; вивести результат. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: ланцюжок двох фільтрів та порівняння порядку застосування. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 6. Розумні пристрої
1. Початковий рівень. Створити консольну програму Java: ввести ім’я, on або off та яскравість 0..100; Device реалізує Switchable і Adjustable, default toggle змінює стан через методи контракту; вивести стан і рівень. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести ім’я, on або off та яскравість 0..100; Device реалізує Switchable і Adjustable, default toggle змінює стан через методи контракту; вивести стан і рівень. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести ім’я, on або off та яскравість 0..100; Device реалізує Switchable і Adjustable, default toggle змінює стан через методи контракту; вивести стан і рівень. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: статичну фабрику перевірки рівня й відмову без зміни. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 7. Формати звітів
1. Початковий рівень. Створити консольну програму Java: ввести назву й три цілі числа −1000..1000; абстрактний Report має фінальний render та абстрактний body; TextReport розділяє числа пробілами, CsvReport – крапками з комою; вивести обидва звіти. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести назву й три цілі числа −1000..1000; абстрактний Report має фінальний render та абстрактний body; TextReport розділяє числа пробілами, CsvReport – крапками з комою; вивести обидва звіти. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести назву й три цілі числа −1000..1000; абстрактний Report має фінальний render та абстрактний body; TextReport розділяє числа пробілами, CsvReport – крапками з комою; вивести обидва звіти. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: HTML-формат з екрануванням символів амперсанда та кутових дужок у заголовку. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 8. Стратегії знижок
1. Початковий рівень. Створити консольну програму Java: ввести суму 0..1000000 і вид none або percent; DiscountPolicy повертає кінцеву ціну без зміни або мінус 10 відсотків із цілими копійками; вивести суму. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести суму 0..1000000 і вид none або percent; DiscountPolicy повертає кінцеву ціну без зміни або мінус 10 відсотків із цілими копійками; вивести суму. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести суму 0..1000000 і вид none або percent; DiscountPolicy повертає кінцеву ціну без зміни або мінус 10 відсотків із цілими копійками; вивести суму. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: вкладені статичні реалізації та стратегію мінус 500, але не нижче нуля. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 9. Контейнери на масиві
1. Початковий рівень. Створити консольну програму Java: ввести до 20 цілих чисел і вид stack або queue; IntContainer задає add, remove і size, дві реалізації видають останній або перший елемент; вивести порядок вилучення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести до 20 цілих чисел і вид stack або queue; IntContainer задає add, remove і size, дві реалізації видають останній або перший елемент; вивести порядок вилучення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести до 20 цілих чисел і вид stack або queue; IntContainer задає add, remove і size, дві реалізації видають останній або перший елемент; вивести порядок вилучення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: Iterable з незалежними ітераторами та перевіркою порожнього контейнера. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 10. Ігри на кубиках
1. Початковий рівень. Створити консольну програму Java: ввести дві грані 1..6; абстрактна DiceGame фіксує перевірку, ScoreRule задає суму або максимум; вивести рахунок кожного правила без випадковості. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести дві грані 1..6; абстрактна DiceGame фіксує перевірку, ScoreRule задає суму або максимум; вивести рахунок кожного правила без випадковості. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести дві грані 1..6; абстрактна DiceGame фіксує перевірку, ScoreRule задає суму або максимум; вивести рахунок кожного правила без випадковості. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: правило подвоєної суми за однакових граней як анонімний клас. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 11. Підписка на події
1. Початковий рівень. Створити консольну програму Java: ввести непорожнє повідомлення до 100 символів; Listener має onEvent, два анонімні слухачі друкують текст і його довжину; вивести обидва повідомлення в порядку реєстрації. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести непорожнє повідомлення до 100 символів; Listener має onEvent, два анонімні слухачі друкують текст і його довжину; вивести обидва повідомлення в порядку реєстрації. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести непорожнє повідомлення до 100 символів; Listener має onEvent, два анонімні слухачі друкують текст і його довжину; вивести обидва повідомлення в порядку реєстрації. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: реєстр до 20 слухачів та відписку за ідентифікатором. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 12. Згладжування сигналу
1. Початковий рівень. Створити консольну програму Java: ввести від 3 до 20 чисел −1000..1000; SignalFilter має apply, реалізації повертають середнє або медіану кожного повного вікна з трьох чисел; вивести результати без крайових неповних вікон. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести від 3 до 20 чисел −1000..1000; SignalFilter має apply, реалізації повертають середнє або медіану кожного повного вікна з трьох чисел; вивести результати без крайових неповних вікон. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести від 3 до 20 чисел −1000..1000; SignalFilter має apply, реалізації повертають середнє або медіану кожного повного вікна з трьох чисел; вивести результати без крайових неповних вікон. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: окремі компаратори й захисні копії вхідного масиву. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 13. Відстеження відправлень
1. Початковий рівень. Створити консольну програму Java: ввести код та стан created, sent або delivered; Parcel реалізує Trackable і Deliverable, deliver дозволений лише з sent; вивести стан до та після. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести код та стан created, sent або delivered; Parcel реалізує Trackable і Deliverable, deliver дозволений лише з sent; вивести стан до та після. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести код та стан created, sent або delivered; Parcel реалізує Trackable і Deliverable, deliver дозволений лише з sent; вивести стан до та після. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: історію переходів до 20 записів і незалежний ітератор. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 14. Валідація форми
1. Початковий рівень. Створити консольну програму Java: ввести ім’я й вік як рядки; Rule перевіряє непорожнє ім’я або цілий вік 0..120; вивести всі порушення без зупинки на першому. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести ім’я й вік як рядки; Rule перевіряє непорожнє ім’я або цілий вік 0..120; вивести всі порушення без зупинки на першому. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести ім’я й вік як рядки; Rule перевіряє непорожнє ім’я або цілий вік 0..120; вивести всі порушення без зупинки на першому. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: композицію правил довжини імені 2..40 та реєстр анонімних перевірок. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 15. Музичний плеєр
1. Початковий рівень. Створити консольну програму Java: ввести назву, секунди 1..7200 і команду play або stop; PlayerState реалізується вкладеними Stopped та Playing; вивести попередній і новий стан. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести назву, секунди 1..7200 і команду play або stop; PlayerState реалізується вкладеними Stopped та Playing; вивести попередній і новий стан. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести назву, секунди 1..7200 і команду play або stop; PlayerState реалізується вкладеними Stopped та Playing; вивести попередній і новий стан. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: послідовність до 20 команд і заборону stop для вже зупиненого. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 16. Будівельник замовлення
1. Початковий рівень. Створити консольну програму Java: ввести клієнта, кількість 1..100 і примітку до 100 символів; Order має static Builder з обов’язковим клієнтом, незмінний результат; вивести замовлення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести клієнта, кількість 1..100 і примітку до 100 символів; Order має static Builder з обов’язковим клієнтом, незмінний результат; вивести замовлення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести клієнта, кількість 1..100 і примітку до 100 символів; Order має static Builder з обов’язковим клієнтом, незмінний результат; вивести замовлення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: повторне використання builder та перевірку незалежності створених об’єктів. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 17. Покрокові рецепти
1. Початковий рівень. Створити консольну програму Java: ввести назву страви й до 10 непорожніх кроків; абстрактна Recipe має фінальний cook, внутрішній Step друкує назву рецепта та номер; вивести послідовність. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести назву страви й до 10 непорожніх кроків; абстрактна Recipe має фінальний cook, внутрішній Step друкує назву рецепта та номер; вивести послідовність. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести назву страви й до 10 непорожніх кроків; абстрактна Recipe має фінальний cook, внутрішній Step друкує назву рецепта та номер; вивести послідовність. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: дві конкретні страви зі спільним шаблоном початку й завершення. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 18. Навчальні шифри
1. Початковий рівень. Створити консольну програму Java: ввести ASCII-літери A..Z і зсув 0..25; Cipher має encode та decode, Caesar реалізує циклічний зсув, Identity повертає вхід; вивести шифротекст і відновлений текст, зазначити непридатність для захисту. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести ASCII-літери A..Z і зсув 0..25; Cipher має encode та decode, Caesar реалізує циклічний зсув, Identity повертає вхід; вивести шифротекст і відновлений текст, зазначити непридатність для захисту. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести ASCII-літери A..Z і зсув 0..25; Cipher має encode та decode, Caesar реалізує циклічний зсув, Identity повертає вхід; вивести шифротекст і відновлений текст, зазначити непридатність для захисту. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: стратегію Vigenere з ключем A..Z та перевірку зворотного перетворення. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 19. Чисельне інтегрування
1. Початковий рівень. Створити консольну програму Java: ввести межі −100..100 у зростаючому порядку й число частин 1..10000; Function задає x * x, Integrator реалізує ліві прямокутники або трапеції; вивести наближення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести межі −100..100 у зростаючому порядку й число частин 1..10000; Function задає x * x, Integrator реалізує ліві прямокутники або трапеції; вивести наближення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести межі −100..100 у зростаючому порядку й число частин 1..10000; Function задає x * x, Integrator реалізує ліві прямокутники або трапеції; вивести наближення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: метод Сімпсона з парною кількістю частин і порівняння з (b^3 - a^3) / 3. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 20. Зв’язаний список
1. Початковий рівень. Створити консольну програму Java: ввести до 20 цілих чисел; IntList містить статичний Node і внутрішній Iterator, додає в кінець та видає елементи у введеному порядку; вивести обхід. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести до 20 цілих чисел; IntList містить статичний Node і внутрішній Iterator, додає в кінець та видає елементи у введеному порядку; вивести обхід. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести до 20 цілих чисел; IntList містить статичний Node і внутрішній Iterator, додає в кінець та видає елементи у введеному порядку; вивести обхід. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: пошук першого збігу та видалення з документованою семантикою ітератора. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 21. Маршрути транспорту
1. Початковий рівень. Створити консольну програму Java: ввести вид bus або tram і число поїздок 1..100; FarePolicy повертає умовні 1500 або 1000 копійок за поїздку; вивести суму. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести вид bus або tram і число поїздок 1..100; FarePolicy повертає умовні 1500 або 1000 копійок за поїздку; вивести суму. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести вид bus або tram і число поїздок 1..100; FarePolicy повертає умовні 1500 або 1000 копійок за поїздку; вивести суму. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: абстрактний Route зі спільним описом та переданою політикою тарифу. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 22. План тренувань
1. Початковий рівень. Створити консольну програму Java: ввести вид walk або run та хвилини 1..180; Exercise повертає умовні 4 або 8 одиниць енергії за хвилину, не фізіологічну рекомендацію; вивести розрахунок. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести вид walk або run та хвилини 1..180; Exercise повертає умовні 4 або 8 одиниць енергії за хвилину, не фізіологічну рекомендацію; вивести розрахунок. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести вид walk або run та хвилини 1..180; Exercise повертає умовні 4 або 8 одиниць енергії за хвилину, не фізіологічну рекомендацію; вивести розрахунок. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: Iterable плану з сумарним часом і навчальною енергією. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 23. Торговий автомат
1. Початковий рівень. Створити консольну програму Java: ввести ціну 1..10000 копійок і внесену суму 0..10000; State має action, Waiting переходить у Ready лише за достатньої суми; вивести стан і решту після видачі. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести ціну 1..10000 копійок і внесену суму 0..10000; State має action, Waiting переходить у Ready лише за достатньої суми; вивести стан і решту після видачі. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести ціну 1..10000 копійок і внесену суму 0..10000; State має action, Waiting переходить у Ready лише за достатньої суми; вивести стан і решту після видачі. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: послідовність внесення, скасування та видачі через вкладені реалізації станів. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 24. Текстовий редактор
1. Початковий рівень. Створити консольну програму Java: ввести початковий рядок до 100 символів і суфікс до 20; Command задає execute та undo, Append зберігає попередній текст; вивести результат і відновлений текст. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести початковий рядок до 100 символів і суфікс до 20; Command задає execute та undo, Append зберігає попередній текст; вивести результат і відновлений текст. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести початковий рядок до 100 символів і суфікс до 20; Command задає execute та undo, Append зберігає попередній текст; вивести результат і відновлений текст. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: команду видалення останніх n символів та стек до 20 скасувань. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 25. Метеостанція
1. Початковий рівень. Створити консольну програму Java: ввести температуру −50..60; WeatherListener має changed, анонімні слухачі виводять значення та рядок frost для від’ємної температури; вивести повідомлення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести температуру −50..60; WeatherListener має changed, анонімні слухачі виводять значення та рядок frost для від’ємної температури; вивести повідомлення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести температуру −50..60; WeatherListener має changed, анонімні слухачі виводять значення та рядок frost для від’ємної температури; вивести повідомлення. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: реєстрацію і відписку до 20 слухачів без дублювання ідентифікаторів. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 26. Правила поштової скриньки
1. Початковий рівень. Створити консольну програму Java: ввести відправника, тему й слово до 30 символів; MailRule перевіряє точного відправника або входження слова в тему; вивести збіги без надсилання листів. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести відправника, тему й слово до 30 символів; MailRule перевіряє точного відправника або входження слова в тему; вивести збіги без надсилання листів. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести відправника, тему й слово до 30 символів; MailRule перевіряє точного відправника або входження слова в тему; вивести збіги без надсилання листів. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: ланцюг правил і розподіл у навчальні папки inbox та review. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 27. Програма лояльності
1. Початковий рівень. Створити консольну програму Java: ввести суму 0..1000000 копійок і рівень silver або gold; PointsPolicy нараховує одну або дві одиниці за кожні повні 10000 копійок; вивести бали. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести суму 0..1000000 копійок і рівень silver або gold; PointsPolicy нараховує одну або дві одиниці за кожні повні 10000 копійок; вивести бали. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести суму 0..1000000 копійок і рівень silver або gold; PointsPolicy нараховує одну або дві одиниці за кожні повні 10000 копійок; вивести бали. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: статичну вкладену фабрику політик і компаратор за результатом. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 28. Навчальні податкові політики
1. Початковий рівень. Створити консольну програму Java: ввести дохід 0..100000000 копійок та код A або B; TaxPolicy повертає умовні 5 або 10 відсотків із відкиданням дробової копійки; вивести суму, позначивши її навчальною моделлю без зв’язку з чинним правом. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести дохід 0..100000000 копійок та код A або B; TaxPolicy повертає умовні 5 або 10 відсотків із відкиданням дробової копійки; вивести суму, позначивши її навчальною моделлю без зв’язку з чинним правом. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести дохід 0..100000000 копійок та код A або B; TaxPolicy повертає умовні 5 або 10 відсотків із відкиданням дробової копійки; вивести суму, позначивши її навчальною моделлю без зв’язку з чинним правом. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: політику звільнення перших 100000 копійок і порівняння моделей. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 29. Черга друку
1. Початковий рівень. Створити консольну програму Java: ввести назву, сторінки 1..1000 та пріоритет 1..5; PrintJob реалізує Comparable за назвою, а анонімний Comparator – за пріоритетом спадно, потім сторінками; вивести два порядки. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести назву, сторінки 1..1000 та пріоритет 1..5; PrintJob реалізує Comparable за назвою, а анонімний Comparator – за пріоритетом спадно, потім сторінками; вивести два порядки. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести назву, сторінки 1..1000 та пріоритет 1..5; PrintJob реалізує Comparable за назвою, а анонімний Comparator – за пріоритетом спадно, потім сторінками; вивести два порядки. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: ідентифікатор як остаточний критерій і підсумок сторінок. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Варіант 30. Турнірна таблиця
1. Початковий рівень. Створити консольну програму Java: ввести назви команд, очки 0..100 і різницю голів −100..100; анонімний Comparator впорядковує за очками спадно, різницею спадно та назвою; вивести місця. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати.
2. Базовий рівень. Створити консольну програму Java: ввести назви команд, очки 0..100 і різницю голів −100..100; анонімний Comparator впорядковує за очками спадно, різницею спадно та назвою; вивести місця. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів.
3. Високий рівень. Створити консольну програму Java: ввести назви команд, очки 0..100 і різницю голів −100..100; анонімний Comparator впорядковує за очками спадно, різницею спадно та назвою; вивести місця. Подати UML класів; визначити явний інтерфейс або абстрактний клас та щонайменше дві реалізації; лямбди не використовувати. Обробити масив від 1 до 20 наборів із клавіатури, перевірити кожне поле до зміни стану; вивести рядок результату для кожного набору й кількість прийнятих та відхилених наборів. Додати: другий компаратор за назвою й перевірку рівних ключів. Реалізувати --help, іменовані параметри та повторюваний --item зі складеним значенням: поля наведеного набору розділено крапкою з комою, роздільник у тексті заборонений. Без аргументів запитувати ті самі дані з клавіатури. Діагностику писати в stderr; код завершення 0 означає успіх, 2 – помилку введення, 1 – непередбачену помилку виконання. Вивести вирівняну таблицю результатів і підсумкові кількості; додати щонайменше п’ять перевірок: звичайну, граничну, неправильний формат, порушення інваріанта та відмову без зміни стану.
Порядок виконання та захисту роботи
- Запишіть контракт, межі даних і поведінку на порожньому вводі.
- Виберіть абстрактний клас або інтерфейс та подайте UML.
- Реалізуйте щонайменше дві взаємозамінні реалізації.
- Відокремте консоль від моделі й алгоритму.
- Перевірте контракт порядку, ітерації або переходів стану.
- Подайте повні приклади запуску й щонайменше п’ять перевірок.
- Поясніть вибір static nested, inner або анонімного класу.