Пересдача № 4
Результаты лабораторной работы надо выслать на почтовый адрес преподавателя, который указан внизу страницы.
Проверяемые знания учащихся
- Уровень знакомства с языком Ruby:
- Запуск приложения.
- Описание переменных и методов, их использование.
- Работа с контейнерами, итераторами, нумераторами.
- Описание собственных классов.
- Наследование классов.
- Использование модулей и примесей.
- Знание деталей работы стандартных классов: чисел, строк.
- Знание деталей вызова методов и указания их аргументов.
- Использование методов чисел и промежутков.
- Использование методов классов строк и регулярных выражений.
- Уровень знакомства с экосистемой языка Ruby:
- Установка, удаление зависимостей с помощью
gem
. - Управление зависимостями с помощью Bundler.
- Проверка качества исходного кода с помощью Rubocop.
- Установка, удаление зависимостей с помощью
Требования к выполнению задания
- Приложение должно реализовать все требования, указанные в задании. Однако к защите допускаются приложения, реализующие только часть задач.
- К защите не допускается исходный код, который не запускается.
- Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по-умолчанию или с конфигурацией, предложенной на соответствующем занятии. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
- Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью
gem
запрещена. Исключением является джемbundler
. - Для разрабатываемого приложения должны быть создан отдельный каталог.
- В корне каталога должны располагаться конфигурационные файлы:
Gemfile
,Gemfile.lock
. - В корне каталога приложения должны находится каталоги
bin
,lib
, в которых должен находиться исходный код приложения. В каталогеbin
находится исполняемый файл, в каталогеlib
находится описание всех собственных классов и модулей.
- В корне каталога должны располагаться конфигурационные файлы:
- Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не пренадлежат какому-либо модулю.
- Необходимо выделить отдельные классы, описывающие предметную область.
- В одном модуле нельзя совмещать логику обработки предметной области и операции ввода-вывода.
- Приложение должно корректно обрабатывать неправильный ввод от пользователя.
- Приложение должно обладать понятным интерфейсом: показывать помощь по использованию, для ввода данных приложение должно показывать приглашение.
Задача
Самостоятельно разработать консольное приложение, позволяющее решать квадратные уравнения формата a * x ^ 2 + b * x + c = 0
. Пользователю необходимо ввести коэффициенты a
, b
и c
.
Приложение должно отображать следующие пункты меню:
- Добавить новое квадратное уравнение.
- Просмотреть список ранее добавленных уравнений.
- Выйти из приложения.
При выборе первого элемента меню приложение должно реализовать следующий сценарий:
- Приложение показывает приглашение для ввода первого коэффициента.
- Пользователь вводит первый коэффициент.
- Приложение проверяет введённые данные. Если ввод не верен, то возвращается к пункту № 1.
- Приложение показывает приглашение для ввода второго коэффициента.
- Пользователь вводит второй коэффициент.
- Приложение проверяет введённые данные. Если ввод не верен, то возвращается к пункту № 4.
- Приложение показывает приглашение для ввода третьего коэффициента.
- Пользователь вводит третий коэффициент.
- Приложение проверяет введённые данные. Если ввод не верен, то возвращается к пункту № 7.
- Приложение показывает пользователю уравнение с подставленными коэффициентами. Затем указывает на количество корней: корней нет, 1 корень, 2 корня. Если корни есть, то выводит их.
- Приложение показывает стартовое меню.
При выборе второго пункта меню должен быть показан список ранее добавленных уравнений. Для каждого из них надо вывести туже информацию, что и в пункте № 10 предыдущего шага.
При выводе уравнения надо группировать по количеству корней в группы: нет корней, 1 корень, 2 корня. Внутри групп сортировка произвольная.
При выборе последнего пункта меню приложение должно корректно завершать свою работу.