diff --git a/histogram.cpp b/histogram.cpp new file mode 100644 index 0000000..4af7bee --- /dev/null +++ b/histogram.cpp @@ -0,0 +1,62 @@ +#include +#include "histogram.h" +using namespace std; + +vector make_histogram(const vector& numbers, size_t bin_count) { + + vector bins(bin_count); + vector binss(bin_count); + + double max, min; + find_minmax(numbers, min, max); + double bin_size = (max / min) / 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 * bin_size; + auto hi = min + (j + 1) * bin_size; + if ((lo <= numbers[i]) && (numbers[i] < hi)) { + bins[j]++; + found = true; + } + } + 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]; + } + } + + 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; +} + +void find_minmax(const vector& numbers, double& min, double& max) { + min = numbers[0]; + for (auto i = 0; i < numbers.size(); i++) { + if (numbers[i] < min) { + min = numbers[i]; + } + } + + max = numbers[0]; + for (auto i = 0; i < numbers.size(); i++) { + if (numbers[i] > max) { + max = numbers[i]; + } + } + +} \ No newline at end of file diff --git a/histogram.h b/histogram.h new file mode 100644 index 0000000..63346a6 --- /dev/null +++ b/histogram.h @@ -0,0 +1,7 @@ +#pragma once + +#include + +std::vector +make_histogram(const std::vector& numbers, size_t bin_count); +void find_minmax(const std::vector& numbers, double& min, double& max); \ No newline at end of file diff --git a/lab1.cpp b/lab1.cpp index ab16275..cb54131 100644 --- a/lab1.cpp +++ b/lab1.cpp @@ -4,6 +4,8 @@ #include #include #include +#include "histogram.h" +#include "text.h" using namespace std; @@ -30,81 +32,7 @@ input_data() { return in; } -void find_minmax(const vector& numbers, double& min, double& max) { - min = numbers[0]; - for (auto i = 0; i < numbers.size(); i++) { - if (numbers[i] < min) { - min = numbers[i]; - } - } - - max = numbers[0]; - for (auto i = 0; i < numbers.size(); i++) { - if (numbers[i] > max) { - max = numbers[i]; - } - } - -} - -vector make_histogram(const vector& numbers, size_t bin_count) { - - vector bins(bin_count); - vector binss(bin_count); - - double max, min; - find_minmax(numbers, min, max); - double bin_size = (max / min) / 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 * bin_size; - auto hi = min + (j + 1) * bin_size; - if ((lo <= numbers[i]) && (numbers[i] < hi)) { - bins[j]++; - found = true; - } - } - 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]; - } - } - - 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; -} - -void show_histogram_text(vector bins, size_t bin_count ) { - - for (size_t i = 0; i < bin_count; i++) { - if (bins[i] < 100) { - cout << " "; - } - if (bins[i] < 10) { - cout << " "; - } - cout << bins[i] << "|"; - for (size_t j = 0; j < bins[i]; j++) { - cout << "*"; - } - cout << "\n"; - } -} @@ -115,28 +43,4 @@ int main() show_histogram_text(bins, in.bin_count); - } - - - - - - - - - - - - - - - - - - - - - - - - + } \ No newline at end of file diff --git a/lab1.vcxproj b/lab1.vcxproj index 940d519..8f1ff1c 100644 --- a/lab1.vcxproj +++ b/lab1.vcxproj @@ -127,7 +127,13 @@ + + + + + + diff --git a/lab1.vcxproj.filters b/lab1.vcxproj.filters index b28bd20..a753087 100644 --- a/lab1.vcxproj.filters +++ b/lab1.vcxproj.filters @@ -18,5 +18,19 @@ Исходные файлы + + Исходные файлы + + + Исходные файлы + + + + + Исходные файлы + + + Исходные файлы + \ No newline at end of file diff --git a/text.cpp b/text.cpp new file mode 100644 index 0000000..83b96e0 --- /dev/null +++ b/text.cpp @@ -0,0 +1,23 @@ +#include +#include "text.h" +#include + + +using namespace std; + +void show_histogram_text(vector bins, size_t bin_count) { + + for (size_t i = 0; i < bin_count; i++) { + if (bins[i] < 100) { + cout << " "; + } + if (bins[i] < 10) { + cout << " "; + } + cout << bins[i] << "|"; + for (size_t j = 0; j < bins[i]; j++) { + cout << "*"; + } + cout << "\n"; + } +} \ No newline at end of file diff --git a/text.h b/text.h new file mode 100644 index 0000000..07c12ca --- /dev/null +++ b/text.h @@ -0,0 +1,5 @@ +#pragma once +#include + + +void show_histogram_text(std:: vector bins, size_t bin_count); \ No newline at end of file