diff --git a/cs-lab34.cbp b/cs-lab34.cbp new file mode 100644 index 0000000..ffbcc0c --- /dev/null +++ b/cs-lab34.cbp @@ -0,0 +1,38 @@ + + + + + + diff --git a/cs-lab34.layout b/cs-lab34.layout new file mode 100644 index 0000000..027b97c --- /dev/null +++ b/cs-lab34.layout @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/histogram.cpp b/histogram.cpp new file mode 100644 index 0000000..7108c06 --- /dev/null +++ b/histogram.cpp @@ -0,0 +1,34 @@ +#include "histogram.h" +#include + +using namespace std; + +void find_minmax(const vector& numbers, double& min, double& max) { + min = numbers[0]; + max = numbers[0]; + for (float x : numbers) { + if (x < min) min = x; + else if (x > max) max = x; + } +} + +vector make_histogram(const vector& numbers, size_t bin_count) { + double min, max; + find_minmax(numbers, min, max); + + float k = (max - min) / bin_count; + vector bins(bin_count, 0); + + for (double number : numbers) { + bool flag = false; + for (size_t j = 0; (j < bin_count && !flag); j++) { + if (number >= (min + k * j) && number < (min + k * (j + 1))) { + bins[j]++; + flag = true; + } + } + if (!flag) bins[bin_count - 1]++; + } + + return bins; +} diff --git a/histogram.h b/histogram.h new file mode 100644 index 0000000..07979b8 --- /dev/null +++ b/histogram.h @@ -0,0 +1,4 @@ +#pragma once +#include + +std::vector make_histogram(const std::vector& numbers, size_t bin_count); diff --git a/main.cpp b/main.cpp index 8c0d1ef..6f4e61b 100644 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,6 @@ #include -#include - +#include "histogram.h" +#include "text.h" using namespace std; @@ -33,65 +33,6 @@ Input input_data() { return in; } -void find_minmax(const vector& numbers, double& min, double& max) { - min = numbers[0]; - max = numbers[0]; - for (float x : numbers) { - if (x < min) min = x; - else if (x > max) max = x; - } -} - -vector make_histogram(const vector& numbers, size_t bin_count) { - double min, max; - find_minmax(numbers, min, max); - - float k = (max - min) / bin_count; - vector bins(bin_count, 0); - - for (double number : numbers) { - bool flag = false; - for (size_t j = 0; (j < bin_count && !flag); j++) { - if (number >= (min + k * j) && number < (min + k * (j + 1))) { - bins[j]++; - flag = true; - } - } - if (!flag) bins[bin_count - 1]++; - } - - return bins; -} - -void show_histogram_text(const vector& bins) { - const size_t SCREEN_WIDTH = 80; - const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; - - size_t max_count = 0; - for (size_t count : bins) { - if (count > max_count) { - max_count = count; - } - } - - for (size_t bin : bins) { - if (bin < 100) cout << " "; - if (bin < 10) cout << " "; - cout << bin << "|"; - - size_t height = bin; - if (max_count > MAX_ASTERISK) { - if (max_count != bin) - height = MAX_ASTERISK * (static_cast(bin) / max_count); - else - height = MAX_ASTERISK; - } - - for (size_t i = 0; i < height; i++) cout << "*"; - cout << "\n"; - } -} - int main() { auto in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); diff --git a/text.cpp b/text.cpp new file mode 100644 index 0000000..f90cead --- /dev/null +++ b/text.cpp @@ -0,0 +1,33 @@ +#include "text.h" +#include + +using namespace std; + +void show_histogram_text(const vector& bins) { + const size_t SCREEN_WIDTH = 80; + const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; + + size_t max_count = 0; + for (size_t count : bins) { + if (count > max_count) { + max_count = count; + } + } + + for (size_t bin : bins) { + if (bin < 100) cout << " "; + if (bin < 10) cout << " "; + cout << bin << "|"; + + size_t height = bin; + if (max_count > MAX_ASTERISK) { + if (max_count != bin) + height = MAX_ASTERISK * (static_cast(bin) / max_count); + else + height = MAX_ASTERISK; + } + + for (size_t i = 0; i < height; i++) cout << "*"; + cout << "\n"; + } +} diff --git a/text.h b/text.h new file mode 100644 index 0000000..0407a22 --- /dev/null +++ b/text.h @@ -0,0 +1,4 @@ +#pragma once +#include + +void show_histogram_text(const std::vector& bins); diff --git a/Текстовый документ — копия (2).txt b/Текстовый документ — копия (2).txt new file mode 100644 index 0000000..e69de29 diff --git a/Текстовый документ — копия (3).txt b/Текстовый документ — копия (3).txt new file mode 100644 index 0000000..e69de29 diff --git a/Текстовый документ — копия (4).txt b/Текстовый документ — копия (4).txt new file mode 100644 index 0000000..e69de29 diff --git a/Текстовый документ — копия (5).txt b/Текстовый документ — копия (5).txt new file mode 100644 index 0000000..e69de29