From 8c826cf9d8af8467093f5a6f560271e1953a225d Mon Sep 17 00:00:00 2001 From: VinogradovMA Date: Sun, 27 Apr 2025 20:52:50 +0300 Subject: [PATCH] code:split_on_files_fixed[3] --- histogram.cpp | 40 +++++++++++++++++++++ histogram.h | 5 +-- main.cpp | 96 ++++++--------------------------------------------- 3 files changed, 54 insertions(+), 87 deletions(-) diff --git a/histogram.cpp b/histogram.cpp index 3524762..d8cdad1 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -1 +1,41 @@ #include "histogram.h" + +std::vector make_histogram(std::vector numbers, size_t bin_count) +{ + double max; + double min; + std::vector bins; + bins.resize(bin_count); + find_minmax(numbers, min, max); + double bin_size = (max - min) / bin_count; + for (size_t i = 0; i < numbers.size(); i++) { + bool found = false; + for (size_t j = 0; (j < bin_count - 1) && !found; j++) { + auto lo = min + j * bin_size; + auto hi = min + (j + 1) * bin_size; + if ((lo <= numbers[i]) && (hi > numbers[i])) { + bins[j]++; + found = true; + } + } + if (!found) { + bins[bin_count - 1]++; + } + } + return bins; +} + + +static void find_minmax(std::vector numbers, double& min, double& max) { + min = numbers[0]; + max = numbers[0]; + for (double number : numbers) { + if (min > number) { + min = number; + } + if (max < number) { + max = number; + } + } + return; +} diff --git a/histogram.h b/histogram.h index f9e7eb8..9efe416 100644 --- a/histogram.h +++ b/histogram.h @@ -1,9 +1,10 @@ #ifndef HISTOGRAM_H_INCLUDED #define HISTOGRAM_H_INCLUDED - #include -std::vector make_histogram(const std::vector& numbers, size_t bin_count); + +static void find_minmax(std::vector numbers, double& min, double& max); +std::vector make_histogram(std::vector numbers, size_t bin_count); #endif // HISTOGRAM_H_INCLUDED diff --git a/main.cpp b/main.cpp index 058d081..ace3e72 100644 --- a/main.cpp +++ b/main.cpp @@ -1,53 +1,31 @@ +using namespace std; +#include "histogram.h" +#include "text.h" -#include -#include #include -using namespace std; struct Input { - vector numbers; + std::vector numbers; size_t bin_count{}; }; -void find_minmax(vector numbers, double& min, double& max); -size_t maxBin(vector bins); -vector make_histogram(vector numbers, size_t bin_count); + + Input input_data(); -void show_histogram_text(vector bins , size_t bin_count); -const size_t SCREEN_WIDTH = 80; -const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; + + int main() { Input in = input_data(); - vector bins = make_histogram(in.numbers, in.bin_count); + std::vector bins = make_histogram(in.numbers, in.bin_count); show_histogram_text(bins, in.bin_count); return 0; } -size_t maxBin(vector bins) { - size_t max = bins[0]; - for (int i = 1; i < bins.size(); i++) { - if (max < bins[i]) { - max = bins[i]; - } - } - return max; -} -void find_minmax(vector numbers, double& min, double& max) { - min = numbers[0]; - max = numbers[0]; - for (double number : numbers) { - if (min > number) { - min = number; - } - if (max < number) { - max = number; - } - } - return; -} + + Input input_data() { @@ -69,59 +47,7 @@ Input input_data() { return input_struct; } -vector make_histogram(vector numbers, size_t bin_count) -{ - double max; - double min; - vector bins; - bins.resize(bin_count); - find_minmax(numbers, min, max); - double bin_size = (max - min) / bin_count; - for (size_t i = 0; i < numbers.size(); i++) { - bool found = false; - for (size_t j = 0; (j < bin_count - 1) && !found; j++) { - auto lo = min + j * bin_size; - auto hi = min + (j + 1) * bin_size; - if ((lo <= numbers[i]) && (hi > numbers[i])) { - bins[j]++; - found = true; - } - } - if (!found) { - bins[bin_count - 1]++; - } - } - return bins; -} -void show_histogram_text(vector bins , size_t bin_count) { - size_t maxCount = maxBin(bins); - size_t count_stars; - for (size_t i = 0; i < bin_count; i++) { - - if (bins[i] < 100) { - cout << " "; - } - if (bins[i] < 10) { - cout << " "; - } - - cout << bins[i]; - cout << "|"; - - if (maxCount > MAX_ASTERISK) { - count_stars = MAX_ASTERISK * (static_cast(bins[i]) / maxCount); - } - else { - count_stars = bins[i]; - } - for (size_t i2 = 0; i2 < count_stars; i2++) { - cout << "*"; - } - cout << endl; - - } -}