Перейти до змісту

ЛР22. Парсер, валідація і політика помилок

Коротко про роботу

Текстовий файл містить записи name quantity price, серед яких є помилки формату та недопустимі значення. Варіант визначає STUDENT_X.

Відкрити робочий зошит Як виконувати лабораторні

1. Умова

Текстовий файл містить записи name quantity price, серед яких є помилки формату та недопустимі значення.

Перша комірка зошита лише показує значення вашого STUDENT_X разом із типами. Вона не оголошує і не створює предметні змінні. У коді кожного завдання перенесіть потрібні значення та самостійно оголосіть/створіть відповідні змінні.

2. Що треба знати

Робота виконується після Л1–Л10. Потрібні поняття:

  1. istringstream
  2. розбір і валідація
  3. throw / try / catch
  4. політика помилок

Межа матеріалу

Використовуйте поняття, вивчені до Л1–Л10. Не зливайте помилку формату та недопустиме значення в один невизначений лічильник.

3. Варіант, вхідні дані та результат

У зошиті заповніть STUDENT_NAME, STUDENT_GROUP і STUDENT_X від 1 до 30.

Вхідні дані

Поле Тип Зміст
input_file std::string шлях до файла зі змішаними коректними й помилковими записами

Поля результату

Поле Зміст
accepted_count прийняті записи
rejected_format відхилення формату/типів
rejected_value відхилення через порушення правил значень
total сума quantity * price для прийнятих записів

Назви полів результату не змінюйте. Перша комірка лише показує значення варіанта і не оголошує предметні змінні. Перед розв’язанням кожного завдання самостійно оголосіть потрібні вхідні змінні з показаними значеннями. Власні та результуючі змінні також оголошуйте звичайно, як у лекційних прикладах. Обчислення виконуйте у блоці { ... }; код над блоком використовуйте лише там, де це позначено. Наприкінці блока вже є службовий рядок самоперевірки для контрольних полів — його не потрібно писати або змінювати. Формат std::cout обирайте за змістом завдання: спеціального формату для самоперевірки немає.

4. Терміни і правила

Терміни

  • розбір рядка — перетворення тексту на окремі поля потрібних типів.
  • валідація — перевірка змістових правил уже розібраних полів.
  • помилка формату — рядок неможливо коректно розібрати.
  • помилка значення — формат правильний, але значення порушує правило задачі.

Правила

  1. Кожний рядок має претендувати на формат name quantity price з рівно трьома полями.
  2. Відхилення через формат виникає через неправильну кількість полів або неможливість прочитати quantity як int чи price як double.
  3. Після успішного розбору діють предметні правила quantity > 0 і price >= 0; їх порушення збільшує rejected_value.
  4. total — сума quantity * price тільки для прийнятих записів. Обробка продовжується після кожного очікуваного помилкового запису.

5. Завдання

Завдання 1

Напишіть функцію розбору рядка name quantity price. Вона має відрізняти правильний формат від помилкового.

Завдання 2

Для правильно розібраного запису перевірте quantity > 0 і price >= 0.

Завдання 3

Обробіть усі рядки. Запишіть accepted_count, rejected_format, rejected_value і total.

6. Перевірка і здача

  1. Запустіть самоперевірку та виправте помилки.
  2. Перезапустіть ядро і виконайте роботу ще раз від початку.
  3. Збережіть .ipynb і PDF з кодом та результатами.

Для роботи з файлами покажіть у зошиті назви створених файлів. Також залиште видимий фрагмент або результат, який підтверджує їхню роботу.

Назва PDF: LR22_Прізвище_Група_VNN.pdf.