diff --git a/lab1.cpp b/lab1.cpp index 14127b8..ab16275 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; + cout << "Enter number of bins"; + cin >> in.bin_count; + return in; +} - vector bins(bin_count); - vector binss(bin_count); - - 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,20 +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 << " "; } - cout << bins[i] << "%" << "|"; - 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); }