From 746da30d85a215080cdff2ae97d09385d3813b34 Mon Sep 17 00:00:00 2001 From: PakhomovaAY Date: Mon, 28 Apr 2025 00:42:28 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=BA=D0=BE=D0=B4=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=20=D0=BD=D0=B0=20=D1=84=D1=83?= =?UTF-8?q?=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 | 90 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 36 deletions(-) diff --git a/main.cpp b/main.cpp index e349c77..76f7f98 100644 --- a/main.cpp +++ b/main.cpp @@ -3,28 +3,35 @@ using namespace std; -int main() -{ - const size_t SCREEN_WIDTH = 80; - const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; - size_t number_count;//колво чисел - cerr << "Enter number count: "; +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(){ + Input in; + size_t number_count; + cerr << "Enter numbers count: "; cin >> number_count; - vector numbers(number_count); //массив чисел + in.numbers.resize(number_count); - //ввод значений - for (size_t i=0; i> numbers[i]; + cerr << "Enter numbers: "; + for (size_t i = 0; i < number_count; i++) { + cin >> in.numbers[i]; } - size_t bin_count; cerr << "Enter bin count: "; - cin >> bin_count; + cin >> in.bin_count; - vector bins(bin_count); //массив колва чисел в корзинах + return in; + } - double min = numbers[0]; - double max = numbers[0]; +void +find_minmax(const vector& numbers, double& min, double& max){ + min = numbers[0]; + max = numbers[0]; for (double x : numbers) { if (x < min) @@ -36,9 +43,16 @@ int main() max = x; } } +} +vector +make_histogram(const vector& numbers, double bin_count){ + double min, max; + find_minmax(numbers, min, max); double bin_size = (max - min) / bin_count; //размер корзины - + vector binss(bin_count); + size_t number_count = numbers.size(); + //заполнение массива бинс for (size_t i = 0; i < number_count; i++) { bool found = false; @@ -48,17 +62,21 @@ int main() auto hi = min + (j + 1) * bin_size; if ((lo <= numbers[i]) && (numbers[i] < hi)) { - bins[j]++; + binss[j]++; found = true; } } if (!found) { - bins[bin_count - 1]++; + binss[bin_count - 1]++; } } - double max_count; + return binss; +} +void +show_histogram_text(const vector& bins, double bin_count){ +double max_count; //максимадбное колво чисел в корзине среди всех корзин max_count = bins[0]; for (size_t i = 0; i < bin_count; i++) @@ -82,30 +100,30 @@ int main() height = MAX_ASTERISK * (static_cast(bins[i]) / max_count); } - - if (bins [i] < max_count){ - size_t pr_count = max_count - bins[i]; - for (size_t k = 0; k < pr_count; k++){ - cout << " "; + if (bins[i] < 10){ + cout << " "; } + if (bins[i] < 100){ + cout << " "; } - + cout << bins[i] << "|"; for (size_t j = 0; j < height; j++) { cout << "*"; } - cout << "|"; - - if (bins[i] < 100) - { - cout << " "; - } - if (bins[i] < 10) - { - cout << " "; + cout << "\n"; } - cout << bins[i] << 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; }