ЛР20. Записи, стани й перевірка інваріантів
Коротко про роботу
Набір записів містить повторні ідентифікатори та некоректні кількість або ціну. Потрібно виділити допустиму частину.
Варіант визначає STUDENT_X.
Відкрити робочий зошит Як виконувати лабораторні
1. Умова
Набір записів містить повторні ідентифікатори та некоректні кількість або ціну. Потрібно виділити допустиму частину.
Перша комірка зошита лише показує значення вашого STUDENT_X разом із типами. Вона не оголошує і не створює предметні
змінні. У коді кожного завдання перенесіть потрібні значення та самостійно оголосіть/створіть відповідні змінні.
2. Що треба знати
Робота виконується після Л1–Л9. Потрібні поняття:
- записи і колекції
set/map/unordered_map- інваріант даних
- пошук повторів
Межа матеріалу
Використовуйте поняття, вивчені до Л1–Л9. Не вважайте перший запис із повторюваним ідентифікатором автоматично допустимим. Умова робить недопустимими всі записи з цим ідентифікатором.
3. Варіант, вхідні дані та результат
У зошиті заповніть STUDENT_NAME, STUDENT_GROUP і STUDENT_X від 1 до 30.
Вхідні дані
| Поле | Тип | Зміст |
|---|---|---|
ids |
std::vector<int> |
ідентифікатори |
quantities |
std::vector<int> |
кількості |
prices |
std::vector<double> |
ціни |
Поля результату
| Поле | Зміст |
|---|---|
invalid_ids |
усі ідентифікатори недопустимих записів |
duplicate_ids |
повторювані ідентифікатори |
valid_count |
кількість допустимих записів |
valid_total |
сума quantity * price для допустимих записів |
Назви полів результату не змінюйте. Перша комірка лише показує значення варіанта і не оголошує предметні змінні. Перед
розв’язанням кожного завдання самостійно оголосіть потрібні вхідні змінні з показаними значеннями. Власні та результуючі
змінні також оголошуйте звичайно, як у лекційних прикладах. Обчислення виконуйте у блоці { ... }; код над блоком
використовуйте лише там, де це позначено. Наприкінці блока вже є службовий рядок самоперевірки для контрольних полів —
його не потрібно писати або змінювати. Формат std::cout обирайте за змістом завдання: спеціального формату для
самоперевірки немає.
4. Терміни і правила
Терміни
- інваріант даних — правило, яке повинне залишатися істинним для кожного коректного запису.
- дублікат — ідентифікатор, що трапляється більше одного разу там, де очікується унікальність.
Правила
- Запис утворюють значення з однаковим індексом у
ids,quantitiesіprices. - Локально коректний запис має
id > 0,quantity > 0іprice >= 0. - Якщо один
idтрапляється більше одного разу, усі записи з цим ідентифікатором вважаються недопустимими. invalid_idsіduplicate_idsповерніть без повторів у зростальному порядку.valid_total— сумаquantity * priceлише для допустимих записів.
5. Завдання
Завдання 1
Запишіть три правила допустимого запису для id, quantity і price.
Завдання 2
Знайдіть некоректні та повторювані id. Запишіть їх у invalid_ids і duplicate_ids без повторів та у зростальному
порядку.
Завдання 3
Відкиньте недопустимі записи. Запишіть кількість допустимих у valid_count, а їхню сумарну вартість — у valid_total.
6. Перевірка і здача
- Запустіть самоперевірку та виправте помилки.
- Перезапустіть ядро і виконайте роботу ще раз від початку.
- Збережіть
.ipynbі PDF з кодом та результатами.
Назва PDF: LR20_Прізвище_Група_VNN.pdf.