From c45d9ca14c377bbbc34ba15f28b6c6d2d9dd22e1 Mon Sep 17 00:00:00 2001 From: KorneevMA Date: Sun, 22 Sep 2024 23:59:59 +0300 Subject: [PATCH] structuring program --- main.cpp | 132 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 81 insertions(+), 51 deletions(-) diff --git a/main.cpp b/main.cpp index 75ea81d..59d0486 100644 --- a/main.cpp +++ b/main.cpp @@ -1,72 +1,102 @@ #include #include - using namespace std; +using namespace std; - const size_t SCREEN_WIDTH = 80; +const size_t SCREEN_WIDTH = 80; const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; - int main() { - size_t number_count; +struct Input +{ + vector numbers; + size_t bin_count{}; +}; - cerr << "Enter number count: "; +Input input_data() +{ + Input in; + size_t number_count; cin >> number_count; - vector numbers(number_count); - - for (size_t i = 0; i < number_count; i++){ - cin >> numbers[i]; + in.numbers.resize(number_count); + for (size_t i = 0; i < number_count; i++) + { + cin >> in.numbers[i]; } + cin >> in.bin_count; + return in; +} - double min = numbers[0]; - double max = numbers[0]; - for (double x : numbers) { - if (x < min) { - min = x; +void find_minmax(const vector &numbers, double &min, double &max) +{ + min = numbers[0]; + max = numbers[0]; + for (auto el : numbers) + { + if (el > max) + { + max = el; } - else if (x > max) { - max = x; + if (el < min) + { + min = el; } } - double bin_count; - cerr << "Enter bin count: "; - cin >> bin_count; - vector bins(bin_count); - double bin_size = (max - min) / 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++) { - auto lo = min + j * bin_size; - auto hi = min + (j + 1) * bin_size; - if ((lo <= numbers[i]) && (numbers[i] < hi)) { - bins[j]++; - found = true; +} + +vector make_histogram(const vector &numbers, const size_t &bin_count){ + vector bins(bin_count); + double max, min; + find_minmax(numbers, min, max); + double binSize = (max - min) / bin_count; + 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 * binSize; + auto hi = min + (j + 1) * binSize; + if ((lo <= numbers[i]) && (numbers[i] < hi)) + { + bins[j]++; + found = true; + } + } + if (!found) + { + bins[bin_count - 1]++; } } - if (!found) { - bins[bin_count - 1]++; - } + return bins; } - size_t max_bin = bins[0]; - for (size_t i = 1; i < bin_count; i++){ - if (bins[i] > max_bin) max_bin = bins[i]; - } - - size_t bin; - size_t height; - for (size_t i = 0; i < bin_count; i++){ - bin = bins[i]; - if (bin < 100) cout << " "; - if (bin < 10) cout << " "; - if (max_bin > MAX_ASTERISK) height = MAX_ASTERISK * (static_cast(bin) / max_bin); - else height = bin; - cout << bin << "|"; - for (size_t j = 0; j < height; j++){ - cout << "*"; +void show_histogram_text(const vector &bins){ + size_t maxCount = bins[0]; + for (auto bin : bins) + { + if (maxCount < bin) + { + maxCount = bin; + } + } + for (auto bin : bins) + { + if (bin < 100) + { + cout << " "; + } + if (bin < 10) + { + cout << " "; + } + size_t height = maxCount < MAX_ASTERISK ? bin : MAX_ASTERISK * (static_cast(bin) / maxCount); + cout << bin << "|" << string(height, '*'); + cout << "\n"; } - cout<