diff --git a/bin/Debug/lab01.exe b/bin/Debug/lab01.exe index d801e2a..9910120 100644 Binary files a/bin/Debug/lab01.exe and b/bin/Debug/lab01.exe differ diff --git a/histogram.cpp b/histogram.cpp index ca354e8..659cddb 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -18,6 +18,9 @@ Input input_data() { std::cerr << "Enter bin count: "; std::cin >> in.bin_count; + std::cerr << "Enter text width : "; + std::cin >> in.width; + return in; } diff --git a/histogram.h b/histogram.h index 77e9998..89afcdc 100644 --- a/histogram.h +++ b/histogram.h @@ -5,6 +5,7 @@ struct Input { std::vector numbers; size_t bin_count{}; + int width; }; Input input_data(); diff --git a/histogram_internal.h b/histogram_internal.h index bd511cf..588ac92 100644 --- a/histogram_internal.h +++ b/histogram_internal.h @@ -1,6 +1,5 @@ -#ifndef HISTOGRAM_INTERNAL_H_INCLUDED -#define HISTOGRAM_INTERNAL_H_INCLUDED +#pragma once +#include - -#endif // HISTOGRAM_INTERNAL_H_INCLUDED +void find_minmax(const std::vector& numbers, double& min, double& max); diff --git a/lab01.depend b/lab01.depend index 282cd9f..4c05552 100644 --- a/lab01.depend +++ b/lab01.depend @@ -6,3 +6,65 @@ +1746176756 source:c:\users\gajda\onedrive\Рабочий стол\lab03\alex\project\main.cpp + "histogram.h" + "text.h" + "svg.h" + +1746177628 source:c:\users\gajda\onedrive\Рабочий стол\lab03\alex\project\histogram.cpp + "histogram.h" + + + +1746177812 c:\users\gajda\onedrive\Рабочий стол\lab03\alex\project\histogram.h + + +1746175468 source:c:\users\gajda\onedrive\Рабочий стол\lab03\alex\project\svg.cpp + "svg.h" + "text.h" + +1746175468 c:\users\gajda\onedrive\Рабочий стол\lab03\alex\project\svg.h + + + +1746175747 c:\users\gajda\onedrive\Рабочий стол\lab03\alex\project\text.h + + + +1746175715 source:c:\users\gajda\onedrive\Рабочий стол\lab03\alex\project\text.cpp + "text.h" + +1749169373 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\main.cpp + "histogram.h" + "svg.h" + +1749169080 c:\mpei\programming\c++ 2sem\lab03\alex\project\histogram.h + + +1749162416 c:\mpei\programming\c++ 2sem\lab03\alex\project\text.h + + + +1749168172 c:\mpei\programming\c++ 2sem\lab03\alex\project\svg.h + + + +1749169130 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\histogram.cpp + "histogram.h" + + + +1749170885 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\svg.cpp + "svg.h" + "text.h" + +1749162254 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\text.cpp + "text.h" + +1749162761 source:c:\mpei\programming\c++ 2sem\lab03\alex\project\prot.cpp + "prot.h" + +1749162761 c:\mpei\programming\c++ 2sem\lab03\alex\project\prot.h + + + diff --git a/lab01.layout b/lab01.layout index ac99591..377667c 100644 --- a/lab01.layout +++ b/lab01.layout @@ -2,9 +2,9 @@ - + - + diff --git a/main.cpp b/main.cpp index d78849b..3f8468f 100644 --- a/main.cpp +++ b/main.cpp @@ -1,8 +1,10 @@ #include "histogram.h" +#include "svg.h" int main() { auto in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); - show_histogram_text(bins); + show_histogram_svg(bins, in.width); return 0; } +//h hjhbhbjbh diff --git a/obj/Debug/main.o b/obj/Debug/main.o index 1be6c46..f1587bd 100644 Binary files a/obj/Debug/main.o and b/obj/Debug/main.o differ diff --git a/svg.cpp b/svg.cpp new file mode 100644 index 0000000..d13915c --- /dev/null +++ b/svg.cpp @@ -0,0 +1,44 @@ +#include "svg.h" +#include "text.h" +void svg_begin(double width, double height) { + std::cout << "\n"; + std::cout << "\n"; +} + +void svg_end() { + std::cout << "\n"; +} +void svg_text(double left, double baseline, std::string text) { + std::cout << "" << text<<""; +} + +void show_histogram_svg(const std::vector& bins, int TEXT_WIDTH) { + const auto IMAGE_WIDTH = 400; + const auto IMAGE_HEIGHT = 300; + const auto TEXT_LEFT = 20; + const auto TEXT_BASELINE = 20; + const auto BIN_HEIGHT = 30; + const auto TEXT_GAP = 10; + + svg_begin(IMAGE_WIDTH, IMAGE_HEIGHT); + + size_t maxCount = maxBin(bins); + double top = 0; + for (size_t bin : bins) { + const double bin_width = (IMAGE_WIDTH - TEXT_WIDTH - TEXT_GAP) * (bin / double(maxCount)); + svg_text(TEXT_LEFT, top + TEXT_BASELINE, std::to_string(bin)); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT,"red","#006B3C"); + top += BIN_HEIGHT; + } + svg_end(); +} + +void svg_rect(double x, double y, double width, double height,std::string stroke="black", std::string fills="black"){ + std::cout << ""; +} + + diff --git a/svg.h b/svg.h new file mode 100644 index 0000000..1cf2d0c --- /dev/null +++ b/svg.h @@ -0,0 +1,12 @@ +#ifndef SVG_H_INCLUDED +#define SVG_H_INCLUDED + +#include +#include +void svg_begin(double width, double height); +void svg_end(); +void show_histogram_svg(const std::vector& bins, int width); +void svg_text(double left, double baseline, std::string text); +void svg_rect(double x, double y, double width, double height,std::string stroke, std::string fills); + +#endif // SVG_H_INCLUDED diff --git a/text.cpp b/text.cpp new file mode 100644 index 0000000..616d234 --- /dev/null +++ b/text.cpp @@ -0,0 +1,41 @@ +#include "text.h" + +void show_histogram_text(std::vector bins , size_t bin_count) { + size_t maxCount = maxBin(bins); + size_t count_stars; + for (size_t i = 0; i < bin_count; i++) { + + if (bins[i] < 100) { + std::cout << " "; + } + if (bins[i] < 10) { + std::cout << " "; + } + + std::cout << bins[i]; + std::cout << "|"; + + if (maxCount > MAX_ASTERISK) { + count_stars = MAX_ASTERISK * (static_cast(bins[i]) / maxCount); + } + else { + count_stars = bins[i]; + } + for (size_t i2 = 0; i2 < count_stars; i2++) { + std::cout << "*"; + } + std::cout << std::endl; + + + } +} + +const size_t maxBin(std::vector bins) { + size_t max = bins[0]; + for (int i = 1; i < bins.size(); i++) { + if (max < bins[i]) { + max = bins[i]; + } + } + return max; +} diff --git a/text.h b/text.h new file mode 100644 index 0000000..d3dd6b5 --- /dev/null +++ b/text.h @@ -0,0 +1,12 @@ +#ifndef TEXT_H_INCLUDED +#define TEXT_H_INCLUDED + + +#include +#include + +const size_t SCREEN_WIDTH = 80; +const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; +void show_histogram_text(std::vector bins , size_t bin_count); +const size_t maxBin(std::vector bins); +#endif // TEXT_H_INCLUDED diff --git a/unittest.cpp b/unittest.cpp index a9ba7e5..a8a7dee 100644 --- a/unittest.cpp +++ b/unittest.cpp @@ -10,3 +10,36 @@ TEST_CASE("distinct positive numbers") { CHECK(min == 1); CHECK(max == 2); } + +TEST_CASE("empty vector") { + double min = 0; + double max = 0; + find_minmax({}, min, max); + CHECK(min == std::numeric_limits::max()); + CHECK(max == std::numeric_limits::lowest()); +} + +TEST_CASE("single element vector") { + double min = 0; + double max = 0; + find_minmax({42}, min, max); + CHECK(min == 42); + CHECK(max == 42); +} + +TEST_CASE("negative numbers") { + double min = 0; + double max = 0; + find_minmax({-5, -1, -3}, min, max); + CHECK(min == -5); + CHECK(max == -1); +} + +TEST_CASE("identical elements") { + double min = 0; + double max = 0; + find_minmax({7, 7, 7}, min, max); + CHECK(min == 7); + CHECK(max == 7); +} +//wewger