C++ и Python

Статистика массива (5)

Статистика массива

Создайте класс ArrayStat, который считывает из файла массив N >= 0 целых чисел a1, a2, ..., aN.

Файл имеет формат:

N
a1 a2 ... aN

В классе должны быть реализованы следующие методы:

  1. Конструктор, принимающий аргумент const std::string& - полный путь до файла
  2. int max() - максимальное значение
  3. int min() - минимальное значение
  4. double mean() - среднее значение
  5. double stddev() - среднеквадратичное отклонение
  6. size_t countLarger(int a) - количество элементов массива со значениями больше порога a
  7. 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