Статистика массива
Создайте класс ArrayStat, который считывает из файла массив N >= 0 целых чисел a1, a2, ..., aN.
Файл имеет формат:
N
a1 a2 ... aN
В классе должны быть реализованы следующие методы:
- Конструктор, принимающий аргумент
const std::string&- полный путь до файла int max()- максимальное значениеint min()- минимальное значениеdouble mean()- среднее значениеdouble stddev()- среднеквадратичное отклонениеsize_t countLarger(int a)- количество элементов массива со значениями больше порогаavoid print()- вывод элементов массива в стандартный поток вывода в порядке возрастания значений.
Метод print() должен работать за время O(N), а методы max() и min() - за время O(1).
Указания
- Чтобы выполнить условия задания, необходимо хранить отсортированный массив.
- Обрабатывайте с помощью стандартных исключений случай, если входной файл не существует или если формат данных в файле не соответствует условию
- Подумайте над особыми ситуациями, например, если
N = 0илиN = 1. - Не используйте циклы в явном виде, замените их на функции, методы и алгоритмы из стандартной библиотеки.
Примечания и уточнения
- Метод
stddevдолжен считать среднеквадратичное отклонение (или standard deviation) на основании несмещённой оценки дисперсии. - Класс
ArrayStatдолжен быть реализован в файлахArrayStat.hиArrayStat.cpp. - При проблемах с чтением файла, конструктор должен бросать исключение. Тип исключения может быть любым.
- Методы
min,max,meanв случаеN = 0,stddevв случаеN = 0илиN = 1должны также бросать какое-нибудь исключение. - При чтении из файла и выводе в стандартный поток циклы использовать можно.
- Расчёты среднего значения и среднеквадратичного отклонения не должны использовать циклы (см.
std::accumulate).
Как тестировать локально
Собрать программу с помощью cmake и запустить ctest:
mkdir build; cd build
cmake ..; cmake --build .
ctest -V