From 056cafb485c269640a521b8dfb5d97ec8c510a0c Mon Sep 17 00:00:00 2001 From: victoriaCS <CherniukVS@mpei.ru> Date: Wed, 30 Apr 2025 21:37:44 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=B2=D0=BD=D0=B5=D1=81=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D0=BA=20=D0=B2=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 101 +++++++++++++++++++++++++------------------------------ 1 file changed, 45 insertions(+), 56 deletions(-) diff --git a/main.cpp b/main.cpp index f36d9fb..9901861 100644 --- a/main.cpp +++ b/main.cpp @@ -1,85 +1,74 @@ #include <iostream> #include <vector> + using namespace std; -int main() -{ - const size_t SCREEN_WIDTH = 80; - const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; +struct Input { + vector<double> numbers; + size_t bin_count{}; +}; +Input +input_data() { size_t number_count; - cerr << "Enter number count: "; - cin >> number_count; - vector<double> numbers(number_count); - for (size_t i=0;i<number_count;i++){ - cin >> numbers[i]; + cin >> number_count; + + Input in; + in.numbers.resize(number_count); + + for (size_t i = 0; i < number_count; i++) { + cin >> in.numbers[i]; } + cin >> in.bin_count; - size_t bin_count; - cerr << "Enter bin count: "; - cin >> bin_count; - vector<size_t> bins(bin_count, 0); + return in; +} - double min = numbers[0]; - double max = numbers[0]; - for (double x: numbers) { - if (x<min) { +void find_minmax(const vector<double>& numbers, double& min, double& max) { + min = numbers[0]; + max = numbers[0]; + for (double x : numbers) { + if (x < min) { min = x; - } - else if (x > max) { + } else if (x > max) { max = x; } } +} + +vector<size_t> +make_histogram(const vector<double>& numbers, size_t bin_count) { + double min, max; + find_minmax(numbers, min, max); + + vector<size_t> bins(bin_count, 0); double bin_size = (max - min) / bin_count; - for(size_t i = 0; i<number_count; i++){ + 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<= numbers[i]) && (numbers[i] < hi)){ + for (size_t j = 0; (j < bin_count - 1) && !found; j++) { + double lo = min + j * bin_size; + double hi = min + (j + 1) * bin_size; + if (lo <= number && number < hi) { bins[j]++; found = true; } } - if(!found){ - bins[bin_count - 1 ]++; + if (!found) { + bins[bin_count - 1]++; } } - size_t max_count = bins[0]; - for (size_t i=0;i<bin_count;i++){ - if (bins[i]>max_count){ - max_count = bins[i]; - } - } - - for (size_t i = 0; i < bin_count; i++) { - if (bins[i] < 10) { - cout << " " << bins[i] << "|"; - } - else if (bins[i] < 100) { - cout << " " << bins[i] << "|"; - } - else if (bins[i] < 1000) { - cout << bins[i] << "|"; - } + return bins; +} - size_t height; - if (max_count <= MAX_ASTERISK){ - height = bins[i]; - } - else { - height = MAX_ASTERISK*(static_cast<double>(bins[i])/max_count); - } - for (size_t j=0; j<height;j++){ - cout << "*"; - } - cout << endl; - } - return 0; +int +main() { + auto in = input_data(); + auto bins = make_histogram(in.numbers, in.bin_count); + show_histogram_text(bins); }