diff --git a/main.cpp b/main.cpp index 47a274a..5bfc7ba 100644 --- a/main.cpp +++ b/main.cpp @@ -1,66 +1,75 @@ #include #include using namespace std; -int main() -{ + +struct Input { + vector numbers; + size_t bin_count{}; +}; + +Input +input_data() { size_t number_count; - cerr << "Enter number count: "; + cout << "Enter number count: "; cin >> number_count; - + Input in; + in.numbers.resize(number_count); vector numbers(number_count); - for (size_t i=0; i>numbers[i]; + cin >> in.numbers[i]; } size_t bin_count; - cerr << "Enter count bin: "; - cin >>bin_count; - size_t interval; - cerr << "Enter interval: "; - cin >> interval; - double min = numbers[0]; - double max = numbers[0]; - for (double x : numbers) - { - if (x < min) - { - min = x; - } - else if (x > max) - { + cout << "Enter count bin : "; + cin >> in.bin_count; + return in; +} + +void +find_minmax(const vector& numbers, double& min, double& max) { + min = numbers[0]; + max = numbers[0]; + for (double x : numbers) { + if (x < min) { + min = x; + } + else if (x > max) { max = x; - } } - vector bins(bin_count); + } +} +vector +make_histogram(const vector& numbers, size_t bin_count){ + vector bins (bin_count); + double min = 0, max = 0; + 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 (int i = 0; i < numbers.size(); i++) { + bool found = false; + for (int 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) - { - bins[bin_count - 1]++; - } } - const size_t SCREEN_WIDTH = 80; - const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; - size_t height = 0; - size_t bin_max =0; - for (double y : bins) + return bins; +} + +void +show_histogram_text (const vector& bins,size_t MAX_ASTERISK, size_t bin_count){ + size_t bin_max = 0; + size_t height = 0; + for (double x : bins) { - if (y > bin_max) - { - bin_max = y; + if (x > bin_max){ + bin_max = x; } } for (size_t bin: bins) @@ -82,46 +91,15 @@ int main() } cout << endl; } - size_t len_numb = 0; - size_t maxbin = bins[0]; - if (interval < 4 and interval > 9){ - cout << "ERROR"; - } - else{ - for (size_t bin: bins) - { - if (bin>maxbin){ - maxbin=bin; - - } - } - size_t maxb=maxbin; - while(maxbin){ - maxbin/=10; - len_numb++; - } - for(size_t j=1; j<=len_numb; j++){ - cout<<" "; - } - cout<<"|"; - int int_part; - if (maxb%interval==0){ - int_part=maxb/interval; - } - else{ - int_part=(maxb/interval)+1; - } - for(size_t i=1;i<=int_part;i++){ - cout<<"-----|"; - } - cout<