#include #include using namespace std; struct Input { vector numbers; size_t bin_count; }; Input input_data() { size_t number_count; cerr << "Enter number count: "; cin >> number_count; Input in; in.numbers.resize(number_count); for (size_t i = 0; i < number_count; i++) { cerr << "Enter [" << i << "]: "; cin >> in.numbers[i]; } in.bin_count; cerr << "Enter bin count: "; cin >> in.bin_count; return in; } void find_minmax(vector numbers, double& min, double& max) { min = numbers[0]; max = numbers[0]; for (int i = 0; i < numbers.size(); i++){ if (numbers[i] < min) min = numbers[i]; if (numbers[i] > max) max = numbers[i]; } } auto make_histogram( vector numbers, size_t bin_count){ vector bins(bin_count); double min,max; 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]) && (numbers[i] < hi)){ bins[j]++; found = true; } } if (!found){ bins[ bin_count - 1]++; } } /*for (size_t i = 0; i < numbers.size(); i++){ cout << " "<< bins[ i]; } */ return bins; } void show_histogram_text (auto bins , size_t bin_count, vector numbers ){ int i; double min,max; find_minmax( numbers, min, max); int r[20]; r[0]=0; for (i = 0; i < bin_count; i++){ r[i+1]=r[i]+ bins[i]; } int maxbin=0; for (size_t i = 0; i < bin_count; i++){ if ( r[i+1] > maxbin) maxbin = r[i+1] ; } float k=1; //k= 76.00 / maxbin; for (size_t i = 0; i < bin_count; i++){ if (r[i+1]<10) cout << " "; if (r[i+1]<100) cout << " "; cout << r[i+1] << "|"; for (size_t j = 0; j bins(in.bin_count); double bin_size = (max - min) / in.bin_count; for (size_t i = 0; i < in.numbers.size(); i++){ bool found = false; for (size_t j = 0; (j < in.bin_count - 1) && !found; j++){ auto lo = min + j * bin_size; auto hi = min + (j + 1) * bin_size; if ((lo <= in.numbers[i]) && (in.numbers[i] < hi)){ bins[j]++; found = true; } } if (!found){ bins[ in.bin_count - 1]++; } } int r[20]; r[0]=0; for (size_t i = 0; i < in.bin_count; i++){ r[i+1]=r[i]+bins[i]; } int maxbin=0; for (size_t i = 0; i < in.bin_count; i++){ if ( r[i+1] > maxbin) maxbin = r[i+1]; } float k=1; //k= 76.00 / maxbin; for (size_t i = 0; i < in.bin_count; i++){ if (r[i+1]<10) cout << " "; if (r[i+1]<100) cout << " "; cout << r[i+1] << "|"; for (size_t j = 0; j