C/C++

Помогите решить задание

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
а) количество элементов массива, лежащих в диапазоне от А до В;
б) сумму элементов массива, расположенных после максимального элемента.
Упорядочить элементы массива по убыванию модулей элементов.
#include <iostream>
#include <random>
#include <iomanip>
using namespace std;
int main() {
cout << setw(6) << "n: ";
size_t n;
cin >> n;
puts("");
auto vec = new(nothrow) double[n];
if (vec != nullptr) {
const auto min = -2.0, max = 2.0;
uniform_real_distribution<> urd(min, max);
mt19937_64 gen{ random_device()() };
for (auto i = 0U; i < n; ++i) vec[i] = urd(gen);
cout << fixed << setprecision(2);
for (auto i = 0U; i < n; ++i) cout << setw(8) << vec[i];
puts("\n");
cout << setw(14) << "[a, b] >>> ";
double a, b;
cin >> a >> b;
if (a > b) swap(a, b);
auto count = 0U;
auto interval = [a, b](double x) {
return x >= a && x <= b;
};
for (auto i = 0U; i < n; ++i) if (interval(vec[i])) ++count;
cout << setw(10) << "count: " << count;
puts("\n");
auto max_element = min;
auto index = n + 1U;
auto more = [&max_element, &index](double x, size_t i) {
if (max_element < x) {
max_element = x;
index = i;
}
};
for (auto i = 0U; i < n; ++i) more(vec[i], i);
auto sum = 0.;
auto accumulate = [&sum](double x) {
sum += x;
};
for (auto i = index + 1; i < n; ++i) accumulate(vec[i]);
cout
<< setw(16) << "max element: " << max_element << '\n'
<< setw(10) << "index: " << index << '\n'
<< setw(24) << "sum (with rounding): " << sum;
puts("\n");
auto user_sort = [&vec, n]() {
for (auto i = 0U; i < n - 1U; i++)
for (auto j = 0U; j < n - i - 1U; j++)
if (vec[j] < vec[j + 1U])
swap(vec[j], vec[j + 1U]);
};
user_sort();
for (auto i = 0U; i < n; ++i) cout << setw(8) << vec[i];
puts("");
delete[] vec;
}
system("pause > nul");
}
Руслан Муйдинов
Руслан Муйдинов
82 883
Лучший ответ