diff --git a/lab01.cpp b/lab01.cpp index 5095408..6c34053 100644 --- a/lab01.cpp +++ b/lab01.cpp @@ -5,28 +5,22 @@ using namespace std; -int main() -{ - //ввод данных - size_t number_count; - cerr << "Enter number count: "; - cin >> number_count; - - vector numbers(number_count); +vector +input_numbers(size_t count) { + vector result(count); cerr << "Enter numbers: "; - - for (size_t i = 0; i < number_count; i++) - { - cin >> numbers[i]; + for (size_t i = 0; i < count; i++) { + cin >> result[i]; } + return result; +} - size_t bin_count; - cerr << "Enter bin count: "; - cin >> bin_count; - //расчет данных - double min = numbers[0]; - double max = numbers[0]; + +void +find_minmax(const vector& numbers, double& min, double& max) { + min = numbers[0]; + max = numbers[0]; for (double number : numbers) { if (number < min) @@ -39,29 +33,39 @@ int main() max = number; } } + return; +} - - vector bins(bin_count, 0); +vector make_histogram(const vector& numbers, const size_t bin_count) +{ + double min, max; + find_minmax(numbers, min, max); double bin_size = (max - min) / bin_count; - - for (size_t i = 0; i < number_count; i++) + vector bins(bin_count, 0); + for (size_t i = 0; i < numbers.size(); i++) { bool found = false; - for (size_t j = 0; j < (bin_count - 1) && !found; j++) + for (size_t j = 0; j < bin_count - 1 && !found; j++) { - auto low = min + j * bin_size; - auto hight = min + (j + 1) * bin_size; + auto lo = min + j * bin_size; + auto hi = min + (j + 1) * bin_size; - if ((low <= numbers[i]) && (numbers[i] < hight)) { + if (lo <= numbers[i] && numbers[i] < hi) + { bins[j]++; found = true; } } - if (!found) { + if (!found) + { bins[bin_count - 1]++; } } + return bins; +} +void show_histogram_text(const vector& bins) +{ const size_t SCREEN_WIDTH = 80; const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; @@ -103,7 +107,26 @@ int main() cout << endl; } +} + +int main() +{ + +//ввод данных + size_t number_count; + cerr << "Enter number count: "; + cin >> number_count; + + const auto numbers = input_numbers(number_count); + + size_t bin_count; + cerr << "Enter bin count: "; + cin >> bin_count; + //расчет данных + + const auto bins = make_histogram(numbers, bin_count); + show_histogram_text(bins); return 0; }