diff --git a/main.cpp b/main.cpp index b40bd31..ded870c 100644 --- a/main.cpp +++ b/main.cpp @@ -1,85 +1,5 @@ +#include "histogram.h" #include -#include -#include -#include -using namespace std; - -struct Input { - vector numbers; - size_t bin_count{}; - size_t number_count; -}; - -void find_minmax(const vector& numbers, double& min, double& max) { - if (numbers.empty()) return; - - min = numbers[0]; - max = numbers[0]; - for (double num : numbers) { - if (num < min) min = num; - if (num > max) max = num; - } -} - -vector make_histogram(const vector& numbers, size_t bin_count) { - if (numbers.empty() || bin_count == 0) return {}; - - double min, max; - find_minmax(numbers, min, max); - - vector bins(bin_count); - double bin_size = (max - min) / bin_count; - - for (double num : numbers) { - bool found = false; - for (size_t j = 0; j < bin_count - 1 && !found; ++j) { - double lo = min + j * bin_size; - double hi = min + (j + 1) * bin_size; - if (lo <= num && num < hi) { - bins[j]++; - found = true; - } - } - if (!found) { - bins[bin_count - 1]++; - } - } - - return bins; -} - -Input input_data() { - Input in; - cin >> in.number_count; - - in.numbers.resize(in.number_count); - for (size_t i = 0; i < in.number_count; i++) { - cin >> in.numbers[i]; - } - - cin >> in.bin_count; - return in; -} - -void show_histogram_text(const vector& bins, size_t max_width = 80) { - if (bins.empty()) return; - - size_t max_count = *max_element(bins.begin(), bins.end()); - if (max_count == 0) return; - - for (size_t count : bins) { - if (count < 100) cout << " "; - if (count < 10) cout << " "; - - cout << count << "|"; - - size_t bar_length = (count * max_width) / max_count; - for (size_t i = 0; i < bar_length; ++i) { - cout << "*"; - } - cout << endl; - } -} int main() { auto in = input_data();