Другие языки программирования и технологии

C++ одномерный массив

В одномерном массиве состоящем из N вещественных элементов вычислить:
1) Сумму элементов массива с отрицательными номерами;
2) Сумму элементов массива, расположенных между первым и последним отрицательными элементами.
3) Сжать массив, удалив из него элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями.
1) Пусть будет "сумма отрицательных элементов".

#include <ctime>
#include <cstdlib>
#include <numeric>
#include <iterator>
#include <iostream>
#include <algorithm>

using namespace std;

int main() {
    srand(time(0));
    int n;
    cout << "n? ";
    cin >> n;
    double *a = new double[n], *e = a + n;
    generate_n(a, n, [](){ return (rand() % 101 - 50) / 10.0; });
    cout << "массив: \n";
    auto oit = ostream_iterator<double>(cout, " ");
    copy(a, e, oit);
    auto sn = accumulate(a, e, 0.0,
        [](double s, double e){ return s + (e < 0? e : 0); });
    cout << "\nсумма отрицательных элементов: " << sn;
    auto op = [](double e){ return e < 0; };
    auto f = find_if(a, e, op) + 1;
    if (f != a + n) {
        typedef reverse_iterator<double> rit;
        auto l = find_if(rit(e), rit(a), op).base() - 1;
        auto s = f < l? accumulate(f, l, 0.0) : 0.0;
        cout << "\ncумма элементов м/у первым и последним отрицательными: " << s;
    }
    auto ne = remove_if(a, e, [](double e){ return abs(e) < 1; });
    fill(ne, e, 0);
    cout << "\nизмененный массив: \n";
    copy(a, e, oit);
    cout << endl;
}
Сапарбек Эдилов
Сапарбек Эдилов
97 104
Лучший ответ
Отрицательными номера (индексы массива) быть не могут. Они могут быть только целыми числами >= 0.

Остальное - поня. Делается очень просто.