diff --git a/.gitignore b/.gitignore index 4517317..0a7cf4e 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ /lab01.layout /lab01.depend /main.exe -/main.o \ No newline at end of file +/main.o +/bat \ No newline at end of file diff --git a/histogram.cpp b/histogram.cpp new file mode 100644 index 0000000..857de96 --- /dev/null +++ b/histogram.cpp @@ -0,0 +1,43 @@ +#include +#include "histogram.h" + +using namespace std; + +void find_minmax(const vector &numbers, double &min, double &max){ + min = numbers[0]; + max = numbers[0]; + for (double x : numbers) { + if (x < min) { + min = x; + } + else if (x > max) { + max = x; + } + } +} + +vector make_histogram(const vector &numbers, size_t bin_count){ + vector bins ( bin_count ); + double min = numbers[0]; + double max = numbers[0]; + + 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]++; + } + } + return bins; +} diff --git a/histogram.h b/histogram.h new file mode 100644 index 0000000..0d8dc8c --- /dev/null +++ b/histogram.h @@ -0,0 +1,9 @@ +#ifndef HISTOGRAM_H_INCLUDED +#define HISTOGRAM_H_INCLUDED + +#include + +std::vector +make_histogram(const std::vector& numbers, size_t bin_count); + +#endif // HISTOGRAM_H_INCLUDED diff --git a/main.cpp b/main.cpp index efb3235..4550c63 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,6 @@ #include #include +#include "histogram.h" using namespace std; @@ -31,45 +32,6 @@ Input input_data() { return in; }; -void find_minmax(const vector &numbers, double &min, double &max){ - min = numbers[0]; - max = numbers[0]; - for (double x : numbers) { - if (x < min) { - min = x; - } - else if (x > max) { - max = x; - } - } -} - -vector make_histogram(const vector &numbers, size_t bin_count){ - vector bins ( bin_count ); - double min = numbers[0]; - double max = numbers[0]; - - 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]++; - } - } - return bins; -} - void show_histogram_text(const vector &bins){ size_t maxbin = bins[0]; for (size_t i=1; i < bins.size(); i++){