From 6c71711814e5168ae3bc2ae65ff815e28a504971 Mon Sep 17 00:00:00 2001 From: MrDarkLast Date: Mon, 10 Apr 2023 15:05:26 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=B0=D0=BB=20=D0=B2=D1=81=D0=B5=20=D1=84-=D1=86=D0=B8=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab1.cpp | 83 +++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 52 insertions(+), 31 deletions(-) diff --git a/lab1.cpp b/lab1.cpp index 14127b8..ab16275 100644 --- a/lab1.cpp +++ b/lab1.cpp @@ -5,46 +5,58 @@ #include #include - using namespace std; -int main() -{ + + + +struct Input { + vector numbers; + size_t bin_count{}; +}; + +Input +input_data() { size_t number_count; - size_t bin_count; - cerr << "Enter number count:"; cin >> number_count; + Input in; + in.numbers.resize(number_count); - vector numbers(number_count); for (size_t i = 0; i < number_count; i++) { - cin >> numbers[i]; + cin >> in.numbers[i]; } - cerr << "Enter number of bins:"; - cin >> bin_count; + cout << "Enter number of bins"; + cin >> in.bin_count; + return in; +} - vector bins(bin_count); - vector binss(bin_count); - - float t = numbers[0]; - for (size_t i = 0; i < number_count; i++) { - if (numbers[i] < t) { - t = numbers[i]; +void find_minmax(const vector& numbers, double& min, double& max) { + min = numbers[0]; + for (auto i = 0; i < numbers.size(); i++) { + if (numbers[i] < min) { + min = numbers[i]; } } - float min = t; - t = numbers[0]; - for (size_t i = 0; i < number_count; i++) { - if (numbers[i] > t) { - t = numbers[i]; + max = numbers[0]; + for (auto i = 0; i < numbers.size(); i++) { + if (numbers[i] > max) { + max = numbers[i]; } } - float max = t; +} + +vector make_histogram(const vector& numbers, size_t bin_count) { + vector bins(bin_count); + vector binss(bin_count); + + double max, min; + find_minmax(numbers, min, max); double bin_size = (max / min) / bin_count; - for (size_t i = 0; i < number_count; i++) { + for (size_t i = 0; i < numbers.size(); i++) { bool found = false; for (size_t j = 0; (j < bin_count - 1) && !found; j++) { auto lo = min + j * bin_size; @@ -59,10 +71,6 @@ int main() } } - for (size_t i = 0; i < bin_count; i++) { - binss[i] = bins[i]; - } - int max_count = bins[0]; for (size_t i = 0; i < bin_count; i++) { if (bins[i] > max_count) { @@ -78,20 +86,33 @@ int main() bins[i] = height; } } + return bins; +} + +void show_histogram_text(vector bins, size_t bin_count ) { for (size_t i = 0; i < bin_count; i++) { - if (binss[i] < 100) { + if (bins[i] < 100) { cout << " "; } - if (binss[i] < 10) { + if (bins[i] < 10) { cout << " "; } - cout << bins[i] << "%" << "|"; - for (size_t j = 0; j < binss[i]; j++) { + cout << bins[i] << "|"; + for (size_t j = 0; j < bins[i]; j++) { cout << "*"; } cout << "\n"; } +} + + + +int main() +{ + Input in = input_data(); + auto bins = make_histogram(in.numbers, in.bin_count); + show_histogram_text(bins, in.bin_count); }