From 5ee7421ddb3b0bc6de5b33f526bddee28a7c98c8 Mon Sep 17 00:00:00 2001
From: "Dmitry (KolomeytsevDA)" <KolomeytsevDA@mpei.ru>
Date: Sun, 5 May 2024 20:52:16 +0300
Subject: [PATCH] =?UTF-8?q?code:=20=D1=80=D0=B0=D0=B7=D0=B4=D0=B5=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B0=20=D1=84=D0=B0=D0=B9?=
 =?UTF-8?q?=D0=BB=D1=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 histogram.cpp |  55 +++++++++++++++++++++++++++
 histogram.h   |   8 ++++
 lab34.cpp     | 102 +++-----------------------------------------------
 text.cpp      |  51 +++++++++++++++++++++++++
 text.h        |   8 ++++
 5 files changed, 127 insertions(+), 97 deletions(-)
 create mode 100644 histogram.cpp
 create mode 100644 histogram.h
 create mode 100644 text.cpp
 create mode 100644 text.h

diff --git a/histogram.cpp b/histogram.cpp
new file mode 100644
index 0000000..bac09a3
--- /dev/null
+++ b/histogram.cpp
@@ -0,0 +1,55 @@
+#include <iostream>
+#include <vector>
+#include "histogram.h"
+
+void find_minmax(const std::vector<double> &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<int> make_histogram(const std::vector<double>& numbers, size_t bin_count)
+{
+    std::vector<int> bins(bin_count);
+    int max_count = bins[0];
+    double min = numbers[0];
+    double max = numbers[0];
+
+    find_minmax(numbers, min, max);
+    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;
+            }
+        }
+
+        if (!found)
+        {
+            bins[bin_count - 1]++;
+        }
+    }
+    return bins;
+}
\ No newline at end of file
diff --git a/histogram.h b/histogram.h
new file mode 100644
index 0000000..007d1a0
--- /dev/null
+++ b/histogram.h
@@ -0,0 +1,8 @@
+#ifndef HISTOGRAM_H_INCLUDED
+#define HISTOGRAM_H_INCLUDED
+#include <vector>
+
+std::vector<int>
+make_histogram(const std::vector<double>& numbers, size_t bin_count);
+
+#endif // HISTOGRAM_H_INCLUDED
diff --git a/lab34.cpp b/lab34.cpp
index b151911..55f3b1d 100644
--- a/lab34.cpp
+++ b/lab34.cpp
@@ -1,5 +1,8 @@
 #include <iostream>
 #include <vector>
+#include "histogram.h"
+#include "text.h"
+
 
 using namespace std;
 
@@ -22,117 +25,22 @@ Input input_data()
 
     Input in;
     in.numbers.resize(number_count);
-
     cerr << "Enter numbers: ";
-
     for (size_t i = 0; i < number_count; i++)
     {
         cin >> in.numbers[i];
     }
 
-    cerr << "Enter number of bins: ";
+    cerr << "Number of bins: ";
     cin >> in.bin_count;
 
     return in;
 }
 
-void find_minmax(const vector<double> &numbers, double &min, double &max)
-{
-    min = numbers[0];
-    for (double x : numbers)
-    {
-        if (x < min)
-        {
-            min = x;
-        }
-        else if (x > max)
-        {
-            max = x;
-        }
-    }
-}
-
-vector<int> make_histogram(const vector<double> &numbers, size_t bin_count)
-{
-    vector<int> bins(bin_count);
-    int max_count = bins[0];
-    double min = numbers[0];
-    double max = numbers[0];
-
-    find_minmax(numbers, min, max);
-    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;
-            }
-        }
-
-        if (!found)
-        {
-            bins[bin_count - 1]++;
-        }
-    }
-    return bins;
-}
-
-void show_histogram_text(vector<int> &bins, size_t bin_count)
-{
-    int max_count = bins[0];
-    for (int i = 0; i < bin_count; i++)
-    {
-        if (bins[i] > max_count)
-        {
-            max_count = bins[i];
-        }
-    }
-    vector<double> height(bin_count);
-    for (int i = 0; i < bin_count; i++)
-    {
-        if (bins[i] > MAX_ASTERISK)
-        {
-            height[i] = (MAX_ASTERISK * bins[i]) / max_count;
-        }
-        else
-            height[i] = bins[i];
-    }
-
-    for (int i = 0; i < bin_count; i++)
-    {
-
-        if (bins[i] < 100)
-        {
-            cout << " ";
-        }
-
-        if (bins[i] < 10)
-        {
-            cout << " ";
-        }
-
-        cout << bins[i] << "|";
-
-        for (int j = 0; j < height[i]; j++)
-        {
-            cout << "*";
-        }
-        cout << endl;
-    }
-}
-
 int main()
 {
     auto in = input_data();
     auto bins = make_histogram(in.numbers, in.bin_count);
-    show_histogram_text(bins, in.bin_count);
+    show_histogram_svg(bins); 
     return 0;
 }
\ No newline at end of file
diff --git a/text.cpp b/text.cpp
new file mode 100644
index 0000000..bc497ba
--- /dev/null
+++ b/text.cpp
@@ -0,0 +1,51 @@
+#include <iostream>
+#include <vector>
+#include "text.h"
+
+const size_t SCREEN_WIDTH = 80;
+const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
+
+
+void show_histogram_text(std::vector<int> &bins, size_t bin_count)
+{
+    int max_count = bins[0];
+    for (int i = 0; i < bin_count; i++)
+    {
+        if (bins[i] > max_count)
+        {
+            max_count = bins[i];
+        }
+    }
+    std::vector<double> height(bin_count);
+    for (int i = 0; i < bin_count; i++)
+    {
+        if (bins[i] > MAX_ASTERISK)
+        {
+            height[i] = (MAX_ASTERISK * bins[i]) / max_count;
+        }
+        else
+            height[i] = bins[i];
+    }
+
+    for (int i = 0; i < bin_count; i++)
+    {
+
+        if (bins[i] < 100)
+        {
+           std::cout << " ";
+        }
+
+        if (bins[i] < 10)
+        {
+            std::cout << " " ;
+        }
+
+        std::cout << bins[i] << "|";
+
+        for (int j = 0; j < height[i]; j++)
+        {
+            std::cout << "*";
+        }
+       std::cout << std::endl;
+    }
+}
\ No newline at end of file
diff --git a/text.h b/text.h
new file mode 100644
index 0000000..d7d9fc2
--- /dev/null
+++ b/text.h
@@ -0,0 +1,8 @@
+#ifndef TEXT_H_INCLUDED
+#define TEXT_H_INCLUDED
+#include <vector>
+
+void 
+show_histogram_text(std::vector<int> &bins, size_t bin_count);
+
+#endif // TEXT_H_INCLUDED