diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fee6729 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/bin +/obj +/project.layout +/project.depend +/unittest.depend +/unittest.layout diff --git a/main.cpp b/main.cpp index 0972756..f91e36d 100644 --- a/main.cpp +++ b/main.cpp @@ -1,6 +1,8 @@ #include #include - +#include "histogram.h" +#include "svg.h" +#include "text.h" using namespace std; @@ -33,85 +35,11 @@ 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, size_t & number_count, size_t & max_count) { - double min, max; - find_minmax(numbers, min, max); - double bin_size = (max - min) / bin_count; - vector bins(bin_count); - max_count = bins[0]; - for (size_t i = 0; i < number_count; 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 (bins[j] > max_count){ - max_count = bins[j]; - } - } - if (!found){ - bins[bin_count - 1]++; - } - if (bins[bin_count - 1] > max_count){ - max_count = bins[bin_count - 1]; - } - } - return bins; -} -void -show_histogram_text(vector& bins, size_t & max_count,size_t & bin_count){ -const size_t SCREEN_WIDTH = 80; -const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; -if (max_count > MAX_ASTERISK){ - vector hights(bin_count); - for (size_t i = 0; i < bin_count; i++){ - size_t height = MAX_ASTERISK * (static_cast(bins[i]) / max_count); - hights[i] = height; - } - - for (size_t i = 0; i < bin_count; i++){ - printf("%3d|", bins[i]); - for (size_t j = 0; j < hights[i]; j++){ - cout<<"*"; - } - cout << endl; - } - } - else{ - for (size_t i = 0; i < bin_count; i++) - { - printf("%3d|", bins[i]); - for (size_t j = 0; j < bins[i]; j++){ - cout<<"*"; - } - cout << endl; - } - } - -} int main() { - auto in = input_data(); - auto bins = make_histogram(in.numbers, in.bin_count, in.number_count, in.max_count); - show_histogram_text(bins, in.max_count, in.bin_count); + Input in = input_data(); + vector bins = make_histogram(in.numbers, in.bin_count, in.number_count, in.max_count); + show_histogram_svg(bins); + return 0; } diff --git a/project.cbp b/project.cbp index faf8eec..4650b61 100644 --- a/project.cbp +++ b/project.cbp @@ -41,6 +41,11 @@