/*После ввода количества чисел предлагайте пользователю генерировать их. При положительном ответе заполните исходный массив при помощи функции rand(): каждый элемент должен быть суммой 12 ее результатов. Указание. В начале программы добавьте srand(time(0)), чтобы случайные числа отличались между запусками программы (аналог Randomize() в Pascal). Для составления эталонного вывода замените time(0) на 42.*/ #include #include #include #include using namespace std; int main() { //# Переменные + начало программы(вводы) const size_t SCREEN_WIDTH = 80; const size_t MAX_ASTERISK = SCREEN_WIDTH - 3 - 1; size_t number_count, bin_count, max_count = 0; cerr << "Enter number count: "; cin >> number_count; vector numbers(number_count); char gen_num; cerr << "randoma want? (y/n): "; cin >> gen_num; if (gen_num == 'y') { //srand(42); srand(time(0)); for (int i = 0; i != number_count; i++) { double sum = 0; for (int j = 0; j < 12; j++) { sum += rand(); } numbers[i] = sum; } } else { for (int i = 0; i != number_count; i++) { cerr << "Input number \n"; cin >> numbers[i]; } } cerr << "korzinki? "; cin >> bin_count; vector bins(bin_count); double min = numbers[0]; double max = numbers[0]; for (double x : numbers) { if (x < min) { min = x; } else if (x > max) { max = x; } } double bin_size = (max - min) / bin_count; for (size_t i = 0; i < number_count; 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]++; } } //--- //# Вывод гисты size_t height = 76 * (static_cast(bin_count) / max_count); for (int i = 0; i != bin_count; i++) { if (bins[i] > max_count) { max_count = bins[i]; } } if (max_count > 76) { for (int i = 0; i != bin_count; i++) { if (bins[i] < 100 && bins[i] > 10) { cout << " " << bins[i] << "|"; } else if (bins[i] < 10) { cout << " " << bins[i] << "|"; } else { cout << bins[i] << "|"; } if (bins[i] != max_count) { height = 76 * (bins[i] / max_count); for (int j = 0; j != height; j++) { cout << "*"; } cout << "\n"; } else { height = 76 * 1.0; for (int j = 0; j != height; j++) { cout << "*"; } cout << "\n"; } } } //----- else { for (int i = 0; i != bin_count; i++) { if (bins[i] < 100 && bins[i] > 10) { cout << " " << bins[i] << "|"; } else if (bins[i] < 10) { cout << " " << bins[i] << "|"; } else { cout << bins[i] << "|"; } for (int j = 0; j != bins[i]; j++) { cout << "*"; } cout << "\n"; } } } // | 3 3 5 5 5 4 4 4 4 4