From ad998ba7566cf4ade8001bd3da4a4ae2e3f40a31 Mon Sep 17 00:00:00 2001 From: BoglazovIA Date: Sun, 6 Oct 2024 16:54:35 +0300 Subject: [PATCH] add cpp files --- personal/lab1.cpp | 120 ++++++++++++++++++++++++++++++++++++++++++++++ public/lab1.cpp | 103 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 223 insertions(+) create mode 100644 personal/lab1.cpp create mode 100644 public/lab1.cpp diff --git a/personal/lab1.cpp b/personal/lab1.cpp new file mode 100644 index 0000000..55d70dc --- /dev/null +++ b/personal/lab1.cpp @@ -0,0 +1,120 @@ +#include +#include +#include +#include +#include +using namespace std; + +const size_t screen_width = 80; +const size_t max_asterix = screen_width - 3 - 1; + +int main() +{ + // ============================ INPUT ============================ + size_t num_count=0; + cerr << "Enter number count: "; + cin >> num_count; + vector numbers(num_count); + cerr << "Enter " << num_count << " numbers\n"; + + for (int i = 0; i < num_count; ++i) + cin >> numbers[i]; + + cerr << "Enter bins count:"; + size_t bin_count = 0; + cin >> bin_count; + + // ============================ LOGIC ============================ + + double min = numbers[0]; + double max = numbers[0]; + + for (double x : numbers) + { + if (x < min) + { + min = x; + } + else if (x > max) + { + max = x; + } + } + + vector bins(bin_count); + double bins_size = (max - min) / bin_count; + + for (size_t i = 0; i < num_count; i++) + { + bool found = false; + for (size_t j = 0; (j < bin_count - 1) && !found; j++) + { + auto lo = min + j * bins_size; + auto hi = min + (j + 1) * bins_size; + if ((lo <= numbers[i]) && (numbers[i] < hi)) + { + bins[j]++; + found = true; + } + } + if (!found) + { + bins[bin_count - 1]++; + } + } + + size_t max_bin = bins[0]; + + for (size_t i=0; i < bin_count; i++) + { + if (max_bin < bins[i]) + { + max_bin = bins[i]; + } + } + //Округление и подсчет символьной длины размера корзины для выравнивания по крайнему символу границы корзины + stringstream bins_size_round; + bins_size_round << setiosflags(ios::fixed) << setprecision(2) << bins_size; + bins_size_round >> bins_size; + ostringstream bin_step; + bin_step << (max + bins_size); + string bin_step_string = bin_step.str(); + size_t line_size = bin_step_string.length(); + string line(line_size, ' '); + + // ============================ OUTPUT ============================ + + for (size_t i = 0; i < bin_count; i++) + { + cout << line; + if ((bins[i] < 100) && (max_bin >= 100)) + { + cout << " "; + } + if ((bins[i] < 10) && (max_bin >= 10)) + { + cout << " "; + } + cout << bins[i] << "|"; + size_t height = 0; + + if (max_bin > 76) + { + height = max_asterix * (static_cast(bins[i]) / max_bin); + } + else + { + height = bins[i]; + } + for(size_t j=0; j +#include +#include +using namespace std; + +const size_t screen_width = 80; +const size_t max_asterix = screen_width - 3 - 1; + +int main() +{ + // ============================ INPUT ============================ + size_t num_count=0; + cerr << "Enter number count: "; + cin >> num_count; + vector numbers(num_count); + cerr << "Enter " << num_count << " numbers\n"; + + for (int i = 0; i < num_count; ++i) + cin >> numbers[i]; + + cerr << "Enter bins count:"; + size_t bin_count = 0; + cin >> bin_count; + + // ============================ LOGIC ============================ + + double min = numbers[0]; + double max = numbers[0]; + + for (double x : numbers) + { + if (x < min) + { + min = x; + } + else if (x > max) + { + max = x; + } + } + + vector bins(bin_count); + double bins_size = (max - min) / bin_count; + + for (size_t i = 0; i < num_count; i++) + { + bool found = false; + for (size_t j = 0; (j < bin_count - 1) && !found; j++) + { + auto lo = min + j * bins_size; + auto hi = min + (j + 1) * bins_size; + if ((lo <= numbers[i]) && (numbers[i] < hi)) + { + bins[j]++; + found = true; + } + } + if (!found) + { + bins[bin_count - 1]++; + } + } + + size_t max_bin = bins[0]; + + for (size_t i=0; i < bin_count; i++) + { + if (max_bin < bins[i]) + { + max_bin = bins[i]; + } + } + // ============================ OUTPUT ============================ + + for (size_t i = 0; i < bin_count; i++) + { + if ((bins[i] < 100) && (max_bin >= 100)) + { + cout << " "; + } + if ((bins[i] < 10) && (max_bin >= 10)) + { + cout << " "; + } + cout << bins[i] << "|"; + size_t height = 0; + + if (max_bin > 76) + { + height = max_asterix * (static_cast(bins[i]) / max_bin); + } + else + { + height = bins[i]; + } + for(size_t j=0; j