From 22674d1f7c8e3b47701091093be0e198bcda9d69 Mon Sep 17 00:00:00 2001 From: YaroslavS Date: Mon, 28 Apr 2025 01:11:02 +0300 Subject: [PATCH] Add find_minmax and make_histogram in histogram.cpp --- Histogram/histogram.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/Histogram/histogram.cpp b/Histogram/histogram.cpp index 8b13789..fc209c4 100644 --- a/Histogram/histogram.cpp +++ b/Histogram/histogram.cpp @@ -1 +1,42 @@ +#include "histogram.h" +#include +#include + +size_t find_minmax(const std::vector& numbers, double& min, double& max) { + if (numbers.empty()) { + min = max = 0; + return 0; + } + min = numbers[0]; + max = numbers[0]; + for (double number : numbers) { + if (number < min) { + min = number; + } + if (number > max) { + max = number; + } + } + return 0; +} +std::vector make_histogram(const std::vector& numbers, size_t bin_count) { + std::vector bins(bin_count, 0); + if (numbers.empty() || bin_count == 0) { + return bins; + } + double min, max; + find_minmax(numbers, min, max); + if (max == min) { + return bins; // Возвращаем пустые корзины, так как гистограмма не может быть построена + } + double bin_width = (max - min) / bin_count; + for (double number : numbers) { + size_t bin_index = static_cast((number - min) / bin_width); + if (bin_index >= bin_count) { + bin_index = bin_count - 1; // Обработка крайнего случая max == number + } + bins[bin_index]++; + } + return bins; +};