diff --git a/lab01.cbp b/lab01.cbp
index d541ad7..68d2c6d 100644
--- a/lab01.cbp
+++ b/lab01.cbp
@@ -32,6 +32,10 @@
+
+
+
+
diff --git a/main.cpp b/main.cpp
index 985134d..d79dfdc 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,5 +1,8 @@
#include
#include
+#include "histogram.h"
+#include "text.h"
+
using namespace std;
@@ -26,93 +29,6 @@ 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 > max )
- {
- max = x;
- }
- if (x < min)
- {
- min = x;
- }
- }
-}
-
-vector
-make_histogram(const vector& numbers, size_t& bin_count)
-{
- double min = 0;
- double max = 0;
- find_minmax(numbers, min, max);
- auto bin_size = (max - min)/bin_count;
- vector bins(bin_count);
- for (double number : numbers)
- {
- 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 <= number) && (number < hi))
- {
- bins[j]++;
- found = true;
- }
- }
- if (!found)
- {
- bins[bin_count - 1]++;
- }
- }
- return bins;
-}
-
-void
-show_histogram_text(const vector& bins, size_t& bin_count) {
- const size_t SCREEN_WIDTH = 80;
- const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
- size_t max_count = 0;
- for (size_t s = 0; s < bin_count; s++)
- {
- if (bins[s] > max_count)
- {
- max_count = bins[s];
- }
- }
- for (size_t bin : bins)
- {
- if (bin <100)
- {
- cout << " ";
- }
- if (bin <10)
- {
- cout << " ";
- }
- cout << bin << "|";
- if (max_count > MAX_ASTERISK)
- {
- size_t count = bin;
- size_t height = MAX_ASTERISK * (static_cast(count) / max_count);
- for (size_t t = 0; t < height; t++)
- {
- cout << "*";
- }
- }
- else for (size_t k = 0; k < bin; k++)
- {
- cout << "*";
- }
- cout << endl;
- }
-}
-
int main()
{
Input in = input_data();
diff --git a/text.cpp b/text.cpp
new file mode 100644
index 0000000..29c73d5
--- /dev/null
+++ b/text.cpp
@@ -0,0 +1,41 @@
+#include
+#include "text.h"
+
+using namespace std;
+
+void
+show_histogram_text(const vector& bins, size_t& bin_count) {
+ const size_t SCREEN_WIDTH = 80;
+ const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
+ size_t max_count = 0;
+ for (size_t s = 0; s < bin_count; s++)
+ {
+ if (bins[s] > max_count)
+ {
+ max_count = bins[s];
+ }
+ }
+ auto scale_factor = static_cast(MAX_ASTERISK) / max_count;
+ if (scale_factor > 1)
+ {
+ scale_factor = 1;
+ }
+ for (size_t bin : bins)
+ {
+ if (bin <100)
+ {
+ cout << " ";
+ }
+ if (bin <10)
+ {
+ cout << " ";
+ }
+ cout << bin << "|";
+ size_t height = bin * scale_factor;
+ for (size_t t = 0; t < height; t++)
+ {
+ cout << "*";
+ }
+ cout << endl;
+ }
+}
diff --git a/text.h b/text.h
new file mode 100644
index 0000000..5c6df4d
--- /dev/null
+++ b/text.h
@@ -0,0 +1,9 @@
+#ifndef TEXT_H_INCLUDED
+#define TEXT_H_INCLUDED
+
+#include
+
+void
+show_histogram_text(const std::vector& bins, size_t& bin_count);
+
+#endif // TEXT_H_INCLUDED