#include #include #include using namespace std; struct Input { vector numbers; size_t bin_count{}; }; void find_minmax(vector numbers, double& min, double& max); //size_t maxBin(vector bins); vector make_histogram(vector numbers, size_t bin_count); Input input_data(); const size_t SCREEN_WIDTH = 80; const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; int main() { size_t maxCount; Input in = input_data(); vector bins = make_histogram(in.numbers,in.bin_count); /* maxCount = maxBin(bins); size_t count_stars; for (int i = 0; i < in.bin_count; i++) { if (bins[i] < 100) { cout << " "; } if (bins[i] < 10) { cout << " "; } cout << bins[i]; cout << "|"; if (maxCount > MAX_ASTERISK) { count_stars = MAX_ASTERISK * (static_cast(bins[i]) / maxCount); } else { count_stars = bins[i]; } for (size_t i2 = 0; i2 < count_stars; i2++) { cout << "*"; } cout << endl; } */ return 0; } /*size_t maxBin(vector bins) { size_t max = bins[0]; for (int i = 1; i < bins.size(); i++) { if (max < bins[i]) { max = bins[i]; } } return max; }*/ void find_minmax(vector numbers, double& min, double& max) { min = numbers[0]; max = numbers[0]; for (double number : numbers) { if (min > number) { min = number; } if (max < number) { max = number; } } return; } Input input_data() { Input input_struct; size_t countOfNumbers; cerr << "Input your count of numbers:\n"; cin >> countOfNumbers; input_struct.numbers.resize(countOfNumbers); cerr << "Input bin count:\n"; cin >> input_struct.bin_count; cerr << "Input numbers:\n"; for (int i = 0; i < countOfNumbers; i++) { cerr << i << ":"<< endl; cin >> input_struct.numbers[i]; } cerr << endl; return input_struct; } vector make_histogram(vector numbers, size_t bin_count) { double max; double min; vector bins; bins.resize(bin_count); find_minmax(numbers, min, max); double bin_size = (max - min) / bin_count; 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]) && (hi > numbers[i])) { bins[j]++; found = true; } } if (!found) { bins[bin_count - 1]++; } } return bins; } void show_histogram_text(){}