From 2069aaecb7531654bcbb88e42f5db32a6659f8f8 Mon Sep 17 00:00:00 2001 From: DevyatovaMY Date: Thu, 18 Apr 2024 19:22:16 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=B2=D1=8B=D0=BD=D0=BE=D1=81=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=87=D0=B0=D1=82=D0=B8=20=D1=82=D0=B5=D0=BA=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B9=20=D0=B3=D0=B8=D1=81=D1=82=D0=BE=D0=B3?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=BC=D1=8B=20=D0=B2=20=D0=BE=D1=82=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D1=84=D0=B0=D0=B9=D0=BB?= =?UTF-8?q?;=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=BE=20=D0=BC?= =?UTF-8?q?=D0=B0=D1=81=D1=88=D1=82=D0=B0=D0=B1=D0=B8=D1=80=D0=BE=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D1=81=D1=82=D0=BE=D0=BB=D0=B1=D1=86?= =?UTF-8?q?=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab01.cbp | 4 +++ main.cpp | 90 ++----------------------------------------------------- text.cpp | 41 +++++++++++++++++++++++++ text.h | 9 ++++++ 4 files changed, 57 insertions(+), 87 deletions(-) create mode 100644 text.cpp create mode 100644 text.h diff --git a/lab01.cbp b/lab01.cbp index d541ad7..68d2c6d 100644 --- a/lab01.cbp +++ b/lab01.cbp @@ -32,6 +32,10 @@ + + + diff --git a/main.cpp b/main.cpp index 985134d..d79dfdc 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,8 @@ #include #include +#include "histogram.h" +#include "text.h" + using namespace std; @@ -26,93 +29,6 @@ input_data() return in; } -void -find_minmax(const vector& numbers, double& min, double& max) -{ - min = numbers[0]; - max = numbers[0]; - for (double x : numbers) - { - if (x > max ) - { - max = x; - } - if (x < min) - { - min = x; - } - } -} - -vector -make_histogram(const vector& numbers, size_t& bin_count) -{ - double min = 0; - double max = 0; - find_minmax(numbers, min, max); - auto bin_size = (max - min)/bin_count; - vector bins(bin_count); - for (double number : numbers) - { - 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 <= number) && (number < hi)) - { - bins[j]++; - found = true; - } - } - if (!found) - { - bins[bin_count - 1]++; - } - } - return bins; -} - -void -show_histogram_text(const vector& bins, size_t& bin_count) { - const size_t SCREEN_WIDTH = 80; - const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; - size_t max_count = 0; - for (size_t s = 0; s < bin_count; s++) - { - if (bins[s] > max_count) - { - max_count = bins[s]; - } - } - for (size_t bin : bins) - { - if (bin <100) - { - cout << " "; - } - if (bin <10) - { - cout << " "; - } - cout << bin << "|"; - if (max_count > MAX_ASTERISK) - { - size_t count = bin; - size_t height = MAX_ASTERISK * (static_cast(count) / max_count); - for (size_t t = 0; t < height; t++) - { - cout << "*"; - } - } - else for (size_t k = 0; k < bin; k++) - { - cout << "*"; - } - cout << endl; - } -} - int main() { Input in = input_data(); diff --git a/text.cpp b/text.cpp new file mode 100644 index 0000000..29c73d5 --- /dev/null +++ b/text.cpp @@ -0,0 +1,41 @@ +#include +#include "text.h" + +using namespace std; + +void +show_histogram_text(const vector& bins, size_t& bin_count) { + const size_t SCREEN_WIDTH = 80; + const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; + size_t max_count = 0; + for (size_t s = 0; s < bin_count; s++) + { + if (bins[s] > max_count) + { + max_count = bins[s]; + } + } + auto scale_factor = static_cast(MAX_ASTERISK) / max_count; + if (scale_factor > 1) + { + scale_factor = 1; + } + for (size_t bin : bins) + { + if (bin <100) + { + cout << " "; + } + if (bin <10) + { + cout << " "; + } + cout << bin << "|"; + size_t height = bin * scale_factor; + for (size_t t = 0; t < height; t++) + { + cout << "*"; + } + cout << endl; + } +} diff --git a/text.h b/text.h new file mode 100644 index 0000000..5c6df4d --- /dev/null +++ b/text.h @@ -0,0 +1,9 @@ +#ifndef TEXT_H_INCLUDED +#define TEXT_H_INCLUDED + +#include + +void +show_histogram_text(const std::vector& bins, size_t& bin_count); + +#endif // TEXT_H_INCLUDED