diff --git a/main.cpp b/main.cpp index cae7ee0..6736725 100644 --- a/main.cpp +++ b/main.cpp @@ -2,39 +2,61 @@ #include #include using namespace std; -int main() -{ - size_t count, bin_count; - size_t i, j; - float min, max, bin_size; - float low, hi; +struct Input{ + vector numbers; + size_t bin_count{}; + }; + +Input +input_data() +{ + size_t count; // все числа cerr << "Count= "; cin >> count; - cerr << "Bin_count= "; - cin >> bin_count; - vectornumbers(count); - vectorbins(bin_count); - for (i = 0; i < count; i++) + + Input in; + in.numbers.resize(count); + cerr << "numbers:"; + for (size_t i = 0; i < count; i++) { - cin >> numbers[i]; + cin >> in.numbers[i]; } + + cerr << "Bin_count= "; + cin >> in.bin_count; + + return in; +} + +void +find_minmax(const vector& numbers, double &min, double &max) +{ min = numbers[0]; max = numbers[0]; - for (i = 0; i < count; i++) + for (size_t i = 0; i < numbers.size(); i++) { if (numbers[i] > max) max = numbers[i]; if (numbers[i] < min) min = numbers[i]; } - bin_size = (max - min) / bin_count; +} + +vector make_histogram (const vector& numbers,size_t &bin_count) +{ + vector bins(bin_count); + double low, hi; + double min, max; + find_minmax(numbers, min, max); + + double bin_size = (max - min) / bin_count; low = min; hi = low + bin_size; - for (i = 0; i < count; i++) + for (size_t i = 0; i < numbers.size(); i++) { bool found = false; - for (j = 0; (j < bin_count - 1) && !found; j++) + for (size_t j = 0; (j < bin_count - 1) && !found; j++) { low = min + j * bin_size; hi = min + (j + 1) * bin_size; @@ -48,16 +70,12 @@ int main() { bins[bin_count - 1]++; } - } - - size_t sum_bins = 0; - for (size_t bin : bins) - { - sum_bins += bin; } - size_t sred_bin = sum_bins / bin_count; - + 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; @@ -77,19 +95,21 @@ int main() if (bin < 10) cout << " "; cout << bin << "|"; - if (height > sred_bin) { - for (size_t i = 0; i < sred_bin; i++) - cout << "*"; - for (size_t i = sred_bin; i < height; i++) - cout << "+"; - } - else { - for (size_t i = 0; i < height; i++) - cout << "*"; - for (size_t i = height; i < sred_bin; i++) - cout << "-"; - } + + for (size_t i = 0; i < height; i++) + cout << "*"; cout << endl; } +} + + +int main() +{ + Input in = input_data(); + //double bin_count{}; + auto bins=make_histogram(in.numbers,in.bin_count); + //for (int i=0; i