From 9eed10ff6c6f8225f7bb0a12ae4510cf34a4a9db Mon Sep 17 00:00:00 2001 From: ShirokovIV lab03 Date: Sat, 19 Apr 2025 00:33:00 +0300 Subject: [PATCH] headers --- Header.cpp | 50 ++++++++++++++++++++++++++++++++ Header.h | 10 +++++++ text.cpp | 83 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ text.h | 3 ++ 4 files changed, 146 insertions(+) create mode 100644 Header.cpp create mode 100644 Header.h create mode 100644 text.cpp create mode 100644 text.h diff --git a/Header.cpp b/Header.cpp new file mode 100644 index 0000000..822fa4d --- /dev/null +++ b/Header.cpp @@ -0,0 +1,50 @@ +#include "Header.h" +Input input_data() +{ + Input in; + size_t n, korz; + + cerr << "Number of elem "; + cin >> n; + 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; +} +void 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; +} \ No newline at end of file diff --git a/Header.h b/Header.h new file mode 100644 index 0000000..9e347c9 --- /dev/null +++ b/Header.h @@ -0,0 +1,10 @@ +#include +#include +using namespace std; +struct Input { + vector vec; + size_t korz{}; +}; +Input input_data(); +void find_minmax(vector vec, double& min, double& max); +vector make_histogram(size_t number, vector vec); diff --git a/text.cpp b/text.cpp new file mode 100644 index 0000000..7e4d366 --- /dev/null +++ b/text.cpp @@ -0,0 +1,83 @@ +#include "text.h" + +void show_histogram(std::vector bins) { + bool gigant = false; + auto spaces = 0; + size_t mx_count = 0; + for (auto x : bins) { + if (x > 76) { + gigant = true; + } + if (x > mx_count) { + mx_count = x; + } + auto len = 0; + while (x > 0) { + x /= 10; + len++; + } + if (len > spaces) { + spaces = len; + } + + } + if (spaces == 1) { + for (size_t i = 0; i < bins.size(); i++) { + std::cout << " " << bins[i] << "|"; + if (gigant) { + if (bins[i] == mx_count) { + for (size_t j = 0; j < 76; j++) { + std::cout << "*"; + } + } + else + { + for (size_t j = 0; j < 76 * static_cast(bins[i]) / mx_count; j++) { + std::cout << "*"; + } + } + } + else + { + for (size_t j = 0; j < bins[i]; j++) { + std::cout << "*"; + } + std::cout << '/n'; + } + } + } + else + { + for (size_t i = 0; i < bins.size(); i++) { + int len = 1; + int k = bins[i]; + for (; k /= 10; ++len); + while (len < spaces) { + std::cout << " "; + len++; + } + std::cout << bins[i]; + std::cout << "|"; + if (gigant) { + if (bins[i] == mx_count) { + for (size_t j = 0; j < 76; j++) { + std::cout << "*"; + } + } + else + { + for (size_t j = 0; j < (76 * static_cast(bins[i]) / mx_count - 1); j++) { + std::cout << "*"; + } + } + } + else + { + for (size_t j = 0; j < bins[i]; j++) { + std::cout << "*"; + } + } + std::cout << '/n'; + } + } +} diff --git a/text.h b/text.h new file mode 100644 index 0000000..0d2acd4 --- /dev/null +++ b/text.h @@ -0,0 +1,3 @@ +#include +#include +void show_histogram(std::vector bins); \ No newline at end of file