From 5113fdf3b47bd1652ffeb1281236f367289fde3a Mon Sep 17 00:00:00 2001 From: MakhnovGA Date: Mon, 22 May 2023 14:01:07 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=BE=D1=82=D0=BE=D0=BA=20cin=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=BE=D1=87=D0=BD=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=82=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- histogram.cpp | 77 ++++++++++++++++++++++---------------------- histogram.h | 1 - histogram_internal.h | 4 +-- lab_01.depend | 11 ++++--- lab_01.layout | 30 ++++++++--------- main.cpp | 16 +++++---- svg.cpp | 2 +- unittest.cpp | 47 ++++++++++++++------------- unittest.depend | 12 +++---- unittest.layout | 12 +++---- 10 files changed, 106 insertions(+), 106 deletions(-) diff --git a/histogram.cpp b/histogram.cpp index 009e348..01ecc45 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -6,53 +6,54 @@ #include "histogram_internal.h" using namespace std; -void +bool find_minmax(vector numbers, double &min, double &max) { - min = numbers[0]; - max = numbers[0]; - for (size_t i = 1; i < numbers.size(); i++) { - if (min > numbers[i]) - min = numbers[i]; - if (max < numbers[i]) - max = numbers[i]; + + bool notEmpty = true; + if (numbers.size() == 0 || numbers.size() == 1) + notEmpty = false; + else{ + min = numbers[0]; + max = numbers[0]; + for (size_t i = 1; i < numbers.size(); i++) { + if (min > numbers[i]) + min = numbers[i]; + if (max < numbers[i]) + max = numbers[i]; + } } + return notEmpty; } vector make_histogramm(vectornumbers, size_t bin_count){ double min, max; - find_minmax(numbers, min, max); - double binSize = (max - min) / bin_count; - vector bins(bin_count); - for (size_t i = 0; i < numbers.size(); i++) { - bool found = false; - for (size_t j = 0; (j <= bin_count - 1) && !found; j++) { - auto lo = min + j * binSize; - auto hi = min + (j + 1) * binSize; - if ((numbers[i] >= lo) && (numbers[i] < hi)) { - bins[j]++; - found = true; + bool haveElements = find_minmax(numbers, min, max); + if (haveElements){ + double binSize = (max - min) / bin_count; + vector bins(bin_count); + for (size_t i = 0; i < numbers.size(); i++) { + bool found = false; + for (size_t j = 0; (j <= bin_count - 1) && !found; j++) { + auto lo = min + j * binSize; + auto hi = min + (j + 1) * binSize; + if ((numbers[i] >= lo) && (numbers[i] < hi)) { + bins[j]++; + found = true; + } } + if (!found) + bins[bin_count - 1]++; } - if (!found) - bins[bin_count - 1]++; - } - /*int max_count = bins[0]; - for (size_t i = 0; i < bin_count; i++) { - if (bins[i] > max_count) - max_count = bins[i]; + return bins; } - if (max_count > 76) { - for (size_t i = 0; i < bin_count; i++) { - int count = bins[i]; - size_t height = 76 * (static_cast(count) / max_count); - bins[i] = height; - } - }*/ - return bins; + else + cerr << "Empty massive of numbers"; } - -void check_interval(size_t &interval){ +bool check_interval(size_t interval){ + bool need; if (interval > 9 || interval < 2) - interval = 0; - return; + need = false; + else + need = true; + return need; } diff --git a/histogram.h b/histogram.h index 05a9838..0129256 100644 --- a/histogram.h +++ b/histogram.h @@ -5,6 +5,5 @@ std::vector make_histogramm(std::vector numbers, size_t bin_count); -void check_interval(size_t &interval); #endif // HISTOGRAM_H_INCLUDED diff --git a/histogram_internal.h b/histogram_internal.h index 224cd54..538fba9 100644 --- a/histogram_internal.h +++ b/histogram_internal.h @@ -2,6 +2,6 @@ #define HISTOGRAM_INTERNAL_H_INCLUDED #include -void find_minmax(std::vector numbers, double &min, double &max); -void check_interval(size_t &interval); +bool find_minmax(std::vector numbers, double &min, double &max); +bool check_interval(size_t interval); #endif // HISTOGRAM_INTERNAL_H_INCLUDED diff --git a/lab_01.depend b/lab_01.depend index e85aaef..1b59b37 100644 --- a/lab_01.depend +++ b/lab_01.depend @@ -1,5 +1,5 @@ # depslib dependency file v1.0 -1682183565 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram.cpp +1682340368 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram.cpp @@ -7,10 +7,10 @@ "histogram.h" "histogram_internal.h" -1682184342 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram.h +1682341619 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram.h -1682184846 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\main.cpp +1682338657 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\main.cpp @@ -18,6 +18,7 @@ "histogram.h" "text.h" "svg.h" + "histogram_internal.h" 1681931523 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\text.h @@ -29,12 +30,12 @@ "text.h" -1682183685 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram_internal.h +1682339360 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram_internal.h 1682183926 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\svg.h -1682189679 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\svg.cpp +1682337971 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\svg.cpp diff --git a/lab_01.layout b/lab_01.layout index c3984ee..d425fe2 100644 --- a/lab_01.layout +++ b/lab_01.layout @@ -2,44 +2,44 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + diff --git a/main.cpp b/main.cpp index 32df211..27c1d23 100644 --- a/main.cpp +++ b/main.cpp @@ -5,6 +5,7 @@ #include "histogram.h" #include "text.h" #include "svg.h" +#include "histogram_internal.h" using namespace std; struct Input { @@ -14,29 +15,30 @@ struct Input { }; Input -input_data(){ +input_data(istream &tin){ cerr << "Input numbers count: "; size_t number_count; - cin >> number_count; + tin >> number_count; Input in; in.numbers.resize(number_count); cerr << "Input numbers: "; for (size_t i = 0; i < number_count; i++) { - cin >> in.numbers[i]; + tin >> in.numbers[i]; } cerr << "Input bin count: "; - cin >> in.bin_count; + tin >> in.bin_count; return in; } int main() { - Input in = input_data(); + Input in = input_data(cin); auto bins = make_histogramm(in.numbers, in.bin_count); size_t interval; cerr << "Input interval: "; cin >> interval; - check_interval(interval); - if (interval == 0){ + bool inRange; + inRange = check_interval(interval); + if (!inRange){ cerr << "ERROR"; return 0; } diff --git a/svg.cpp b/svg.cpp index 31604f3..ad09db9 100644 --- a/svg.cpp +++ b/svg.cpp @@ -49,7 +49,7 @@ show_histogram_svg(const vector& bins, size_t interval) { for (size_t bin : bins) { 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, "blue", "#FF00FF"); + svg_rect(TEXT_WIDTH, top, bin_width, BIN_HEIGHT, "green", "#FF00FF"); top += BIN_HEIGHT; } top+=BIN_HEIGHT; diff --git a/unittest.cpp b/unittest.cpp index 69871fd..43e0856 100644 --- a/unittest.cpp +++ b/unittest.cpp @@ -4,36 +4,37 @@ #include "histogram_internal.h" #include #include -/*TEST_CASE("distinct positive numbers") { +TEST_CASE("distinct positive numbers") { double min = 0; double max = 0; - std::vectorv{1}; - CHECK(v.size() != 0); - CHECK(v.size() != 1); - find_minmax(v, min, max); + std::vectorv{1, 2}; + bool haveElements = find_minmax(v, min, max); + CHECK(haveElements); CHECK(min == 1); CHECK(max == 2); CHECK(min != max); -}*/ - -TEST_CASE("interval check"){ - size_t interval = 3; - check_interval(interval); - CHECK(interval != 0); - interval = 10; - check_interval(interval); - CHECK(interval == 0); +} +TEST_CASE("EMPTY MASSIVE OR 1 ELEMENT IN MASSIVE"){ + double min = 0; + double max = 0; + std::vectorv{}; + bool haveElements = find_minmax(v, min, max); + CHECK(!haveElements); } -/*#define DOCTEST_CONFIG_NO_MULTITHREADING -#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN -#include "doctest.h" -#include "histogram_internal.h" -#include -#include -TEST_CASE("interval check"){ +/*TEST_CASE("interval check"){ size_t interval = 3; - bool flag = check_interval(interval); - CHECK(flag == true); + bool inRange; + inRange = check_interval(interval); + CHECK(inRange); + inerval = 1 + inRange = check_interval(interval); + CHECK(!inRange); + interval = 2 + inRange = check_interval(interval); + CHECK(inRange); + interval = 9 + inRange = check_interval(interval); + CHECK(inRange); } */ diff --git a/unittest.depend b/unittest.depend index 0420178..92fd5f5 100644 --- a/unittest.depend +++ b/unittest.depend @@ -1,5 +1,5 @@ # depslib dependency file v1.0 -1682183565 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram.cpp +1682340368 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram.cpp @@ -7,10 +7,10 @@ "histogram.h" "histogram_internal.h" -1681931103 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram.h +1682341619 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram.h -1682183685 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram_internal.h +1682339360 c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\histogram_internal.h 1682182932 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\unittest_15.cpp @@ -19,11 +19,7 @@ -1682183802 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\unittest.cpp - "doctest.h" - "histogram_internal.h" - - +1682341526 source:c:\users\gmack\onedrive\рабочий стол\lab01\lab_01\unittest.cpp "doctest.h" "histogram_internal.h" diff --git a/unittest.layout b/unittest.layout index 59d0a06..b106504 100644 --- a/unittest.layout +++ b/unittest.layout @@ -7,19 +7,19 @@ - + - + - + - + - + - +