diff --git a/labor01.cpp b/labor01.cpp index be0167a..b5b954d 100644 --- a/labor01.cpp +++ b/labor01.cpp @@ -18,7 +18,7 @@ input_data() { for (size_t i = 0; i < number_count; i++) { cin >> in.numbers[i]; } - cerr << "Enter bin count: "; + 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)); @@ -26,14 +26,11 @@ input_data() { 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) { +void +find_minmax(const vector& numbers, double& min, double& max) { + min = numbers[0]; + max = numbers[0]; + for (double x : numbers) { if (x < min) { min = x; } @@ -41,25 +38,40 @@ int main() { max = x; } } - size_t max_count = 0; - double bin_size = (max - min) / in.bin_count; - for (size_t i = 0; i < number_count; i++) { +} + +vector +make_histogram(const vector& numbers, size_t& bin_count) { + double min = 0; + double max = 0; + find_minmax(numbers, min, max); + double bin_size = (max - min) / bin_count; + vector bins(bin_count); + for (double number : numbers) { bool found = false; - for (size_t j = 0; (j < in.bin_count - 1) && !found; j++) { + 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 <= in.numbers[i]) && (in.numbers[i] < hi)) { + if ((lo <= number) && (number < hi)) { bins[j]++; found = true; - } + } } if (!found) { - bins[in.bin_count - 1]++; + bins[bin_count - 1]++; } - for (size_t i = 0; i < in.bin_count; i++) { - if (bins[i] > max_count) { - max_count = bins[i]; - } + } + return bins; +} + +void +show_histogram_text(const vector& bins, size_t& bin_count) { + const size_t SCREEN_WIDTH = 80; + const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; + size_t max_count = 0; + for (size_t i = 0; i < bin_count; i++) { + if (bins[i] > max_count) { + max_count = bins[i]; } } double kof = double(MAX_ASTERISK) / max_count; @@ -77,8 +89,16 @@ int main() { for (size_t i = 0; i < size_t(bin * kof); i++) { cout << "*"; } - cout << endl; } - return 0; -} \ No newline at end of file +} + +int main() { + auto 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