diff --git a/histogram.cpp b/histogram.cpp new file mode 100644 index 0000000..fb6e26b --- /dev/null +++ b/histogram.cpp @@ -0,0 +1,50 @@ +#include +#include "histogram.h" +void find_minmax(const std:: vector& numbers, double& minimum, double& maximum) { + minimum = numbers[0]; + maximum = numbers[1]; + for (double i : numbers) { + if (i < minimum) + minimum = i; + if (i > maximum) + maximum = i; + } +} +std::vector make_histogram(const std::vector&numbers, size_t bin_count) { + double maximum, minimum; + float LL, LR; + + find_minmax(numbers, minimum, maximum); + double bin_size = (maximum - minimum) / bin_count; + std::vector bins(bin_count); + LL = minimum; + LR = minimum + bin_size; + for (int i = 0; i < bin_count; i++) { + if (i == 0) { + for (int b = 0; b < numbers.size(); b++) { + if ((LL <= numbers[b]) && (numbers[b] < LR)) + bins[i] += 1; + + } + LL = LR; + LR = LL + bin_size; + } + if (i == (bin_count - 1)) { + LR = maximum; + for (int b = 0; b < numbers.size(); b++) { + if ((LL < numbers[b]) && (numbers[b] <= LR)) + bins[i] += 1; + } + break; + } + if ((i != 0) && (i != (bin_count - 1))) { + for (int b = 0; b < numbers.size(); b++) { + if ((LL < numbers[b]) && (numbers[b] < LR)) + bins[i] += 1; + } + LL = LR; + LR = LL + bin_size; + } + } + return bins; + }