From 933f804c11dc735e00c56ce3dea33ad1bc8c9ad5 Mon Sep 17 00:00:00 2001 From: Kuzin Date: Sun, 4 Jun 2023 13:46:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D1=8B=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 83 ++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 59 insertions(+), 24 deletions(-) diff --git a/main.cpp b/main.cpp index 5f85b3b..12d9474 100644 --- a/main.cpp +++ b/main.cpp @@ -3,35 +3,55 @@ using namespace std; -int main() -{ - const size_t SCREEN_WIDTH = 80; - const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; +struct Input { + vector numbers; + size_t bin_count{}; +}; +Input +input_data(){ + size_t number_count, bin_count; + cerr << "Enter number count: "; + cin >> number_count; //Кол-во чисел + Input in; + in.numbers.resize(number_count); - size_t number_count, bin_count, max_bin, height; - double maxx, minn; - cerr << "Enter number count: "; cin >> number_count; //Кол-во чисел - - vector numbers(number_count); - for (int i = 0; i < number_count; i++) + for (size_t i = 0; i < number_count; i++) { - cerr << "Enter Num[" << i << "]: "; cin >> numbers[i]; //Ввод чисел + cerr << "Enter Num[" << i << "]: "; + cin >> in.numbers[i]; //Ввод чисел } - cerr << "Enter bin count: "; cin >> bin_count; //Кол-во корзин + cerr << "Enter bin count: "; + cin >> in.bin_count; //Кол-во корзин + return in; +} - vector bins(bin_count); - maxx = numbers[0]; minn = numbers[1]; - for (size_t i = 0; i < number_count; i++) +void find_minmax(const vector &numbers, double &min, double &max) +{ + max = numbers[0]; + min = numbers[1]; + for (double x: numbers) { - if (maxx < numbers[i]) - maxx = numbers[i]; - if (minn > numbers[i]) - minn = numbers[i]; + if (x < min) + { + min = x; + } + else if (x > max) + { + max = x; + } } + return; +} - double bin_size = (maxx - minn) / bin_count; +vector make_histogram (vector numbers, size_t bin_count) +{ - for (size_t i = 0; i < number_count; i++) + double minn; + double maxx; + find_minmax (numbers, minn, maxx); + double bin_size = (maxx - minn) / bin_count; + vector bins(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++) @@ -49,12 +69,21 @@ int main() bins[bin_count - 1]++; } } + return bins; +} +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; + double max_bin; + size_t height; max_bin = bins[0]; height = bins[0]; for (size_t i = 0; i < bin_count; i++) { - if (bins[i] > max_bin) + if (bins[i] > max_bin){ max_bin = bins[i]; + } } bool flag = false; @@ -82,8 +111,14 @@ int main() cout << "*"; } cout << endl; - if ((bin_count - i) != 1) - cout << minn + bin_size * (i+1) << endl; + } +} +int main() +{ + auto in = input_data(); + auto bins = make_histogram(in.numbers, in.bin_count); + show_histogram_text(bins, in.bin_count); + return 0; }