From 608ddbf85f9de5af466bd60e9aba8195ae34e8a3 Mon Sep 17 00:00:00 2001
From: TroyanovDS <TroyanovDS@mpei.ru>
Date: Fri, 2 Jun 2023 12:23:18 +0300
Subject: [PATCH] =?UTF-8?q?code:=20=D0=92=D0=B2=D0=BE=D0=B4=20=D0=B8=D0=B7?=
 =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B8=D0=B7=D0=B2=D0=BE=D0=BB=D1=8C=D0=BD?=
 =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=BE=D1=82=D0=BE=D0=BA=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 main.cpp | 94 +++++++++-----------------------------------------------
 1 file changed, 15 insertions(+), 79 deletions(-)

diff --git a/main.cpp b/main.cpp
index 227410a..7b7df19 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,6 +1,9 @@
 #include <iostream>
 #include <cmath>
 #include <vector>
+#include "histogram.h"
+#include "text.h"
+#include "svg.h"
 using namespace std;
 
 const size_t SCREEN_WIDTH = 80;
@@ -9,115 +12,48 @@ const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
 struct Input {
     vector<double> numbers;
     size_t bin_count{};
+    vector<string> fill;
 };
 
 Input
-input_data()
+input_data(istream& inx)
 {
 
 size_t number_count;
 cerr << "number_count= ";
-cin >> number_count;
+inx >> number_count;
 
 Input in;
 
 in.numbers.resize(number_count);
 cerr << "numbers: ";
 for (size_t i = 0; i < number_count; i++) {
-    cin >> in.numbers[i];
+    inx >> in.numbers[i];
 }
 
 cerr << "bin_count= ";
-cin >> in.bin_count;
+inx >> in.bin_count;
 
-return in;
-}
-
-void
-find_minmax(const vector<double>& numbers, double &min, double &max)
-{
-
-    min = numbers[0];
-    max = numbers[0];
-    for (size_t i = 0; i < numbers.size(); i++)
-    {
-        if (numbers[i] > max)
-            max = numbers[i];
-        if (numbers[i] < min)
-            min = numbers[i];
-    }
-}
-
-vector <size_t> make_histogram (const vector<double>& numbers, size_t &bin_count)
-{
-   vector <size_t> bins(bin_count);
-
-   double min, max;
-   float low, hi;
+in.fill.resize(in.bin_count);
 
-   find_minmax(numbers, min, max);
-
-   double bin_size = (max - min) / bin_count;
-   low = min;
-    hi = low + bin_size;
-
-    for (size_t i = 0; i < numbers.size(); i++)
+for (size_t i = 0; i < in.bin_count; i++)
     {
-        bool found = false;
-
-        for (size_t 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]++;
-        }
+        cerr << "Cvet: ";
+        inx >> in.fill[i];
     }
-    return bins;
-}
 
-void show_histogram_text(const vector<size_t>& bins, size_t &bin_count)
-{
-
-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);
-}
-if (bin < 100)
-cout << " ";
-if (bin < 10)
-cout << " ";
-cout << bin << "|";
-for (int i = 0; i < height; i++)
-cout << "*";
-cout << endl;
-}
+return in;
 }
 
 
 int
 main()
 {
-
-    auto in = input_data();
+    auto in = input_data(cin);
 
     auto bins = make_histogram(in.numbers, in.bin_count);
 
-    show_histogram_text(bins, in.bin_count);
+    show_histogram_svg(bins, in.fill);
 
     return 0;
 }