diff --git a/histogram.cpp b/histogram.cpp index e43d6aa..01ecc45 100644 --- a/histogram.cpp +++ b/histogram.cpp @@ -3,58 +3,57 @@ #include #include #include "histogram.h" +#include "histogram_internal.h" using namespace std; -void -find_minmax(vector numbers, double &min, double &max) -{ - min = numbers[0]; - max = numbers[0]; - for (size_t i = 1; i < numbers.size(); i++) - { - if (min > numbers[i]) - min = numbers[i]; - if (max < numbers[i]) - max = numbers[i]; +bool +find_minmax(vector numbers, double &min, double &max) { + + bool notEmpty = true; + if (numbers.size() == 0 || numbers.size() == 1) + notEmpty = false; + else{ + min = numbers[0]; + max = numbers[0]; + for (size_t i = 1; i < numbers.size(); i++) { + if (min > numbers[i]) + min = numbers[i]; + if (max < numbers[i]) + max = numbers[i]; } + } + return notEmpty; } -vector make_histogramm(vectornumbers, size_t bin_count) -{ +vector make_histogramm(vectornumbers, size_t bin_count){ double min, max; - find_minmax(numbers, min, max); - double binSize = (max - min) / bin_count; - vector bins(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 * binSize; - auto hi = min + (j + 1) * binSize; - if ((numbers[i] >= lo) && (numbers[i] < hi)) - { - bins[j]++; - found = true; + bool haveElements = find_minmax(numbers, min, max); + if (haveElements){ + double binSize = (max - min) / bin_count; + vector bins(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 * binSize; + auto hi = min + (j + 1) * binSize; + if ((numbers[i] >= lo) && (numbers[i] < hi)) { + bins[j]++; + found = true; } } - if (!found) - bins[bin_count - 1]++; + 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]; + return bins; } - 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; + else + cerr << "Empty massive of numbers"; +} +bool check_interval(size_t interval){ + bool need; + if (interval > 9 || interval < 2) + need = false; + else + need = true; + return need; } diff --git a/histogram_internal.h b/histogram_internal.h index 52f6582..264dae7 100644 --- a/histogram_internal.h +++ b/histogram_internal.h @@ -3,6 +3,6 @@ #include -void find_minmax(std::vector numbers, double &min, double &max); +bool find_minmax(std::vector numbers, double &min, double &max); #endif // HISTOGRAM_INTERNAL_H_INCLUDED diff --git a/lab3.cbp b/lab3.cbp index 73e8680..5632558 100644 --- a/lab3.cbp +++ b/lab3.cbp @@ -14,6 +14,11 @@ + + + + +