From 112a53e6ed119488dc41a5e7e631158f790580b5 Mon Sep 17 00:00:00 2001 From: Artyom Date: Sat, 18 May 2024 16:42:40 +0300 Subject: [PATCH] =?UTF-8?q?Build:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=BF?= =?UTF-8?q?=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=B0=20=D0=B8=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=B4=20=D0=BF=D0=B5=D1=80=D1=81=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B2=D0=B0=D1=80=D0=B8=D0=B0=D0=BD?= =?UTF-8?q?=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab3_personal.cbp | 43 ++++++++++++++++++++++++++ main_personal.cpp | 38 +++++++++++++++++++++++ svg_personal.cpp | 79 +++++++++++++++++++++++++++++++++++++++++++++++ svg_personal.h | 9 ++++++ 4 files changed, 169 insertions(+) create mode 100644 Lab3_personal.cbp create mode 100644 main_personal.cpp create mode 100644 svg_personal.cpp create mode 100644 svg_personal.h diff --git a/Lab3_personal.cbp b/Lab3_personal.cbp new file mode 100644 index 0000000..862a26e --- /dev/null +++ b/Lab3_personal.cbp @@ -0,0 +1,43 @@ + + + + + + diff --git a/main_personal.cpp b/main_personal.cpp new file mode 100644 index 0000000..36f1237 --- /dev/null +++ b/main_personal.cpp @@ -0,0 +1,38 @@ +#include +#include +#include "histogram.h" +#include "svg_personal.h" + +using namespace std; + +struct Input { + vector numbers; + size_t bin_count{}; + string text_style; +}; + +Input +input_data(){ + size_t number_count; + cerr << "Enter number count:" << endl; + cin >> number_count; + Input in; + in.numbers.resize(number_count); + vector numbers(number_count); + cerr << "Enter numbers:" << endl; + for (size_t i = 0; i < number_count; i++) { + cin >> in.numbers[i]; + } + cerr << "Enter bin count:" << endl; + cin >> in.bin_count; + in.text_style = styled_text_func (); + return in; +} + +int +main() { + auto in = input_data(); + auto bins = make_histogram(in.numbers, in.bin_count); + show_histogram_svg(bins, in.text_style); + return 0; +} diff --git a/svg_personal.cpp b/svg_personal.cpp new file mode 100644 index 0000000..76e7602 --- /dev/null +++ b/svg_personal.cpp @@ -0,0 +1,79 @@ +#include "svg_personal.h" +#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 style, string text) { + cout << "" << text << ""; +} + +void +svg_rect(double x, double y, double width, double height, + string stroke = "black", string fill = "orange"){ + cout << ""; +} + +string +styled_text_func (){ + string text_style; + cerr << "Do you want to use any text style? (Yes/No)" << endl; + cin >> text_style; + if (text_style == "No") { + text_style = "none"; + } + else { + cerr << "Which text style do you want to use?" << endl; + cin >> text_style; + while ((text_style != "none") && (text_style != "underline") && (text_style != "overline") && (text_style != "line-through")){ + cerr << "You entered the wrong style name. Try again." << endl; + cin >> text_style; + } + } + return text_style; +} + +void +show_histogram_svg(const vector& bins, std::string text_style) { + 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; + double maxbin = bins[0]; + for (size_t bin : bins) { + if (maxbin < bin){ + maxbin = bin; + } + } + for (size_t bin : bins) { + double bin_width = BLOCK_WIDTH * bin; + if ((IMAGE_WIDTH - TEXT_WIDTH) < (bin * BLOCK_WIDTH)){ + bin_width = (IMAGE_WIDTH - TEXT_WIDTH) * ( bin / maxbin ); + } + svg_text(TEXT_LEFT, top + TEXT_BASELINE, text_style, to_string(bin)); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT); + top += BIN_HEIGHT; + } + svg_end(); +} diff --git a/svg_personal.h b/svg_personal.h new file mode 100644 index 0000000..70e642b --- /dev/null +++ b/svg_personal.h @@ -0,0 +1,9 @@ +#pragma once +#include +#include + +void +show_histogram_svg(const std::vector& bins, std::string text_style); + +std::string +styled_text_func ();