diff --git a/lab01.cbp b/lab01.cbp
index d541ad7..fb64a0d 100644
--- a/lab01.cbp
+++ b/lab01.cbp
@@ -32,6 +32,7 @@
+
diff --git a/main.cpp b/main.cpp
index 3aedbe9..92b7230 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,27 +1,32 @@
#include
#include
-
using namespace std;
-int main()
-{
- const size_t SCREEN_WIDTH = 80;
- const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1;
+struct Input {
+ vector 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 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 bins(bin_count);
+ cin >> in.bin_count;
+ return in;
+}
- double min = numbers[0];
- double max = numbers[0];
+void
+find_minmax(const vector& 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
+make_histogram(const vector& numbers, size_t bin_count){
+ size_t number_count = numbers.size();
+ vector 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& 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);
}