Українська
Завдання
Відповідно до номера свого варіанта виконайте завдання обраного рівня складності.
Варіанти
Варіант 1. Динамічний масив
1. Початковий рівень. Створити консольну програму, що реалізує масив цілих заданої довжини. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Динамічний масив»: реалізувати масив цілих заданої довжини, а також зміну копії без впливу на оригінал. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Динамічний масив»: реалізувати клас динамічного масиву цілих із власним буфером, reserve зі строгою гарантією і журнал місткості. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 2. Стек
1. Початковий рівень. Створити консольну програму, що реалізує стек цілих на власному буфері. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Стек»: реалізувати стек цілих на власному буфері, а також копіювання непорожнього й порожнього стека. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Стек»: реалізувати клас стека цілих на власному буфері, його move-only альтернативу та порівняння операцій push/pop. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 3. Аудіобуфер
1. Початковий рівень. Створити консольну програму, що реалізує кільцевий буфер семплів -1..1. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Аудіобуфер»: реалізувати кільцевий буфер семплів -1..1, а також копію зі збереженням позицій читання й запису. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Аудіобуфер»: реалізувати клас кільцевого буфера аудіосемплів -1..1 із власною пам’яттю та передавання буферів каналам через noexcept move без втрати порядку. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 4. Відеокадр
1. Початковий рівень. Створити консольну програму, що реалізує кадр ширини й висоти з байтами пікселів. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Відеокадр»: реалізувати кадр ширини й висоти з байтами пікселів, а також незалежне редагування копії кадру. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Відеокадр»: реалізувати клас відеокадру ширини й висоти з власним буфером байтів пікселів, серію копій і переміщень кадрів із лічильниками та вимірюванням часу. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 5. Поліном
1. Початковий рівень. Створити консольну програму, що реалізує коефіцієнти полінома у власному масиві. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Поліном»: реалізувати коефіцієнти полінома у власному масиві, а також copy-and-swap для присвоєння різних степенів. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Поліном»: реалізувати клас полінома з коефіцієнтами у власному динамічному масиві, керовану відмову копіювання й доказ незмінності цілі присвоєння. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 6. Велике ціле
1. Початковий рівень. Створити консольну програму, що реалізує невід’ємне число як масив десяткових цифр. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Велике ціле»: реалізувати невід’ємне число як масив десяткових цифр, а також копіювання, додавання одиниці й перенесення буфера. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Велике ціле»: реалізувати клас великого невід’ємного цілого як власного масиву десяткових цифр і фабрику суми, що повертає значення без return std::move. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 7. Бітова множина
1. Початковий рівень. Створити консольну програму, що реалізує масив слів для бітів 0–255. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Бітова множина»: реалізувати масив слів для бітів 0–255, а також незалежні копії та встановлення біта. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Бітова множина»: реалізувати клас бітової множини на власному масиві слів для бітів 0–255, об’єднання множин із поверненням значення та тестами самоприсвоєння. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 8. Мапа гри
1. Початковий рівень. Створити консольну програму, що реалізує прямокутний буфер клітинок 0/1. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Мапа гри»: реалізувати прямокутний буфер клітинок 0/1, а також клонування рівня та редагування копії. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Мапа гри»: реалізувати клас ігрової мапи з власним прямокутним буфером клітинок 0/1, чергу завантажених рівнів із переміщенням і перевіркою порожнього джерела. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 9. Документ
1. Початковий рівень. Створити консольну програму, що реалізує рядок тексту з власним буфером. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Документ»: реалізувати рядок тексту з власним буфером, а також копію документа й незалежне редагування. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Документ»: реалізувати клас документа з текстом у власному буфері, історію undo з переміщенням версій та збереженням останнього стану. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 10. Мережевий пакет
1. Початковий рівень. Створити консольну програму, що реалізує move-only буфер навчальних байтів. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Мережевий пакет»: реалізувати move-only буфер навчальних байтів, а також передавання між двома власниками без копії. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Мережевий пакет»: реалізувати move-only клас мережевого пакета з власним буфером навчальних байтів, чергу пакетів у vector, лічильник живих буферів і звіт. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 11. Журнал подій
1. Початковий рівень. Створити консольну програму, що реалізує RAII-об’єкт із повідомленням про завершення області. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Журнал подій»: реалізувати RAII-об’єкт із повідомленням про завершення області, а також одноразове завершення при return і винятку. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Журнал подій»: реалізувати RAII-клас журналу подій, що повідомляє про завершення області, накопичення подій у зовнішньому журналі з безвинятковим очищенням. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 12. Таймер функцій
1. Початковий рівень. Створити консольну програму, що реалізує RAII-таймер steady_clock. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Таймер функцій»: реалізувати RAII-таймер steady_clock, а також запис тривалості при нормальному й винятковому виході. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Таймер функцій»: реалізувати RAII-таймер на steady_clock, що записує тривалість функції при нормальному й винятковому виході, та звіт кількох іменованих вимірювань без вимог до конкретних мілісекунд. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 13. Банківська транзакція
1. Початковий рівень. Створити консольну програму, що реалізує guard для одного цілого балансу. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Банківська транзакція»: реалізувати guard для одного цілого балансу, а також commit і відкат при помилці. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Банківська транзакція»: реалізувати RAII-guard транзакції для цілого балансу з commit і відкатом при помилці та атомарний локальний переказ між двома балансами з перевіркою суми. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 14. Розріджений вектор
1. Початковий рівень. Створити консольну програму, що реалізує масив пар індекс–значення. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Розріджений вектор»: реалізувати масив пар індекс–значення, а також незалежну копію та перевірку унікальних індексів. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Розріджений вектор»: реалізувати клас розрідженого вектора з власним масивом пар індекс–значення з унікальними індексами та порівняння цього власника буфера з реалізацією на vector за правилом нуля. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 15. Гістограма
1. Початковий рівень. Створити консольну програму, що реалізує масив невід’ємних лічильників. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Гістограма»: реалізувати масив невід’ємних лічильників, а також копіювання і додавання спостереження лише в копію. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Гістограма»: реалізувати клас гістограми з власним масивом невід’ємних лічильників і злиття сумісних гістограм із поверненням нового об’єкта. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 16. Електронна таблиця
1. Початковий рівень. Створити консольну програму, що реалізує буфер текстових комірок прямокутного аркуша. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Електронна таблиця»: реалізувати буфер текстових комірок прямокутного аркуша, а також копіювання аркуша й редагування комірки. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Електронна таблиця»: реалізувати клас аркуша електронної таблиці з власним буфером текстових комірок, книги аркушів і переміщення аркушів між книгами зі збереженням назв без дублікатів. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 17. Колода карт
1. Початковий рівень. Створити консольну програму, що реалізує move-only набір номерів карт 0–51. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Колода карт»: реалізувати move-only набір номерів карт 0–51, а також передачу колоди одному власнику. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Колода карт»: реалізувати move-only клас колоди з набором номерів карт 0–51 і роздачу неперетинних наборів гравцям із перевіркою збереження кількості. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 18. Матриця зображення
1. Початковий рівень. Створити консольну програму, що реалізує матрицю цілих пікселів 0–255. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Матриця зображення»: реалізувати матрицю цілих пікселів 0–255, а також незалежну копію та зміну пікселя. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Матриця зображення»: реалізувати клас матриці зображення з власним буфером цілих пікселів 0–255 і поворот на 90 градусів із поверненням значення й порівнянням розмірів. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 19. Пул з’єднань
1. Початковий рівень. Створити консольну програму, що реалізує RAII-токен навчального ресурсу з пулу. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Пул з’єднань»: реалізувати RAII-токен навчального ресурсу з пулу, а також одноразове повернення токена після переміщення. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Пул з’єднань»: реалізувати RAII-токен навчального ресурсу, що повертається в пул один раз, пул із фіксованою місткістю та журнал видач без справжньої мережі. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 20. Сесія користувача
1. Початковий рівень. Створити консольну програму, що реалізує move-only навчальний токен сесії. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Сесія користувача»: реалізувати move-only навчальний токен сесії, а також перенесення токена і перевірку недійсного джерела. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Сесія користувача»: реалізувати move-only клас навчального токена сесії з перевіркою недійсного джерела та передачу сесії між двома сервісами з відмовою без втрати власника. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 21. Черга друку
1. Початковий рівень. Створити консольну програму, що реалізує завдання з власним текстовим буфером. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Черга друку»: реалізувати завдання з власним текстовим буфером, а також копію та переміщення завдання. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Черга друку»: реалізувати клас завдання друку з власним текстовим буфером, чергу move-only завдань і звіт про завершені без реального друку. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 22. Граф суміжності
1. Початковий рівень. Створити консольну програму, що реалізує квадратний буфер матриці 0/1. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Граф суміжності»: реалізувати квадратний буфер матриці 0/1, а також незалежне клонування графа. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Граф суміжності»: реалізувати клас графа з власним квадратним буфером матриці суміжності 0/1, повернення транспонованого графа та контроль передачі ресурсу. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 23. Архів фотографій
1. Початковий рівень. Створити консольну програму, що реалізує буфер навчального зображення. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Архів фотографій»: реалізувати буфер навчального зображення, а також копію й переміщення з лічильниками. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Архів фотографій»: реалізувати клас фотографії з власним буфером навчального зображення й лічильниками копій і переміщень та пакетне додавання фото у vector з аналізом перевиділення та noexcept. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 24. Ресурс лабораторії
1. Початковий рівень. Створити консольну програму, що реалізує RAII-бронювання одного навчального приладу. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Ресурс лабораторії»: реалізувати RAII-бронювання одного навчального приладу, а також звільнення при винятку й заборону повторного бронювання. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Ресурс лабораторії»: реалізувати RAII-бронювання одного навчального приладу із забороною повторного бронювання та переміщення права бронювання без подвійного звільнення. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 25. Малий рядок
1. Початковий рівень. Створити консольну програму, що реалізує рядок із фіксованим внутрішнім буфером 15 символів. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Малий рядок»: реалізувати рядок із фіксованим внутрішнім буфером 15 символів, а також перехід на динамічний буфер для довшого тексту. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Малий рядок»: реалізувати клас малого рядка з внутрішнім буфером 15 символів і динамічним буфером для довшого тексту та правило п’яти між коротким і довгим станами з усіма чотирма переходами. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 26. Сенсорна серія
1. Початковий рівень. Створити консольну програму, що реалізує буфер скінченних вимірювань. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Сенсорна серія»: реалізувати буфер скінченних вимірювань, а також глибоку копію та move через std::exchange. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Сенсорна серія»: реалізувати клас серії сенсора з власним буфером скінченних вимірювань і поділ серії на два нові буфери зі збереженням даних і тестами порожніх частин. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 27. Шахова партія
1. Початковий рівень. Створити консольну програму, що реалізує буфер 64 навчальних кодів клітинок. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Шахова партія»: реалізувати буфер 64 навчальних кодів клітинок, а також копії позицій для незалежних пробних ходів. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Шахова партія»: реалізувати клас шахової позиції з власним буфером 64 навчальних кодів клітинок, історію позицій із переміщенням та undo без реалізації шахових правил. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 28. Музичний трек
1. Початковий рівень. Створити консольну програму, що реалізує буфер семплів зі сталою частотою. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Музичний трек»: реалізувати буфер семплів зі сталою частотою, а також копію та обрізання діапазону в новий трек. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Музичний трек»: реалізувати клас музичного треку з власним буфером семплів зі сталою частотою та конкатенацію сумісних треків із контрольованими копіями й переміщеннями. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 29. Стан консолі
1. Початковий рівень. Створити консольну програму, що реалізує RAII-обгортку flags/precision/fill потоку. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Стан консолі»: реалізувати RAII-обгортку flags/precision/fill потоку, а також відновлення після винятку та вкладених guard. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Стан консолі»: реалізувати RAII-обгортку, що зберігає й відновлює flags/precision/fill потоку, та звіт у різних форматах із перевіркою точного тексту через ostringstream. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Варіант 30. Повідомлення чату
1. Початковий рівень. Створити консольну програму, що реалізує move-only повідомлення з байтовим вкладенням. Початкові дані ввести з клавіатури, вивести вміст або стан ресурсу до та після виходу з області видимості. Визначити власника й автоматичне очищення.
2. Базовий рівень. Створити консольну програму для об’єкта «Повідомлення чату»: реалізувати move-only повідомлення з байтовим вкладенням, а також передачу повідомлення в vector. Дані ввести з клавіатури; вивести стани оригіналу й результату. Перевірити порожній випадок, незалежність ресурсів або одноосібність володіння, відсутність подвійного завершення.
3. Високий рівень. Створити консольний проєкт «Повідомлення чату»: реалізувати move-only клас повідомлення чату з байтовим вкладенням, чергу одержувачів і вилучення доставлених зі збереженням єдиного власника. Вхідні параметри й команди отримувати з клавіатури до end; --help описує формат. Вивести таблицю станів і підсумкові лічильники. Обґрунтувати правило нуля або п’яти, заборонити недопустимі копії; перевірити самоприсвоєння, самопереміщення та винятковий вихід, де операції доступні. Помилки виводити в std::cerr, завершувати з кодом 1 при некоректному вході.
Порядок виконання та захисту роботи
- Записати вхідні дані, формат результату й інваріанти класів; скласти приклади звичайних, порожніх, граничних та помилкових даних.
- Визначити публічний інтерфейс і відповідальність кожного класу. Пояснити, хто володіє кожним ресурсом і коли закінчується його життя.
- Реалізувати окремий консольний проєкт. Перевірити аргументи до зміни стану; повідомлення про помилки спрямувати в
std::cerr. - Зібрати з
/std:c++latest /EHsc /W4 /utf-8, усунути попередження; виконати підготовлені перевірки без вимкненняassert. - Порівняти результати з ручними розрахунками. Переконатися, що помилка не залишає об’єкт у стані, який порушує його контракт.
- Підготувати звіт із кодом, командою збирання, фактичними результатами, таблицею тестів та поясненням обмежень. Зберегти зміни в Git.
- На захисті пояснити обраний інтерфейс, виконати новий граничний випадок і показати, як зміна вимоги впливає на реалізацію.