From f664d5271ee23e30b241d8bb417ce52e89591a71 Mon Sep 17 00:00:00 2001 From: MelnikovDM Date: Mon, 6 May 2024 22:39:27 +0300 Subject: [PATCH] code: Structuring a program using function --- labor01.cpp | 59 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 34 insertions(+), 25 deletions(-) diff --git a/labor01.cpp b/labor01.cpp index ef5a8cd..be0167a 100644 --- a/labor01.cpp +++ b/labor01.cpp @@ -3,28 +3,37 @@ #include 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; - cerr << "Enter number count:"; + cerr << "Enter number count: "; cin >> number_count; - vector numbers(number_count); - cerr << "Enter numbers:"; - for (int i = 0; i < number_count; i++) { - cin >> numbers[i]; + Input in; + in.numbers.resize(number_count); + for (size_t i = 0; i < number_count; i++) { + cin >> in.numbers[i]; } - sort(begin(numbers), end(numbers)); - numbers.erase(unique(begin(numbers), end(numbers)), end(numbers)); - number_count = numbers.size(); - - size_t bin_count; - cerr << "Enter bin count:"; - cin >> bin_count; - vector bins(bin_count); - double min = numbers[0]; - double max = numbers[0]; - for (double x : numbers) { + cerr << "Enter bin count: "; + cin >> in.bin_count; + sort(begin(in.numbers), end(in.numbers)); + in.numbers.erase(unique(begin(in.numbers), end(in.numbers)), end(in.numbers)); + number_count = in.numbers.size(); + return in; +} + +int main() { + Input in = input_data(); + const size_t SCREEN_WIDTH = 80; + const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; + vector bins(in.bin_count); + double min = in.numbers[0]; + double max = in.numbers[0]; + for (double x : in.numbers) { if (x < min) { min = x; } @@ -33,21 +42,21 @@ int main() { } } size_t max_count = 0; - double bin_size = (max - min) / bin_count; + double bin_size = (max - min) / in.bin_count; for (size_t i = 0; i < number_count; i++) { bool found = false; - for (size_t j = 0; (j < bin_count - 1) && !found; j++) { + for (size_t j = 0; (j < in.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)) { + if ((lo <= in.numbers[i]) && (in.numbers[i] < hi)) { bins[j]++; found = true; - } + } } if (!found) { - bins[bin_count - 1]++; + bins[in.bin_count - 1]++; } - for (size_t i = 0; i < bin_count; i++) { + for (size_t i = 0; i < in.bin_count; i++) { if (bins[i] > max_count) { max_count = bins[i]; }