commit 10c7983e3afae35c3a6c83470123066787e24345 Author: Miron Date: Mon Apr 10 09:35:34 2023 +0300 code: добавлен код проекта diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..14f0c48 --- /dev/null +++ b/main.cpp @@ -0,0 +1,81 @@ +#include +#include +#include +#include +#include +using namespace std; + +int main() +{ + size_t arr_count, bin_count; + float mx, mn, x; + vector arr; + vector bins; + cerr << "Enter number count: "; + cin >> arr_count; + cerr << "Enter " << arr_count << " numbers: "; + for (int i = 0; i < arr_count; i++) { + cin >> x; + arr.push_back(x); + } + cerr << "Enter bin count: "; + cin >> bin_count; + mx = arr[0]; + mn = arr[0]; + for (int i = 0; i < arr_count; i++) { + if (mx < arr[i]) mx = arr[i]; + if (mn > arr[i]) mn = arr[i]; + } + float diff = (mx - mn) / bin_count; + float n = mn; + float m = mn + diff; + size_t mxbin = 0; + for (int i = 0; i < bin_count; i++) { + size_t t = 0; + for (int j = 0; j < arr_count; j++) { + if ((i == bin_count - 1) && (arr[j] >= n) && (arr[j] <= m)) t++; + else if ((n <= arr[j]) && (arr[j] < m)) t++; + } + bins.push_back(t); + if (bins[mxbin] < t) mxbin = i; + n += diff; + m += diff; + } + + int blm = bins[mxbin]; + int y = -1; + while (blm > 0) { + blm = blm / 10; + y++; + } + const size_t SCREEN_WIDTH = 80; + const size_t MAX_ASTERISK = SCREEN_WIDTH - y - 2; + if (bins[mxbin] > MAX_ASTERISK) { + for (int i = 0; i < bin_count; i++) { + size_t r = bins[i]; + while (r < pow(10, y)) { + r *= 10; + cout << " "; + } + cout << bins[i] << "|"; + if (i == mxbin) for (int i = 0; i < MAX_ASTERISK; i++) cout << "*"; + else { + size_t height = MAX_ASTERISK * (static_cast (bins[i]) / bins[mxbin]); + for (int i = 0; i < height; i++) cout << "*"; + } + cout << endl; + } + } else { + for (int i = 0; i < bin_count; i++) { + size_t r = bins[i]; + while (r < pow(10, y)) { + r *= 10; + cout << " "; + } + cout << bins[i] << "|"; + for (int j = 0; j < bins[i]; j++) cout << "*"; + cout << endl; + } + } + return 0; +}