diff --git a/main.cpp b/main.cpp index c62cc70..f58b076 100644 --- a/main.cpp +++ b/main.cpp @@ -3,81 +3,131 @@ using namespace std; -int main() +struct Input +{ + vector numbers; + size_t bin_count{}; +}; + +Input +input_data() { size_t number_count; - cerr << "number count="; cin>>number_count; // ввод количества чисел + cin >> number_count; - char l,r,v; + Input in; - vector numbers(number_count); + in.numbers.resize(number_count); + for (size_t i = 0; i < number_count; i++) + { + cin >> in.numbers[i]; + } + cin >> in.bin_count; - for (int i=0; i& numbers, double& min, double& max) +{ + min = numbers[0]; + for (auto i = 0; i < numbers.size(); i++) { - cin>>numbers[i]; // ввод массива чисел + if (numbers[i] < min) + { + min = numbers[i]; + } } - size_t bin_count; - cerr<<"bin count="; cin>>bin_count; // ввод количества корзин - vector bins(bin_count); // массив каждой корзины + max = numbers[0]; + for (auto i = 0; i < numbers.size(); i++) + { + if (numbers[i] > max) + { + max = numbers[i]; + } + } +} +vector make_histogram(const vector& numbers, size_t bin_count) +{ - double min = numbers[0]; - double max = numbers[0]; - for (double x : numbers) { - if (x < min) { - min = x; - } - else if (x > max) { - max = x; - } - } + vector bins(bin_count); + vector binss(bin_count); - double bin_size = (max - min) / 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++) { - 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; + 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; + auto hi = min + (j + 1) * bin_size; + if ((lo <= numbers[i]) && (numbers[i] < hi)) + { + bins[j]++; + found = true; + } + } + if (!found) + { + bins[bin_count - 1]++; } } - if (!found) + int max_count = bins[0]; + for (size_t i = 0; i < bin_count; i++) + { + if (bins[i] > max_count) { - bins[bin_count - 1]++; + max_count = bins[i]; } } - cout<<"risunok-";cin>>r; - cout<<"linia osi-";cin>>l; - cout<<"viravnivanie-";cin>>v; + if (max_count > 76) + { + for (size_t i = 0; i < bin_count; i++) + { + int count = bins[i]; + size_t height = 76 * (static_cast(count) / max_count); + bins[i] = height; + } + } + return bins; +} +void show_histogram_text(vector bins, size_t bin_count ) +{ - for (int j=0; j