From 7ac1d950799efdab07d94904bf1452362d587c35 Mon Sep 17 00:00:00 2001 From: "(NemylinNO)" Date: Mon, 10 Apr 2023 15:08:08 +0300 Subject: [PATCH] =?UTF-8?q?=D1=80=D0=B0=D0=B7=D1=8E=D0=B8=D1=82=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=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 --- lab1.cpp | 104 ++++++++++++++++++++++++++----------------------------- 1 file changed, 50 insertions(+), 54 deletions(-) diff --git a/lab1.cpp b/lab1.cpp index 30b4bd1..30c7603 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; - - vector bins(bin_count); - vector binss(bin_count); + cout << "Enter number of bins"; + cin >> in.bin_count; + return in; +} - 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,45 +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 << " "; } - float t = round((binss[i] / static_cast(number_count)) * 1000) / 10; - cout << t << "%" << "|"; - 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); +} \ No newline at end of file