From 126a1ef45b6585e7ebe6c0b79c63bfb1062682c4 Mon Sep 17 00:00:00 2001 From: Kuzin Date: Mon, 5 Jun 2023 16:37:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=D1=8B=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B8=D0=BD=D0=B4=D0=B8=D0=B2=D0=B8=D0=B4=D1=83?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=B7=D0=B0=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lab_1.cbp | 7 ++++++ Lab_1.depend | 46 ++++++++++++++++++++++++++++++++++++ Lab_1.layout | 40 +++++++++++++++++++++++++++++++ histogram.cpp | 20 ++++++++++++---- histogram.h | 3 +++ main.cpp | 4 +++- main.exe | Bin 0 -> 86678 bytes main.o | Bin 0 -> 50955 bytes svg.cpp | 25 +++++++++++++++----- svg.h | 4 +++- unittest.cbp | 42 +++++++++++++++++++++++++++++++++ unittest.cpp | 1 + unittest.depend | 61 ++++++++++++++++++++++++++++++++++++++++++++++++ unittest.layout | 20 ++++++++++++++++ 14 files changed, 260 insertions(+), 13 deletions(-) create mode 100644 Lab_1.depend create mode 100644 Lab_1.layout create mode 100644 main.exe create mode 100644 main.o create mode 100644 unittest.cbp create mode 100644 unittest.depend create mode 100644 unittest.layout diff --git a/Lab_1.cbp b/Lab_1.cbp index d3c8471..cfd844f 100644 --- a/Lab_1.cbp +++ b/Lab_1.cbp @@ -32,7 +32,14 @@ + + + + + + + diff --git a/Lab_1.depend b/Lab_1.depend new file mode 100644 index 0000000..8e104f5 --- /dev/null +++ b/Lab_1.depend @@ -0,0 +1,46 @@ +# depslib dependency file v1.0 +1680527920 source:l:\i курс\А-3-22\Комков\lab_1\main.cpp + + + +1680527920 source:e:\лаба 1\lab_1\main.cpp + + + +1685970224 source:c:\users\жесткий п\desktop\лаба 1\lab_1\histogram.cpp + + + "histogram.h" + +1685968632 c:\users\жесткий п\desktop\лаба 1\lab_1\histogram.h + + +1685971982 source:c:\users\жесткий п\desktop\лаба 1\lab_1\main.cpp + + + + "histogram.h" + "text.h" + "svg.h" + +1685882625 c:\users\жесткий п\desktop\лаба 1\lab_1\text.h + + +1685882527 source:c:\users\жесткий п\desktop\лаба 1\lab_1\text.cpp + + + "text.h" + +1685972025 source:c:\users\жесткий п\desktop\лаба 1\lab_1\svg.cpp + + + + + + "svg.h" + +1685972059 c:\users\жесткий п\desktop\лаба 1\lab_1\svg.h + + + + diff --git a/Lab_1.layout b/Lab_1.layout new file mode 100644 index 0000000..ea80b81 --- /dev/null +++ b/Lab_1.layout @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/histogram.cpp b/histogram.cpp index 0eacf96..861dc46 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -4,8 +4,9 @@ #include "histogram.h" using namespace std; -void find_minmax(const vector &numbers, double &min, double &max) -{ +bool find_minmax(const vector &numbers, double &min, double &max){ + if (numbers.empty())return false; + else{ max = numbers[0]; min = numbers[1]; for (double x: numbers) @@ -19,10 +20,9 @@ void find_minmax(const vector &numbers, double &min, double &max) max = x; } } - return; - + return true ; +} } - vector make_histogram (vector numbers, size_t bin_count) { @@ -52,4 +52,14 @@ vector make_histogram (vector numbers, size_t bin_count) return bins; } +vector make_borders(const vector& numbers, size_t bin_count){ + double min, max; + find_minmax(numbers, min, max); + double diff = (max - min) / bin_count; + std::vector borders(bin_count - 1); + for (size_t i = 0; i <= bin_count - 2; i++){ + borders[i] = min + (i + 1) * diff; + } + return borders; +} diff --git a/histogram.h b/histogram.h index ed9e7b4..90bbcb7 100644 --- a/histogram.h +++ b/histogram.h @@ -5,4 +5,7 @@ std::vector make_histogram(const std::vector numbers, size_t bin_count); +std::vector +make_borders(const std::vector& numbers, size_t bin_count); + #endif // HISTOGRAM_H_INCLUDED diff --git a/main.cpp b/main.cpp index 0095eec..77ae553 100644 --- a/main.cpp +++ b/main.cpp @@ -4,6 +4,7 @@ #include #include "histogram.h" #include "text.h" +#include "svg.h" using namespace std; struct Input { @@ -32,7 +33,8 @@ int main() { auto in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_text(bins, in.bin_count); + auto borders = make_borders(in.numbers, in.bin_count); + show_histogram_svg(bins, borders, in.bin_count); getch(); return 0; } diff --git a/main.exe b/main.exe new file mode 100644 index 0000000000000000000000000000000000000000..e84de919b566b1a30c6b7c84958886b34b83fd50 GIT binary patch literal 86678 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 aOngqhc%VQJyY}-}2SQc&TuSsiivIyxhTxw7 literal 0 HcmV?d00001 diff --git a/svg.cpp b/svg.cpp index fc28ea5..348e9e4 100644 --- a/svg.cpp +++ b/svg.cpp @@ -19,6 +19,7 @@ svg_begin(double width, double height) cout << "xmlns='http://www.w3.org/2000/svg'>\n"; } + void svg_end() { @@ -41,7 +42,7 @@ svg_rect(double x, double y, double width, double height, string stroke = "black void -show_histogram_svg(const vector& bins) +show_histogram_svg(const vector& bins, const vector& borders, size_t bin_count) { const auto IMAGE_WIDTH = 400; const auto IMAGE_HEIGHT = 300; @@ -50,12 +51,14 @@ show_histogram_svg(const vector& bins) const auto TEXT_WIDTH = 50; const auto BIN_HEIGHT = 30; const auto BLOCK_WIDTH = 10; - const auto BLACK = "black"; - const auto RED = "red"; + const auto COLOUR1 = "black"; + const auto COLOUR2 = "green"; const auto MAX_WIDTH = IMAGE_WIDTH-TEXT_WIDTH; - + size_t border = 0; + size_t number_of_blocks; svg_begin(IMAGE_WIDTH,IMAGE_HEIGHT); + size_t max_bin = *max_element(bins.begin(), bins.end()); double top = 0; double max_count = bins[0]; @@ -69,10 +72,20 @@ show_histogram_svg(const vector& bins) for (size_t bin : bins) { - double bin_width = (MAX_WIDTH)*(bin/max_count); + number_of_blocks = bin; + if ((max_bin * BLOCK_WIDTH) > (IMAGE_WIDTH - TEXT_WIDTH)){ + number_of_blocks = ((IMAGE_WIDTH - TEXT_WIDTH)/10) * (static_cast(bin) / max_bin); + } + const double bin_width = BLOCK_WIDTH * number_of_blocks; svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bin)); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, BLACK, RED); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, COLOUR1, COLOUR2); top += BIN_HEIGHT; + if (border < bin_count - 1){ + top += BIN_HEIGHT; + svg_text(TEXT_LEFT / 2, top + TEXT_BASELINE , to_string(borders[border])); + border += 1; + top += BIN_HEIGHT; + } } svg_end(); diff --git a/svg.h b/svg.h index 91d53ba..38ceecf 100644 --- a/svg.h +++ b/svg.h @@ -1,9 +1,11 @@ #ifndef SVG_H_INCLUDED #define SVG_H_INCLUDED #include +#include +#include void -show_histogram_svg(const std::vector& bins); +show_histogram_svg(const std::vector& bins, const std::vector& borders, size_t bin_count); #endif // SVG_H_INCLUDED diff --git a/unittest.cbp b/unittest.cbp new file mode 100644 index 0000000..5a9c8c0 --- /dev/null +++ b/unittest.cbp @@ -0,0 +1,42 @@ + + + + + + diff --git a/unittest.cpp b/unittest.cpp index 7fb242b..7ce6d54 100644 --- a/unittest.cpp +++ b/unittest.cpp @@ -25,5 +25,6 @@ TEST_CASE("vector of the same elements"){ find_minmax({3,3,3}, min, max); CHECK(min == 3); CHECK(max == 3); + } diff --git a/unittest.depend b/unittest.depend new file mode 100644 index 0000000..ab1f114 --- /dev/null +++ b/unittest.depend @@ -0,0 +1,61 @@ +# depslib dependency file v1.0 +1685890713 source:c:\users\жесткий п\desktop\лаба 1\lab_1\unittest.cpp + "doctest.h" + "histogram_internal.h" + +1685890386 c:\users\жесткий п\desktop\лаба 1\lab_1\doctest.h + + + + + + + "doctest_fwd.h" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1685888788 c:\users\жесткий п\desktop\лаба 1\lab_1\histogram_internal.h + + +1685970224 source:c:\users\жесткий п\desktop\лаба 1\lab_1\histogram.cpp + + + "histogram.h" + +1685968632 c:\users\жесткий п\desktop\лаба 1\lab_1\histogram.h + + diff --git a/unittest.layout b/unittest.layout new file mode 100644 index 0000000..3f14a73 --- /dev/null +++ b/unittest.layout @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + +