From b09f674990cf662140a77fc5f5e69d18a9c4a85c Mon Sep 17 00:00:00 2001 From: ShirokovIV Date: Tue, 22 Apr 2025 20:35:36 +0300 Subject: [PATCH] =?UTF-8?q?=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D0=B4=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- histogram.cpp | 36 ++++++++++++++++++++++ histogram.h | 5 ++++ main.cpp | 83 +++++++++++++++++++-------------------------------- 3 files changed, 72 insertions(+), 52 deletions(-) create mode 100644 histogram.cpp create mode 100644 histogram.h diff --git a/histogram.cpp b/histogram.cpp new file mode 100644 index 0000000..d286cb6 --- /dev/null +++ b/histogram.cpp @@ -0,0 +1,36 @@ +#include "histogram.h" +void static find_minmax(vector vec, double& min, double& max) { + min = vec[0]; + max = vec[0]; + for (double x : vec) { + if (x < min) { + min = x; + } + else if (x > max) + { + max = x; + } + } +} +vector make_histogram(size_t number, vector vec) { + vector bins(number); + double mn, mx; + find_minmax(vec, mn, mx); + float bin_size = (mx - mn) / number; + for (size_t i = 0; i < vec.size(); i++) { + bool fl = false; + for (size_t j = 0; (j < number - 1) && !fl; j++) { + auto lo = mn + j * bin_size; + auto hi = mn + (j + 1) * bin_size; + if ((lo <= vec[i]) && (vec[i] < hi)) { + bins[j]++; + fl = true; + } + } + if (!fl) { + bins[number - 1]++; + + } + } + return bins; +} diff --git a/histogram.h b/histogram.h new file mode 100644 index 0000000..1892457 --- /dev/null +++ b/histogram.h @@ -0,0 +1,5 @@ +#include +#include +using namespace std; +void static find_minmax(vector vec, double& min, double& max); +vector make_histogram(size_t number, vector vec); diff --git a/main.cpp b/main.cpp index 5c1117a..ba0f42f 100644 --- a/main.cpp +++ b/main.cpp @@ -1,45 +1,24 @@ -#include -#include -using namespace std; -int main() { - size_t n; - int korz; +#include "histogram.h" +struct Input { + vector vec; + size_t korz{}; +}; +Input input_data() { + Input in; + size_t n, korz; + cerr << "Number of elem "; cin >> n; - vector vec(n); - for (size_t i = 0; i < vec.size(); i++) { - //cout << i + 1 << "."; - cin >> vec[i]; - } - cerr << "Number of baskets "; - cin >> korz; - vector bins(korz); - double mn = vec[0]; - double mx = vec[0]; - for (double x : vec) { - if (x < mn) { - mn = x; - } - else if (x > mx) { - mx = x; - } - } - float bin_size = (mx - mn) / korz; - for (size_t i = 0; i < vec.size(); i++) { - bool fl = false; - for (size_t j = 0; (j < korz - 1) && !fl; j++) { - auto lo = mn + j * bin_size; - auto hi = mn + (j + 1) * bin_size; - if ((lo <= vec[i]) && (vec[i] < hi)) { - bins[j]++; - fl = true; - } - } - if (!fl) { - bins[korz - 1]++; - - } - } + in.vec.resize(n); + for (size_t i = 0; i < n; i++) + cin >> in.vec[i]; + cerr << "Enter bin count: "; + cin >> in.korz; + return in; +} +int main() { + auto in = input_data(); + auto bins = make_histogram(in.korz, in.vec); bool gigant = false; auto spaces = 0; size_t mx_count = 0; @@ -62,26 +41,26 @@ int main() { } if (spaces == 1) { for (size_t i = 0; i < bins.size(); i++) { - cout << " " << bins[i] << "|"; + std::cout << " " << bins[i] << "|"; if (gigant) { if (bins[i] == mx_count) { for (size_t j = 0; j < 76; j++) { - cout << "*"; + std::cout << "*"; } } else { for (size_t j = 0; j < 76 * static_cast(bins[i]) / mx_count; j++) { - cout << "*"; + std::cout << "*"; } } } else { for (size_t j = 0; j < bins[i]; j++) { - cout << "*"; + std::cout << "*"; } - cout << endl; + std::cout << std::endl; } } } @@ -92,31 +71,31 @@ int main() { int k = bins[i]; for (; k /= 10; ++len); while (len < spaces) { - cout << " "; + std::cout << " "; len++; } - cout << bins[i]; - cout << "|"; + std::cout << bins[i]; + std::cout << "|"; if (gigant) { if (bins[i] == mx_count) { for (size_t j = 0; j < 76; j++) { - cout << "*"; + std::cout << "*"; } } else { for (size_t j = 0; j < (76 * static_cast(bins[i]) / mx_count - 1); j++) { - cout << "*"; + std::cout << "*"; } } } else { for (size_t j = 0; j < bins[i]; j++) { - cout << "*"; + std::cout << "*"; } } - cout << endl; + std::cout << std::endl; } } }