diff --git a/main.cpp b/main.cpp index 3d22425..78c7967 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,8 @@ #include #include +#include "histogram.h" +#include "text.h" +#include "svg.h" using namespace std; const size_t SCREEN_WIDTH = 80; const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; @@ -10,95 +13,22 @@ struct Input { }; Input -input_data() { +input_data(istream& in) { size_t number_count; - cin >> number_count; - Input in; - in.numbers.resize(number_count); + in >> number_count; + Input inn; + inn.numbers.resize(number_count); for (size_t i = 0; i < number_count; i++) { - cin >> in.numbers[i]; - } - cin >> in.bin_count; - return in; -} - -void -find_minmax(const vector& numbers, double& min, double& max) { - min = numbers[0]; - max = numbers[0]; - for (size_t x : numbers) { - if (x < min) { - min = x; - } - else if (x > max) { - max = x; - } - } - // (здесь код поиска минимума и максимума) -} - -vector make_histogram(const 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 ( (numbers[i] >= lo) && (numbers[i] < hi) ) { - bins[j]++; - found = true; - } - } - if (!found) { - bins[bin_count-1]++; - } - } - return bins; -} - -void -show_histogram_text(vector bins){ - size_t max_count = bins[0]; - for(size_t x: bins){ - if(x > max_count){ - max_count = x; - } - } - vector heights(bins.size()); - if (max_count>MAX_ASTERISK){ - for (size_t i = 0; i < bins.size(); i++){ - heights[i] = MAX_ASTERISK * (static_cast(bins[i]) /max_count); - } - } - else{ - for (size_t i=0; i> inn.numbers[i]; } + in >> inn.bin_count; + return inn; } int main(){ - auto in = input_data(); + auto in = input_data(cin); auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_text(bins); + show_histogram_svg(bins); return 0; }