Лабораторная работа №2
Лабораторная работа будет выдана на ограниченное время, равное 1 паре. Формат сдачи можно сравнить с обыкновенной контрольной по математическим предметам.
Текст задачи будет размещён на данной странице, а решение необходимо будет предоставить на ресурс moodle.uniyar.ac.ru. Пожалуйста удостоверьтесь, что у вас есть доступ к данному ресурсу.
Результат работы - архив с исходными кодами, который прикрепляется как решение задачи.
Важно. Если у проверяющего возникнет обоснованное предположение о совместном решении, тогда все участники получат оценку.
Проверяемые знания учащихся
- Уровень знакомства с языком Ruby:
- Запуск приложения.
- Описание переменных и методов, их использование.
- Работа с контейнерами, итераторами.
- Описание собственных классов.
- Знание техники наследования классов.
- Использование модулей и примесей.
- Знание деталей работы стандартных классов: чисел, строк.
- Знание деталей вызова методов и указания их аргументов.
- Знание работы с нумераторами.
- Знание работы блоков, лямбд.
- Уровень знакомства с экосистемой языка Ruby:
- Установка зависимостей с помощью
gem
. - Установка зависимостей с помощью Bundler.
- Проверка качества исходного кода с помощью Rubocop.
- Установка зависимостей с помощью
Требования к выполнению задания
- Приложение должно реализовать все требования, указанные в задании. Однако к защите допускаются приложения, реализующие только часть задач.
- К защите не допускается исходный код, который не запускается.
- Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по-умолчанию или с конфигурацией, предложенной на соответствующем занятии. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
- Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью
gem
запрещена. Исключением является джемbundler
. - Для разрабатываемого приложения должны быть создан отдельный каталог.
- В корне каталога должны располагаться конфигурационные файлы:
Gemfile
,Gemfile.lock
. - В корне каталога приложения должны находится каталоги
bin
,lib
, в которых должен находиться исходный код приложения. В каталогеbin
находится исполняемый файл, в каталогеlib
находится описание всех собственных классов и модулей.
- В корне каталога должны располагаться конфигурационные файлы:
- Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не пренадлежат какому-либо модулю.
- Необходимо выделить отдельные классы, описывающие предметную область.
- В одном модуле нельзя совмещать логику обработки предметной области и операции ввода-вывода.
- Приложение должно корректно обрабатывать неправильный ввод от пользователя.
- Приложение должно обладать понятным интерфейсом: показывать помощь по использованию, для ввода данных приложение должно показывать приглашение.
Задача
Разработайте интерактивное консольное приложение для обработки результатов тестирования школьников.
Весь поток 7 класса прошёл тест, состоящий из 40 вопросов. Результаты тестирования записанные в CSV-файле. Файл можно скачать по ссылке.
Пример структуры файла:
7А,Агатьева Арина Юрьевна,0010110001001101001100001001101100111000
7А,Алексеева Пальмира Гурьевна,0111011001001111101101011011010110111101
7А,Алексеев Феликс Александрович,1111010101111111111111011110110110110011
В первом столбце находится номер класса ученика. Во втором столбце — фамилия, имя и отчество школьника. В третьем столбце приведены результаты тестирования студента в виде строки из нулей и единиц, где единица обозначает правильный ответ на соответствующий её порядковому номеру вопрос, а ноль — неправильный.
Приложение должно выставлять оценку «3» за 21 и более правильный ответ, «4» за 26 и более правильных ответов, «5» за 31 и более правильный ответ.
Приложение должно считывать эти данные из файла и позволять учителю выполнять следующие задачи:
- Находить и отображать список двоечников с указанием их ФИО, номера класса и количества правильных ответов.
- Вычислять статистику тестирования. Вывести на экран список классов (7А – 7Д), для каждого указать количество учеников и среднее количество правильных ответов в этом классе.
- Пересчитать оценки по другой шкале. Запросить у пользователя количество правильных ответов, начиная с которого выставлять оценку «3», «4» и «5». Вывести количество учеников, получивших оценки «2», «3», «4» и «5», в отдельности для каждого класса.
- Проверить на возможное списывание. Проверить, существуют ли пары учеников, у которых ответы различаются не более, чем в трёх вопросах. В результате проверки вывести соответствующее сообщение (есть или нет такие пары) и все пары, если такие есть.
- Найти три самых сложных вопроса. Сложность вопроса оценивается количеством учеников, которые не смогли дать правильный ответ на него.