From 2de0e2d5f918915ba29d0dee962ac3ef5e042dbd Mon Sep 17 00:00:00 2001 From: TabolinIA Date: Wed, 22 May 2024 10:00:31 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=BE=D0=B1=D1=89=D0=B8=D0=B9=20=D0=B2?= =?UTF-8?q?=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82(=D0=BC=D0=B0=D1=81=D1=88?= =?UTF-8?q?=D0=B8=D0=B0=D0=B1=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- histogram.cpp | 14 ++------------ histogram.h | 2 +- lab_03.cbp | 5 +++++ main.cpp | 5 +++-- svg.cpp | 22 ++++++++++++++++++++++ 5 files changed, 33 insertions(+), 15 deletions(-) diff --git a/histogram.cpp b/histogram.cpp index bc6bcfc..922d517 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -17,12 +17,12 @@ find_minmax(const vector& numbers, double& min, double& max) { } } -vector make_histogram(const vector& numbers, size_t bin_count){ +vector make_histogram(const vector& numbers, size_t bin_count){ double min, max; find_minmax(numbers, min, max); double bin_size = (max - min) / bin_count; - vector bins; + vector bins; bins.resize(bin_count); for (std::size_t i = 0; i < numbers.size(); i++) @@ -43,16 +43,6 @@ vector make_histogram(const vector& numbers, size_t bin_count){ bins[bin_count - 1]++; } } - double out; - for (std::size_t i = 0; i < bin_count-1; i++) - { - if (bins[i] > bins[i+1]) - { - out = bins[i]; - bins[i] = bins[i + 1]; - bins[i + 1] = out; - } - } return bins; } diff --git a/histogram.h b/histogram.h index bfd4c86..6ba6315 100644 --- a/histogram.h +++ b/histogram.h @@ -1,5 +1,5 @@ #ifndef HISTOGRAM_H_INCLUDED #define HISTOGRAM_H_INCLUDED -std::vector +std::vector make_histogram(const std::vector& numbers, const std::size_t bin_count); #endif // HISTOGRAM_H_INCLUDED diff --git a/lab_03.cbp b/lab_03.cbp index dc7a6a4..c98bcb7 100644 --- a/lab_03.cbp +++ b/lab_03.cbp @@ -35,7 +35,12 @@ + + + + + diff --git a/main.cpp b/main.cpp index ea33f37..6dca8b2 100644 --- a/main.cpp +++ b/main.cpp @@ -2,6 +2,7 @@ #include #include "histogram.h" #include "text.h" +#include "svg.h" using namespace std; @@ -14,7 +15,7 @@ struct Input { Input input_data() { size_t number_count; - cout << "Enter number count: "; + cerr << "Enter number count: "; cin >> number_count; Input in; in.numbers.resize(number_count); @@ -33,6 +34,6 @@ main() { auto in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_text(bins, in.bin_count); + show_histogram_svg(bins); return 0; } diff --git a/svg.cpp b/svg.cpp index 0727984..35737c7 100644 --- a/svg.cpp +++ b/svg.cpp @@ -40,6 +40,28 @@ show_histogram_svg(const vector& bins) { const auto BIN_HEIGHT = 30; const auto BLOCK_WIDTH = 10; + const size_t MAX_WIDTH = IMAGE_WIDTH - TEXT_WIDTH - 1; + + size_t maxbin = 0; + for (size_t bin : bins){ + if (bin > maxbin){ + maxbin = bin; + } + } + + if (maxbin > MAX_WIDTH) { + + svg_begin(400, 300); + double top = 0; + for (size_t bin : bins) { + const double bin_width = MAX_WIDTH * (bin / maxbin); + svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bin)); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT); + top += BIN_HEIGHT; + } + svg_end(); + } + svg_begin(400, 300); double top = 0; for (size_t bin : bins) {