diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..600d2d3
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.vscode
\ No newline at end of file
diff --git a/main.cpp b/main.cpp
index 97fde50..69038b6 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,103 +1,110 @@
 #include <iostream>
-#include <cmath>
 #include <vector>
+
 using namespace std;
-int main()
-{
- size_t count, bin_count;
+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 i, j;
-    float min, max, bin_size;
-    float low, hi;
-    cerr << "Count= ";
-    cin >> count;
-    cerr << "Bin_count= ";
-    cin >> bin_count;
-    vector<double>numbers(count);
-    vector<size_t>bins(bin_count);
-    for (i = 0; i < count; i++)
+Input
+input_data(){
+    size_t number_count;
+    cerr << "Enter number count: ";
+    cin >> number_count;
+    Input in;
+    in.numbers.resize(number_count);
+    for(int i;i<number_count;i++)
     {
-        cin >> numbers[i];
+        cin >> in.numbers[i];
     }
+    cerr << "Enter bin count: ";
+    cin >> in.bin_count;
+    return in;
+}
+
+void
+find_minmax(vector<double> numbers, double& min, double& max) {
     min = numbers[0];
     max = numbers[0];
-    for (i = 0; i < count; i++)
-    {
-        if (numbers[i] > max)
-            max = numbers[i];
-        if (numbers[i] < min)
-            min = numbers[i];
+    for (double x : numbers) {
+    if (x < min) {
+        min = x;
     }
-    bin_size = (max - min) / bin_count;
-    low = min;
-    hi = low + bin_size;
-    for ( i = 0; i < count; i++)
-    {
-        bool found = false;
-        for (j = 0; (j < bin_count -1) && !found; j++)
-        {
-            low = min + j * bin_size;
-            hi = min + (j + 1) * bin_size;
-            if ((low <= numbers[i]) && (numbers[i] < hi))
-            {
-                bins[j]++;
-                found = true;
-            }
-        }
-        if (found==false)
-        {
-            bins[bin_count - 1]++;
-        }
+    else if (x > max) {
+        max = x;
     }
+}
+}
 
-
-    size_t sum_bins=0;
-    for (size_t bin:bins)
-    {
-        sum_bins+=bin;
+vector<size_t>
+make_histogram(vector<double> numbers, size_t bin_count) {
+    vector <size_t> bins(bin_count);
+    double min, max;
+    find_minmax(numbers, min, max);
+    size_t countt;
+    double bin_size = (max - min) / 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 * bin_size;
+        auto hi = min + (j + 1) * bin_size;
+        if ((lo <= numbers[i]) && (numbers[i] < hi)) {
+            bins[j]++;
+            found = true;
+        }
     }
-    size_t sred_bin = sum_bins/bin_count;
+        if (!found) {
+        bins[bin_count - 1]++;
+    }
+    }
+        return bins;
 
-    const size_t SCREEN_WIDTH = 80;
-    const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
 
-    size_t max_bin=bins[0];
-    for (size_t bin:bins)
-        if (bin>max_bin)
-            max_bin=bin;
-    for (size_t bin:bins)
-    {
-        int height = bin;
-        if (max_bin > MAX_ASTERISK)
-        {
-            height = MAX_ASTERISK * (static_cast<double>(bin) / max_bin);
+}
+
+void
+show_histogram_text(auto bins, size_t bin_count){
+        size_t max_count = 0;
+        for (size_t i = 0; i < bin_count; i++){
+        if(bins[i]>max_count)
+        max_count = bins[i];
         }
-        if (bin < 100)
+    size_t height;
+    for (size_t i = 0; i < bin_count; i++)
+    {
+        if (bins[i] < 100)
             cout << " ";
-        if (bin < 10)
+        if (bins[i] < 10)
             cout << " ";
-        cout<<bin<<"|";
-         if (height>sred_bin){
-             for(size_t i=0; i<sred_bin; i++)
-                 cout<<"*";
-             for(size_t i=sred_bin; i<height; i++)
-                 cout<<"+";
-         }
-         else{
-             for (size_t i=0; i<height; i++)
-                 cout<<"*";
-             for (size_t i=height; i<sred_bin; i++)
-                 cout<<"-";
-
-         }
-
-cout<<endl;
-
+        cout<<bins[i]<<"|";
+        if(max_count>MAX_ASTERISK){
+        for (size_t j = 0; j <(height = MAX_ASTERISK * (static_cast<double>(bins[i]) / max_count)) ; j++)
+        {
+            cout<<"*";
+        }
+        cout<<endl;
+        }
+        else
+        {
+           for (size_t j = 0; j <bins[i] ; j++)
+        {
+            cout<<"*";
+        }
+        cout<<endl;
+        }
     }
 
 
-
-    return 0;
+}
 
 
+int main()
+{   Input in = input_data();
+    auto bins = make_histogram(in.numbers, in.bin_count);
+    show_histogram_text(bins, in.bin_count);
+    return 0;
 }
\ No newline at end of file