From 50d1cc084ff2753a0e5cd12f98d3c425753dfe74 Mon Sep 17 00:00:00 2001 From: MamakinYR Date: Sun, 21 Apr 2024 12:54:44 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=9D=D0=B5=D0=BE=D0=B1=D1=85=D0=BE?= =?UTF-8?q?=D0=B4=D0=B8=D0=BC=D1=8B=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=B2=D1=8B=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=B8=D0=B7=20main?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab1.cpp | 59 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 18 deletions(-) diff --git a/lab1.cpp b/lab1.cpp index 19e8e56..0694a6d 100644 --- a/lab1.cpp +++ b/lab1.cpp @@ -35,28 +35,24 @@ void find_minmax(const vector& numbers, double& min, double& max) { } } -int main() +vector make_histogram(vector& numbers, size_t bin_count) { - const size_t SCREEN_WIDTH = 80; - const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; - int i, j; double min_number, max_number; - Input in = input_data(); - find_minmax(in.numbers, min_number, max_number); - vector bins(in.bin_count); - for (i = 0; i < in.bin_count; i++) + find_minmax(numbers, min_number, max_number); + vector bins(bin_count); + for (int i = 0; i < bin_count; i++) { bins[i] = 0; } - double bin_size = (max_number - min_number) / in.bin_count; - for (size_t i = 0; i < in.numbers.size(); i++) + double bin_size = (max_number - min_number) / bin_count; + for (size_t i = 0; i < numbers.size(); i++) { bool found = false; - for (size_t j = 0; (j < in.bin_count - 1) && !found; j++) + for (size_t j = 0; (j < bin_count - 1) && !found; j++) { auto lo = min_number + j * bin_size; auto hi = min_number + (j + 1) * bin_size; - if ((lo <= in.numbers[i]) && (in.numbers[i] < hi)) + if ((lo <= numbers[i]) && (numbers[i] < hi)) { bins[j]++; found = true; @@ -64,10 +60,15 @@ int main() } if (!found) { - bins[in.bin_count - 1]++; + bins[bin_count - 1]++; } } - size_t max_bin_capacity = bins[0]; + return bins; +} + +void find_max_capacity(vector& bins, size_t& max_bin_capacity) +{ + max_bin_capacity = bins[0]; for (size_t x : bins) { if (x > max_bin_capacity) @@ -75,8 +76,14 @@ int main() max_bin_capacity = x; } } +} + +void show_histogram_text(vector& bins, size_t max_asterisk) +{ + size_t max_bin_capacity{}; + find_max_capacity(bins, max_bin_capacity); size_t height = 0; - for (i = 0; i < in.bin_count; i++) + for (int i = 0; i < bins.size(); i++) { if (bins[i] < 10) { @@ -88,14 +95,30 @@ int main() } if (bins[i] >= 100) { - cout << bins[i] << "|"; + cout << bins[i] << "|"; } - height = MAX_ASTERISK * (static_cast(bins[i]) / max_bin_capacity); - for (j = 0; j < height; j++) + if (max_bin_capacity > max_asterisk) + { + height = max_asterisk * (static_cast(bins[i]) / max_bin_capacity); + } + else + { + height = bins[i]; + } + for (int j = 0; j < height; j++) { cout << "*"; } cout << "\n"; } +} + +int main() +{ + const size_t SCREEN_WIDTH = 80; + const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; + auto in = input_data(); + auto bins = make_histogram(in.numbers, in.bin_count); + show_histogram_text(bins, MAX_ASTERISK); return 0; }