From 594ccdadc0917d7bda0bbc90a5e9df241610d58d Mon Sep 17 00:00:00 2001
From: ShchipkovMY <ShchipkovMY@mpei.ru>
Date: Sun, 10 Sep 2023 13:20:54 +0300
Subject: [PATCH] =?UTF-8?q?code:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8?=
 =?UTF-8?q?=D0=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 main.cpp | 71 +++++++++++++++++++++++++++++++++++++++-----------------
 1 file changed, 50 insertions(+), 21 deletions(-)

diff --git a/main.cpp b/main.cpp
index 2c3f59f..2ac5406 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,29 +4,32 @@
 
 using namespace std;
 
-int main()
+struct Input
 {
-    int i, j;
-    size_t number_count;
-    const size_t screen_width = 80;
-    const size_t max_asterisk = screen_width - 3 - 1;
+    vector<double> numbers;
+    size_t bin_count{};
+};
 
-    cerr << "Enter number count : ";
+Input input_data()
+{
+    size_t number_count;
+    cerr<<"Enter number count: ";
     cin >> number_count;
-    vector <double> numbers(number_count);
-    cerr << "Enter numbers : " << endl;
-    for (i = 0; i < number_count; i++)
+    Input in;
+    in.numbers.resize(number_count);
+    for (size_t i =0; i < number_count; i++)
     {
-        cin >> numbers[i];
+        cin >> in.numbers[i];
     }
-    size_t bin_count;
-    cerr << "Enter bin count : ";
-    cin >> bin_count;
-    vector <size_t> bins(bin_count);
-
-    double min = numbers[0];
-    double max = numbers[0];
-    for (double x : numbers)
+    cerr<< "Enter bin count: ";
+    cin >> in.bin_count;
+    return in;
+}
+void find_minmax(const vector<double> &numbers, double &min, double &max)
+{
+    min = numbers[0];
+    max = numbers[0];
+       for (double x : numbers)
     {
         if (x < min)
         {
@@ -37,10 +40,19 @@ int main()
             max = x;
         }
     }
+    return;
+}
+
+vector<size_t> make_histogram (vector<double> numbers, size_t bin_count)
+{
 
+    double min;
+    double max;
+    find_minmax (numbers, min, max);
     double bin_size = (max - min) / bin_count;
+    vector<size_t> bins(bin_count);
 
-    for (size_t i = 0; i < number_count; i++)
+    for (size_t i = 0; i < numbers.size(); i++)
     {
         bool found = false;
         for (size_t j = 0; (j < bin_count - 1) && !found; j++)
@@ -49,16 +61,25 @@ int main()
             auto hi = min + (j + 1) * bin_size;
             if ((lo <= numbers[i]) && (numbers[i] < hi))
             {
-                bins[j] ++;
+                bins[j]++;
                 found = true;
             }
         }
+
         if (!found)
         {
             bins[bin_count - 1]++;
         }
     }
 
+    return bins;
+}
+
+void show_histogram_text(vector<size_t> bins, size_t bin_count)
+{
+    const size_t screen_width = 80;
+    const size_t max_asterisk = screen_width - 3 - 1;
+    size_t i,j;
     double max_count;
     max_count = bins[0];
     for (i=0; i< bin_count; i++)
@@ -101,6 +122,14 @@ int main()
         }
         cout << endl;
     }
-    _getch();
+}
+
+
+int main()
+{
+    auto in = input_data();
+    auto bins = make_histogram(in.numbers, in.bin_count);
+    show_histogram_text(bins, in.bin_count);
+    getch();
     return 0;
 }