diff --git a/Lab1.cbp b/Lab1.cbp
index e54e0bb..031adb2 100644
--- a/Lab1.cbp
+++ b/Lab1.cbp
@@ -47,6 +47,8 @@
+
+
diff --git a/histogram.cpp b/histogram.cpp
index d9a550d..b8dd626 100644
--- a/histogram.cpp
+++ b/histogram.cpp
@@ -27,11 +27,12 @@ std::vector make_histogram(std::vector numbers, size_t bin_count
bool find_minmax(std::vector numbers, double& min, double& max) {
- min = numbers[0];
- max = numbers[0];
if(numbers.size()==0){
return false;
}
+ min = numbers[0];
+ max = numbers[0];
+
for (double number : numbers) {
if (min > number) {
min = number;
diff --git a/main.cpp b/main.cpp
index fc52f27..2ed1e79 100644
--- a/main.cpp
+++ b/main.cpp
@@ -2,12 +2,13 @@ using namespace std;
#include "histogram.h"
#include "text.h"
#include "svg.h"
+#include "prot.h"
-#include
struct Input {
std::vector numbers;
size_t bin_count{};
+ int width;
};
Input input_data();
@@ -17,10 +18,13 @@ int main()
Input in = input_data();
std::vector bins = make_histogram(in.numbers, in.bin_count);
- show_histogram_svg(bins);
+ show_histogram_svg(bins, in.width);
+
+
return 0;
}
Input input_data() {
+
Input input_struct;
size_t countOfNumbers;
cerr << "Input your count of numbers:\n";
@@ -35,6 +39,10 @@ Input input_data() {
cerr << endl;
cerr << "Input bin count:\n";
cin >> input_struct.bin_count;
+
+ input_struct.width = input_width(countOfNumbers);
+
+
return input_struct;
}
diff --git a/prot.cpp b/prot.cpp
new file mode 100644
index 0000000..0730946
--- /dev/null
+++ b/prot.cpp
@@ -0,0 +1,25 @@
+#include "prot.h"
+int input_width(int countOfNumbers){
+ const int BLOCK_WIDTH = 10;
+ bool check = false;
+ int width =0;
+ while(check == false){
+ std::cout << "Input width:"<> width;
+ if(width < 70){
+ std::cout << "width less 70" << std::endl;
+ }
+ else if(width > 800){
+ std::cout << "width more 800" << std::endl;
+ }
+ else if(width < countOfNumbers*BLOCK_WIDTH / 3.0){
+ std::cout << "менее трети количества чисел, умноженных на ширину блока " << std::endl;
+ }
+ else{
+ check = true;
+ }
+
+ }
+ return width;
+
+}
diff --git a/prot.h b/prot.h
new file mode 100644
index 0000000..e646aa6
--- /dev/null
+++ b/prot.h
@@ -0,0 +1,8 @@
+#ifndef PROT_H_INCLUDED
+#define PROT_H_INCLUDED
+#include
+#include
+
+int input_width(int countOfNumbers);
+
+#endif // PROT_H_INCLUDED
diff --git a/svg.cpp b/svg.cpp
index 3a67cec..98ab11b 100644
--- a/svg.cpp
+++ b/svg.cpp
@@ -13,14 +13,13 @@ void svg_end() {
std::cout << "\n";
}
-void show_histogram_svg(const std::vector& bins) {
+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 TEXT_WIDTH = 50;
const auto BIN_HEIGHT = 30;
- const auto BLOCK_WIDTH = 10;
+
svg_begin(400, 300);
size_t maxCount = maxBin(bins);
diff --git a/svg.h b/svg.h
index c558da8..1cf2d0c 100644
--- a/svg.h
+++ b/svg.h
@@ -5,7 +5,7 @@
#include
void svg_begin(double width, double height);
void svg_end();
-void show_histogram_svg(const std::vector& bins);
+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);
diff --git a/unittest.cpp b/unittest.cpp
new file mode 100644
index 0000000..0c09008
--- /dev/null
+++ b/unittest.cpp
@@ -0,0 +1,44 @@
+#define DOCTEST_CONFIG_NO_MULTITHREADING
+#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+#include "doctest.h"
+#include "histogram_internal.h"
+
+TEST_CASE("distinct positive numbers") {
+ double min = 0;
+ double max = 0;
+ find_minmax({1, 2}, min, max);
+ CHECK(min == 1);
+ CHECK(max == 2);
+
+}
+TEST_CASE("empty vector") {
+ std::vector numbers{};
+ double min=0, max=0;
+ CHECK(!find_minmax(numbers, min, max));
+}
+TEST_CASE("1 val") {
+ std::vector numbers{1};
+ double min=0, max=0;
+ find_minmax(numbers, min, max);
+ CHECK(min == 1);
+ CHECK(max == 1);
+}
+TEST_CASE("- val") {
+ std::vector numbers{-1,-2};
+ double min=0, max=0;
+ find_minmax(numbers, min, max);
+ CHECK(min == -2);
+ CHECK(max == -1);
+}
+TEST_CASE("same val") {
+ std::vector numbers{2,2};
+ double min=0, max=0;
+ find_minmax(numbers, min, max);
+ CHECK(min == 2);
+ CHECK(max == 2);
+}
+TEST_CASE("check prot1") {
+ check(input_width(int countOfNumbers, 10));
+
+}
+