From 5d03d10f0951d2db0ce5785d55f1204edb6fe32c Mon Sep 17 00:00:00 2001 From: ShchegolikhYR Date: Thu, 1 May 2025 19:47:59 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20=D0=B3=D0=B8=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D1=8B=20=D0=B2=20?= =?UTF-8?q?=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D0=B5=20SVG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- histogram.cpp | 2 +- main.cpp | 56 ++------------------------------------------------- svg.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++ svg.hpp | 12 +++++++++++ 4 files changed, 62 insertions(+), 55 deletions(-) create mode 100644 svg.cpp create mode 100644 svg.hpp diff --git a/histogram.cpp b/histogram.cpp index 789c229..86d892e 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -3,7 +3,7 @@ using namespace std; -static void find_minmax(const vector& numbers, double& minimum, double& maximum) { +void find_minmax(const vector& numbers, double& minimum, double& maximum) { minimum = numbers[0]; maximum = numbers[0]; for (auto i : numbers) { diff --git a/main.cpp b/main.cpp index aaca044..7d919de 100644 --- a/main.cpp +++ b/main.cpp @@ -3,7 +3,7 @@ #include #include "histogram.hpp" #include "text.hpp" - +#include "svg.hpp" using namespace std; struct Input { @@ -29,61 +29,9 @@ Input input_data() { return in; } -//void find_minmax(const vector& numbers, double& minimum, double& maximum) { -// minimum = numbers[0]; -// for (int i : numbers) { -// if (i < minimum) minimum = i; -// } -// maximum = numbers[0]; -// for (int i : numbers) { -// if (i > maximum) maximum = i; -// } -//} - -//vector make_histogram(const vector& numbers, size_t& bin_count) { -// vector baskets; -// baskets.resize(bin_count); -// -// double basket_max; -// double basket_min; -// double basket_size; -// -// find_minmax(numbers, basket_min, basket_max); -// basket_size = (basket_max - basket_min) / bin_count; -// for (int i = 0; i < bin_count; i++) { -// for (int j = 0; j < numbers.size(); j++) { -// if ((numbers[j] >= (basket_min + i * basket_size) and numbers[j] < (basket_min + (i + 1) * basket_size)) or (i == bin_count - 1 and numbers[j] == basket_max)) { -// baskets[i]++; -// } -// } -// } -// return baskets; -//} - -//void show_histogram_text(const vector& baskets) { -// const size_t screen_width = 80; -// const size_t max_asterisk = screen_width - 3 - 1; -// cout.precision(4); -// size_t baskets_max_count; -// -// baskets_max_count = baskets[0]; -// for (size_t i : baskets) { -// if (i > baskets_max_count) baskets_max_count = i; -// } -// for (int i = 0; i < baskets.size(); i++) { -// size_t height = baskets[i]; -// if (baskets_max_count > max_asterisk) { -// height = max_asterisk * (static_cast(baskets[i]) / baskets_max_count); -// } -// cout << baskets[i] << "|"; -// for (int j = 0; j < height; j++) cout << "*"; -// cout << endl; -// } -//} - int main () { auto in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_text(bins); + show_histogram_svg(bins); return 0; } diff --git a/svg.cpp b/svg.cpp new file mode 100644 index 0000000..35cad9a --- /dev/null +++ b/svg.cpp @@ -0,0 +1,47 @@ +#include "svg.hpp" +#include +#include + +using namespace std; + +void svg_begin(double width, double height) { + cout << "\n"; + cout << "\n"; +} + +void svg_end() { + cout << "\n"; +} + +void svg_text(double left, double baseline, string text) { + cout << "" << text << ""; +} + +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; + const auto 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(); +} + +void svg_rect(double x, double y, double width, double height, string stroke, string fill) { + cout << ""; +} + diff --git a/svg.hpp b/svg.hpp new file mode 100644 index 0000000..339d2cb --- /dev/null +++ b/svg.hpp @@ -0,0 +1,12 @@ +#ifndef svg_hpp +#define svg_hpp +#include +#include + +void svg_begin(double width, double height); +void svg_end(); +void svg_text(double left, double baseline, std::string text); +void show_histogram_svg(const std::vector& bins); +void svg_rect(double x, double y, double width, double height, std::string stroke = "black", std::string fill = "black"); + +#endif /* svg_hpp */