From 9d94c68847b5e51d2e85bb4b7f72f20417255ce9 Mon Sep 17 00:00:00 2001 From: Alex Date: Sun, 26 May 2024 15:54:08 +0300 Subject: [PATCH] =?UTF-8?q?=D0=93=D0=BE=D1=82=D0=BE=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B1=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD=D1=82=20(16)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.cpp | 11 +++++++++- svg.cpp | 61 ++++++++++++++++++++++++++++---------------------------- svg.h | 2 +- 3 files changed, 42 insertions(+), 32 deletions(-) diff --git a/main.cpp b/main.cpp index a6b9874..da1fd65 100644 --- a/main.cpp +++ b/main.cpp @@ -10,12 +10,14 @@ struct Input { vector numbers; size_t bin_count{}; + vector colors; }; Input input_data() { Input in; size_t number_count; + cerr << "Enter number_count: "; cin >> number_count; in.numbers.resize(number_count); @@ -25,7 +27,14 @@ Input input_data() cin >> in.numbers[i]; } + cerr << "Enter bin_count: "; cin >> in.bin_count; + + in.colors.resize(in.bin_count); + cerr << "Enter colors: "; + for (size_t i = 0; i < in.bin_count; i++) { + cin >> in.colors[i]; + } return in; } @@ -33,6 +42,6 @@ int main() { auto in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_svg(bins); + show_histogram_svg(bins, in.colors); return 0; } diff --git a/svg.cpp b/svg.cpp index c71577e..84ddc82 100644 --- a/svg.cpp +++ b/svg.cpp @@ -2,11 +2,6 @@ #include #include "svg.h" -std::string InCol (){ - std::string color1; - std::cin >> color1; - return color1; -} void svg_begin(double width, double height) { @@ -28,12 +23,26 @@ void svg_text(double left, double baseline, std::string text) std::cout << ""<< text <<""; } -void svg_rect(double x, double y, double width, double height, std::string color) +void svg_rect(double x, double y, double width, double height, std::string fill = "black", std::string stroke = "black") { - std::cout << ""; + std::cout << "\n"; } -void show_histogram_svg(const std::vector& bins) +std::string check_color(const std::string& color) +{ + if (color.find(" ") == -1 || color.find('#') == 0) + { + return color; + } + else + { + return "black"; + } +} + + + +void show_histogram_svg(const std::vector& bins, const std::vector& colors) { const auto IMAGE_WIDTH = 400; @@ -44,40 +53,32 @@ void show_histogram_svg(const std::vector& bins) const auto BIN_HEIGHT = 30; const auto BLOCK_WIDTH = 10; - std::string color; - color = InCol(); - const std::size_t MAX_ASTERISK = IMAGE_WIDTH - TEXT_WIDTH; svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); double top = 0; - std::size_t maxbin=bins[0]; - for (std::size_t i=0; i < bins.size(); i++) - { - if (maxbin < bins[i]) - { + std::size_t maxbin=bins[0]; + for (std::size_t i=0; i < bins.size(); i++){ + if (maxbin < bins[i]){ maxbin=bins[i]; } } - if (maxbin<=76) - { - for (std::size_t i=0; i < bins.size(); i++) - { - double bin_width= MAX_ASTERISK * (static_cast(bins[i]) / maxbin); - svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bins[i])); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, color); + + if (maxbin<=76) { + for (std::size_t j=0; j < bins.size(); j++) { + const double bin_width= MAX_ASTERISK * (static_cast(bins[j]) / maxbin); + svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bins[j])); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, check_color(colors[j]), "black"); top += BIN_HEIGHT; } svg_end(); } - else - { - for (std::size_t i=0; i < bins.size(); i++) - { - double bin_width = BLOCK_WIDTH * bins[i]; - svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bins[i])); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, color); + else { + for (std::size_t j=0; j < bins.size(); j++) { + const double bin_width= MAX_ASTERISK * (static_cast(bins[j]) / maxbin); + svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bins[j])); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, check_color(colors[j]), "black"); top += BIN_HEIGHT; } svg_end(); diff --git a/svg.h b/svg.h index b29b7fd..92ce6c8 100644 --- a/svg.h +++ b/svg.h @@ -1,5 +1,5 @@ #ifndef SVG_H_INCLUDED #define SVG_H_INCLUDED #include -void show_histogram_svg(const std::vector& bins); +void show_histogram_svg(const std::vector& bins, const std::vector& colors); #endif // SVG_H_INCLUDED