diff --git a/lab01/histogram.cpp b/lab01/histogram.cpp new file mode 100644 index 0000000..df30c69 --- /dev/null +++ b/lab01/histogram.cpp @@ -0,0 +1,35 @@ +#include "histogram.h" +static void +find_minmax(const std::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; + } +} + +std::vector +make_histogram(const std::vector& numbers, size_t bucket, size_t number_count) { + std::vector stolb(bucket); + double min, max; + find_minmax(numbers, min, max); + float k = (max - min) / bucket; + for (size_t i = 0; i < bucket; i++) stolb[i] = 0; + for (size_t i = 0; i < number_count; i++) + { + bool flag = false; + for (size_t j = 0; (j < bucket && !flag); j++) + { + if (numbers[i] >= (min + k * j) && numbers[i] < (min + k * (1 + j))) + { + stolb[j]++; + flag = true; + + } + } + if (!flag) stolb[bucket - 1]++; + } + return stolb; +} diff --git a/lab01/histogram.h b/lab01/histogram.h new file mode 100644 index 0000000..b85da0d --- /dev/null +++ b/lab01/histogram.h @@ -0,0 +1,9 @@ +#ifndef HISTOGRAM_H_INCLUDED +#define HISTOGRAM_H_INCLUDED + +#endif // HISTOGRAM_H_INCLUDED +#include + +std::vector +make_histogram(const std::vector& numbers, size_t bin_count); +#pragma once diff --git a/lab01/lab01.cpp b/lab01/lab01.cpp index 42fff6b..bbb7b7f 100644 --- a/lab01/lab01.cpp +++ b/lab01/lab01.cpp @@ -1,6 +1,6 @@ #include #include - +#include "histogram.h" using namespace std; diff --git a/lab01/text.cpp b/lab01/text.cpp new file mode 100644 index 0000000..fc64646 --- /dev/null +++ b/lab01/text.cpp @@ -0,0 +1,26 @@ +void +show_histogram_text(std::vector stolb, size_t bucket) { + const size_t SCREEN_WIDTH = 80; + const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; + int maxlen = 0; + + for (int j = 0; j < bucket; j++) + { + if (maxlen MAX_ASTERISK) + { + if (maxlen != stolb[j]) height = MAX_ASTERISK * (static_cast (stolb[j])/maxlen); + else if (maxlen == stolb[j]) height = MAX_ASTERISK; + } + for (int i = 0; i < height; i++) std::cout << "*"; + std::cout << "\n"; + } +} diff --git a/lab01/text.h b/lab01/text.h new file mode 100644 index 0000000..e8faf75 --- /dev/null +++ b/lab01/text.h @@ -0,0 +1,10 @@ +#ifndef TEXT_H_INCLUDED +#define TEXT_H_INCLUDED + +#include +#include "text.cpp" + +void +show_histogram_text(std::vector stolb, size_t bucket); + +#endif // TEXT_H_INCLUDED