diff --git a/main.cpp b/main.cpp index 159f12d..70cd416 100644 --- a/main.cpp +++ b/main.cpp @@ -2,58 +2,142 @@ #include using namespace std; -int main() -{ -unsigned int n; -size_t number_count; -size_t bin_count; -double maxx, minn; +struct Input { + vector numbers; + size_t bin_count; +}; + + Input input_data() { + +size_t number_count; cerr << "Enter number count: "; cin >> number_count; -cerr << "Enter bin count: "; cin >> bin_count; -vector numbers (number_count); -for (int i = 0; i < number_count; i++){ - cerr << "Enter [" << i << "]: "; cin >> numbers[i]; +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; } -maxx = numbers[0]; -minn = numbers[0]; -for (int i = 0; i < number_count; i++){ - if (numbers[i] < minn) - minn = numbers[i]; - if (numbers[i] > maxx) - maxx = numbers[i]; +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 bin_size = (maxx - minn) / bin_count; -for (size_t i = 0; i < number_count; i++){ +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 = minn + j * bin_size; - auto hi = minn + (j + 1) * bin_size; + 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]++; + 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 < bin_count; i++){ +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 < bin_count; i++){ +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 < bin_count; i++){ +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] << "|"; @@ -61,6 +145,6 @@ for (size_t i = 0; i < bin_count; i++){ cout << "*" ; } cout << endl; -} +} */ return 0; }