From f118612ba864fa928d8161496cdf6c665aaff5f5 Mon Sep 17 00:00:00 2001
From: VeretennikovMA <VeretennikovMA@mpei.ru>
Date: Sun, 28 Apr 2024 22:37:52 +0300
Subject: [PATCH] =?UTF-8?q?code:=202.=D0=BA=D0=BE=D0=B4=20=D1=80=D0=B0?=
 =?UTF-8?q?=D0=B7=D0=B4=D0=B5=D0=BB=D0=B5=D0=BD=20=D0=BD=D0=B0=20=D1=84?=
 =?UTF-8?q?=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 lab01.cbp |  1 +
 main.cpp  | 58 +++++++++++++++++++++++++++++++++++++++++--------------
 2 files changed, 44 insertions(+), 15 deletions(-)

diff --git a/lab01.cbp b/lab01.cbp
index d541ad7..fb64a0d 100644
--- a/lab01.cbp
+++ b/lab01.cbp
@@ -32,6 +32,7 @@
 			<Add option="-Wall" />
 			<Add option="-fexceptions" />
 		</Compiler>
+		<Unit filename=".gitignore" />
 		<Unit filename="main.cpp" />
 		<Extensions>
 			<lib_finder disable_auto="1" />
diff --git a/main.cpp b/main.cpp
index 3aedbe9..92b7230 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,27 +1,32 @@
 #include <iostream>
 #include <vector>
-
 using namespace std;
 
-int main()
-{
-    const size_t SCREEN_WIDTH = 80;
-    const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
+struct Input {
+    vector<double> numbers;
+    size_t bin_count{};
+};
 
-    size_t number_count, bin_count;
+Input
+input_data() {
+    size_t number_count;
     cerr << "Enter number count: ";
     cin >> number_count;
-    vector<double> numbers(number_count);
+    Input in;
+    in.numbers.resize(number_count);
     cerr << "Enter numbers: ";
-    for (size_t i = 0; i < number_count; i++){
-        cin >> numbers[i];
+    for (size_t i = 0; i < number_count; i++) {
+        cin >> in.numbers[i];
     }
     cerr << "Enter bin count: ";
-    cin >> bin_count;
-    vector<size_t> bins(bin_count);
+    cin >> in.bin_count;
+    return in;
+}
 
-    double min = numbers[0];
-    double max = numbers[0];
+void
+find_minmax(const vector<double>& numbers, double& min, double& max) {
+    min = numbers[0];
+    max = numbers[0];
 
     for (double x : numbers) {
         if (x < min) {
@@ -31,6 +36,14 @@ int main()
             max = x;
         }
     }
+}
+
+vector<size_t>
+make_histogram(const vector<double>& numbers, size_t bin_count){
+    size_t number_count = numbers.size();
+    vector<size_t> bins(bin_count);
+    double min, max;
+    find_minmax(numbers, min, max);
 
     double bin_size = (max - min) / bin_count;
 
@@ -48,6 +61,15 @@ int main()
             bins[bin_count - 1]++;
         }
     }
+    return bins;
+}
+
+void
+show_histogram_text(const vector<size_t>& bins){
+    const size_t SCREEN_WIDTH = 80;
+    const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
+
+    auto bin_count = bins.size();
 
     size_t max_count = 0;
     for (size_t i = 0; i < bin_count; i++){
@@ -56,7 +78,6 @@ int main()
             max_count = Count;
         }
     }
-
     if (max_count <= MAX_ASTERISK){
         for (size_t i = 0; i < bin_count; i++){
             size_t Count = bins[i];
@@ -90,5 +111,12 @@ int main()
             cout << "\n";
         }
     }
-    return 0;
+}
+
+
+int
+main() {
+    auto in = input_data();
+    auto bins = make_histogram(in.numbers, in.bin_count);
+    show_histogram_text(bins);
 }