From ac9a9db00678cfaf9c4fb5e08454b275b7191070 Mon Sep 17 00:00:00 2001 From: BiriukovaAlS Date: Fri, 2 Jun 2023 18:00:47 +0300 Subject: [PATCH] lab344 --- histogram.cpp | 57 +++++++++++++++++++++++++++++ histogram.h | 8 +++++ histogram_internal.h | 7 ++++ lab344.cbp | 48 +++++++++++++++++++++++++ main.cpp | 86 ++++++++++++++++++++++++++++++++++++++++++++ svg.cpp | 82 ++++++++++++++++++++++++++++++++++++++++++ svg.h | 7 ++++ text.cpp | 41 +++++++++++++++++++++ text.h | 7 ++++ 9 files changed, 343 insertions(+) create mode 100644 histogram.cpp create mode 100644 histogram.h create mode 100644 histogram_internal.h create mode 100644 lab344.cbp create mode 100644 main.cpp create mode 100644 svg.cpp create mode 100644 svg.h create mode 100644 text.cpp create mode 100644 text.h diff --git a/histogram.cpp b/histogram.cpp new file mode 100644 index 0000000..eb109b9 --- /dev/null +++ b/histogram.cpp @@ -0,0 +1,57 @@ +#include "histogram.h" +#include +#include "histogram_internal.h" + +using namespace std; +bool find_minmax(const vector& numbers, double& minp, double& maxp) +{ + if (numbers.size() == 0) + return false; + + minp = numbers[0]; + for (auto i = 0; imaxp) + { + maxp = numbers[i]; + } + } + return true; +} + +vector make_histogram (const vector& numbers, size_t kol_kor) +{ + vectorB(kol_kor); + size_t max_count; + double maxp, minp; + find_minmax(numbers, minp, maxp); + double step = (maxp-minp)/(kol_kor); + + for (size_t i=0; i=(minp+j*step))&&(numbers[i]<(minp+(j+1)*step))) + { + B[j]++; + break; + } + } + } + + for (size_t i=0; i + +std::vector +make_histogram(const std::vector& numbers, size_t kol_kor); + +#endif // HISTOGRAM_H_INCLUDED diff --git a/histogram_internal.h b/histogram_internal.h new file mode 100644 index 0000000..80b19d2 --- /dev/null +++ b/histogram_internal.h @@ -0,0 +1,7 @@ +#ifndef HISTOGRAM_INTERNAL_H_INCLUDED +#define HISTOGRAM_INTERNAL_H_INCLUDED +#include + +bool find_minmax(const std::vector& numbers, double& minp, double& maxp); + +#endif // HISTOGRAM_INTERNAL_H_INCLUDED diff --git a/lab344.cbp b/lab344.cbp new file mode 100644 index 0000000..1143e0f --- /dev/null +++ b/lab344.cbp @@ -0,0 +1,48 @@ + + + + + + diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..d9ed49c --- /dev/null +++ b/main.cpp @@ -0,0 +1,86 @@ +#define DOCTEST_CONFIG_NO_MULTITHREADING +#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN +#include "doctest.h" +#include "histogram_internal.h" + + +/* +TEST_CASE("distinct positive numbers") +{ + double minp = 0; + double maxp = 0; + std::vectornumbers{1,2,3,4,5}; + CHECK(numbers.size() !=0 ); + CHECK(numbers.size() !=1 ); + find_minmax(numbers, minp, maxp); + CHECK(minp == 1); + CHECK(maxp == 5); + CHECK(minp!=maxp); +} + +TEST_CASE("distinct positive numbers") +{ + double minp = 0; + double maxp = 0; + std::vectornumbers{3,4,4,4,4}; + find_minmax(numbers, minp, maxp); + CHECK(minp == 1); + CHECK(maxp == 5); +} + +TEST_CASE("emptyA") +{ + std::vectornumbers{1,2,3,4}; + double min = 0; + double max = 0; + find_minmax(numbers, min, max); + CHECK(numbers.size() !=0 ); +} + +TEST_CASE("min") +{ + std::vectornumbers{1,2,3,4}; + double min = 0; + double max = 0; + find_minmax(numbers, min, max); + CHECK(min == 1); +} + +TEST_CASE("max") +{ + std::vectornumbers{1,2,3,4}; + double min = 0; + double max = 0; + find_minmax(numbers, min, max); + CHECK(max == 4); +} + +*/ +TEST_CASE("1A") +{ + std::vectornumbers{1,2,3,4}; + double min = 0; + double max = 0; + find_minmax(numbers, min, max); + CHECK(numbers.size() !=1 ); +} + +/* +TEST_CASE("same") +{ + std::vectornumbers{1,1,1,1}; + std::vectorB{1,1,1,1}; + double min = 0; + double max = 0; + find_minmax(numbers, min, max); + CHECK(numbers == B); +} + +TEST_CASE("emt") +{ + std::vectornumbers{}; + double minp = 0; + double maxp = 0; + CHECK(find_minmax(numbers,minp,maxp)==false); +} +*/ diff --git a/svg.cpp b/svg.cpp new file mode 100644 index 0000000..cedbca0 --- /dev/null +++ b/svg.cpp @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include +#include "svg.h" +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 +svg_rect(double x, double y, double width, double height, string stroke, string fill) +{ + cout << ""; + +} + +void +show_histogram_svg(const vector& B, size_t& number_count) +{ + auto IMAGE_WIDTH=0; + const auto BLOCK_WIDTH = 10; + cerr << "Enter IMAGE_WIDTH:"; + cin >> IMAGE_WIDTH; + + while (IMAGE_WIDTH<70 || IMAGE_WIDTH>800 || IMAGE_WIDTH<(number_count/3.0*BLOCK_WIDTH)) + { + cout<<"Error, incorrect IMAGE_WIDTH, please, re-enter\n"; + cerr << "Enter IMAGE_WIDTH:"; + cin >> IMAGE_WIDTH; + } + + 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 MAX_WIDTH = IMAGE_WIDTH-TEXT_WIDTH; + + svg_begin(IMAGE_WIDTH,IMAGE_HEIGHT); + + double top = 0; + double max_count = B[0]; + for (size_t i = 0; i < B.size(); i++) + { + if (max_count +void +show_histogram_svg(const std::vector& B, size_t &number_count); + +#endif // SVG_H_INCLUDED diff --git a/text.cpp b/text.cpp new file mode 100644 index 0000000..fb065ee --- /dev/null +++ b/text.cpp @@ -0,0 +1,41 @@ +#include "text.h" +#include +#include + +using namespace std; +void show_histogram_text(vectorB, size_t kol_kor) +{ + + const size_t SCREEN_WIDTH = 80; + const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; + int max_count, count,j, height; + for (size_t i=0; i MAX_ASTERISK) + { + count = B[i]; + height = MAX_ASTERISK * (static_cast(count) / max_count); + } + + else + { + height = B[i]; + } + + for (j = 0; j < height; j++) + { + cout << "*"; + } + cout << endl; + } + return; +} diff --git a/text.h b/text.h new file mode 100644 index 0000000..0f74689 --- /dev/null +++ b/text.h @@ -0,0 +1,7 @@ +#ifndef TEXT_H_INCLUDED +#define TEXT_H_INCLUDED +#include + +void show_histogram_text(std::vectorB, size_t kol_kor, size_t& IMAGE_WIDTH); + +#endif // TEXT_H_INCLUDED