diff --git a/histogram.cpp b/histogram.cpp index 51b6553..31e0334 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -42,6 +42,9 @@ vector make_histogram(const vector& numbers, size_t bin_count) { bins[i] = height; } } + + + return bins; } diff --git a/histogram_internal.h b/histogram_internal.h index 5bb2d62..34f2964 100644 --- a/histogram_internal.h +++ b/histogram_internal.h @@ -1,4 +1,5 @@ #pragma once #include -bool find_minmax(const std::vector& numbers, double& min, double& max); \ No newline at end of file +bool find_minmax(const std::vector& numbers, double& min, double& max); +int color(int bin, int max_count); \ No newline at end of file diff --git a/svg.cpp b/svg.cpp index ac781dc..3c26726 100644 --- a/svg.cpp +++ b/svg.cpp @@ -19,6 +19,10 @@ svg_end() { cout << "\n"; } +int color(int bin, int max_count) { + int color; + return color = round((10 - (bin * 9) / max_count)); +} void svg_text(double left, double baseline, string text) { @@ -26,7 +30,7 @@ svg_text(double left, double baseline, string text) { } void svg_rect(double x, double y, double width, double height, string stroke, string fill) { - cout << "" << ""; + cout << "" << ""; } void show_histogram_svg(const vector& bins) { @@ -38,16 +42,20 @@ void show_histogram_svg(const vector& bins) { const auto BIN_HEIGHT = 30; const auto BLOCK_WIDTH = 10; + svg_begin(400, 300); - //svg_text(20, 20, to_string(bins[0])); - //svg_rect(50, 0, bins[0] * 10, 30); double top = 0; + double max_count = bins[0]; + for (size_t i = 0; i < bins.size(); i++) { + if (bins[i] > max_count) + max_count = bins[i]; + } for (size_t bin : bins) { - const double bin_width = BLOCK_WIDTH * bin; + int temp_color = color(bin, max_count); + const double bin_width = (IMAGE_WIDTH - TEXT_WIDTH) * (bin / max_count); svg_text(TEXT_LEFT, top + TEXT_BASELINE, to_string(bin)); - svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "red", "#ffeeee"); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, to_string(temp_color), to_string(temp_color)); top += BIN_HEIGHT; } - svg_end(); -} +} \ No newline at end of file diff --git a/tests.cpp b/tests.cpp new file mode 100644 index 0000000..2286488 --- /dev/null +++ b/tests.cpp @@ -0,0 +1,15 @@ +#include "histogram_internal.h" +#include +#include +#include + +using namespace std; + + +int color(int bin, int max_count) { + if (max_count == 0) { + return 0; + } + int color; + return color = round((10 - (bin * 9) / max_count)); +} \ No newline at end of file diff --git a/unittest.cpp b/unittest.cpp index 3b3f030..6239ae2 100644 --- a/unittest.cpp +++ b/unittest.cpp @@ -3,7 +3,7 @@ #include "doctest.h" #include "histogram_internal.h" -TEST_CASE("distinct positive numbers") { +/*TEST_CASE("distinct positive numbers") { double min = 0; double max = 0; find_minmax({ 1, 2 }, min, max); @@ -16,4 +16,11 @@ TEST_CASE("distinct positive numbers") { find_minmax({ 2, 2, 2, 2 }, min, max); CHECK(min == max); +}*/ + +TEST_CASE("color") { + int temp; + temp = color(1, 0); + CHECK(temp == 0); } + diff --git a/unittest.vcxproj b/unittest.vcxproj index 7da7e01..2450792 100644 --- a/unittest.vcxproj +++ b/unittest.vcxproj @@ -128,6 +128,7 @@ + diff --git a/unittest.vcxproj.filters b/unittest.vcxproj.filters index 7e13cc7..3f25027 100644 --- a/unittest.vcxproj.filters +++ b/unittest.vcxproj.filters @@ -21,6 +21,9 @@ Исходные файлы + + Исходные файлы +