diff --git a/main.cpp b/main.cpp index e00c292..6fc09d2 100644 --- a/main.cpp +++ b/main.cpp @@ -1,5 +1,7 @@ #include #include +#include "histogram.h" +#include "text.h" using namespace std; struct Input { @@ -24,95 +26,11 @@ Input input_data() return in; } -void find_minmax(const vector& numbers, double& minimum, double& maximum) { - minimum = numbers[0]; - maximum = numbers[1]; - for (double i : numbers) { - if (i < minimum) - minimum = i; - if (i > maximum) - maximum = i; - } -} -vector make_histogram(const vector&numbers, size_t bin_count) { - double maximum, minimum; - float LL, LR; - - find_minmax(numbers, minimum, maximum); - double bin_size = (maximum - minimum) / bin_count; - vector bins(bin_count); - LL = minimum; - LR = minimum + bin_size; - for (int i = 0; i < bin_count; i++) { - if (i == 0) { - for (int b = 0; b < numbers.size(); b++) { - if ((LL <= numbers[b]) && (numbers[b] < LR)) - bins[i] += 1; - - } - LL = LR; - LR = LL + bin_size; - } - if (i == (bin_count - 1)) { - LR = maximum; - for (int b = 0; b < numbers.size(); b++) { - if ((LL < numbers[b]) && (numbers[b] <= LR)) - bins[i] += 1; - } - break; - } - if ((i != 0) && (i != (bin_count - 1))) { - for (int b = 0; b < numbers.size(); b++) { - if ((LL < numbers[b]) && (numbers[b] < LR)) - bins[i] += 1; - } - LL = LR; - LR = LL + bin_size; - } - } - return bins; - } -void show_histogram_text(size_t bin_count, const vector&numbers) { - - vector bins = make_histogram(numbers, bin_count); - size_t height; - const size_t SCREEN_WIDTH = 80; - const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; - int max_count = 0; - for (int i = 0; i < bin_count; i++) { - if (bins[i] > max_count) - max_count = bins[i]; - } - - for (int i = 0; i < bin_count; i++) { - if (bins[i] < 10) { - cout << " "; - } - if (bins[i] < 100) { - cout << " "; - } - cout << bins[i] << "|"; - if (max_count > 76) { - height = MAX_ASTERISK * (static_cast(bins[i]) / max_count); - for (int b = 0; b < height; b++) - cout << "*"; - } - else { - for (int b = 0; b < bins[i]; b++) { - cout << "*"; - } - } - cout << endl; - } - } - int main() { auto in = input_data(); auto bins = make_histogram(in.numbers, in.bin_count); show_histogram_text(in.bin_count, in.numbers); - - return 0; }