diff --git a/main.cpp b/main.cpp index 5e5f3f5..1ee4b41 100644 --- a/main.cpp +++ b/main.cpp @@ -1,68 +1,69 @@ #include #include +#include -using namespace std; - -int main() -{ -// size_t SCREEN_WIDTH; - size_t number_count, kol_kor, height; - int i, j, srmax, srmin, maxp, minp, max_count = 0, count; - bool found; +using namespace std; - const size_t SCREEN_WIDTH = 80; + struct Input { + vectornumbers; + size_t kol_kor{}; + }; +Input +input_data() +{ + size_t number_count; + cerr<<"Marks: "; + cin>>number_count; - cerr << "Enter number count:"; - cin >> number_count; - const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; -/* - cerr << "Enter SCREEN_WIDTH:"; - cin >> SCREEN_WIDTH; - while (SCREEN_WIDTH<7 || SCREEN_WIDTH>80 || SCREEN_WIDTH> SCREEN_WIDTH; - } -*/ - vector numbers(number_count); - for (i = 0; i < number_count; i++) + Input in; + in.numbers.resize(number_count); + for (size_t i=0; i> numbers[i]; + cerr<<"numbers["<>in.numbers[i]; } - cerr << "Enter kol_kor:"; - cin >> kol_kor; - - vector chet(kol_kor); + cerr<<"Kol_kor: "; + cin>>in.kol_kor; + return in; +} - srmax = 0; - for (i = 0; i < number_count; i++) +void find_minmax(const vector& numbers, double& minp, double& maxp) +{ + minp = numbers[0]; + for (auto i = 0; i srmax) - srmax = numbers[i]; + if (numbers[i]maxp) + { + maxp = numbers[i]; + } } - minp = srmin; +} - double step = (maxp - minp) / (kol_kor*(1.0)); +vector make_histogram (const vector& numbers, size_t kol_kor) +{ + vectorB(kol_kor); + size_t max_count; + double maxp, minp; + find_minmax(numbers, minp, maxp); + double step = (maxp-minp)/(kol_kor); - vector B(kol_kor); - for (i = 0; i < number_count; i++) + for (size_t i=0; i= (minp + j * step)) && (numbers[i] < (minp + (j + 1)*step))) + if ((numbers[i]>=(minp+j*step))&&(numbers[i]<(minp+(j+1)*step))) { B[j]++; break; @@ -70,38 +71,29 @@ int main() } } - for (i = 0; i < number_count; i++) - { - if (numbers[i] == maxp) - { - B[kol_kor - 1]++; - } - - } - for (i = 0; i < kol_kor; i++) - { - if (B[i] > max_count) - max_count = B[i]; - } - for (j = 0; j < kol_kor; j++) + for (size_t i=0; i MAX_ASTERISK) + cout< MAX_ASTERISK) { count = B[i]; height = MAX_ASTERISK * (static_cast(count) / max_count); @@ -118,5 +110,14 @@ int main() } cout << endl; } + } +} + +int main() +{ + Input in = input_data(); + auto B = make_histogram(in.numbers, in.kol_kor); + show_histogram (B, in.kol_kor); + return 0; }