diff --git a/histogram.cpp b/histogram.cpp index 4dbfc63..2a34d2c 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -1,5 +1,6 @@ #include "histogram.h" #include "svg.h" + using namespace std; // Поиск максимума и минимума среди оценок. @@ -21,15 +22,19 @@ void find_minmax(const vector& numbers, double& min, double& max) vector make_histogram(const vector& numbers, size_t bin_count) { // Поиск максимума и минимума среди оценок. + vector bins(bin_count); + + if (numbers.empty() || bin_count == 0) + return bins; + double min, max; find_minmax(numbers, min, max); + // Создание корзин для дальнейшей сортировки оценок по ним. double bin_size = (max - min) / bin_count; - vector bins(bin_count); - for (size_t i = 0; i < bin_count; i++) bins[i] = 0; @@ -53,38 +58,3 @@ vector make_histogram(const vector& numbers, size_t bin_count) } return bins; } - -// Создание гистограммы на основании корзин в формате SVG. - -void show_histogram_svg(const vector& bins) -{ -// Необходимые константы. - const auto IMAGE_WIDTH = 400; - const auto IMAGE_HEIGHT = 300; - const auto TEXT_LEFT = 20; - const auto TEXT_BASELINE = 20; - const auto TEXT_WIDTH = 50; - const auto BIN_HEIGHT = 30; - size_t max_bins = bins[0]; - -// Поиск максимальной корзины. - - for (size_t x: bins) - if (x > max_bins) - max_bins = x; - -// Выравнивание гистограммы по максимальному столбцу. - - const auto BLOCK_WIDTH = (IMAGE_WIDTH - TEXT_WIDTH)/max_bins;//BLOCK_WIDTH = 10 - - svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); - double top = 0; - for (size_t bin : bins) - { - const double bin_width = BLOCK_WIDTH * bin; - svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bin)); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT); - top += BIN_HEIGHT; - } - svg_end(); -}