Статистика массива (5)
Статистика массива
Создайте класс 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)
- количество элементов массива со значениями больше порогаa
void 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