From e40e706a0fde0ef9c35f7942b5461fa53eba77c9 Mon Sep 17 00:00:00 2001 From: TarasovEE Date: Sat, 13 Sep 2025 21:38:41 +0300 Subject: [PATCH] =?UTF-8?q?source:=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD=D0=B0?= =?UTF-8?q?=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=B3=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B=20=D0=B2=20SVG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- histogram.cpp | 44 +++++++------------------------------------- 1 file changed, 7 insertions(+), 37 deletions(-) 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(); -}