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

Помогите с решением задачи на C++

Помогите, пожалуйста решить задачу на C++!
В одномерном массиве, вводимом с клавиатуры и состоящем из 15 вещественных элементов, вычислить, используя фунцкции пользователя: 1) сумму элементов массива с нечетными номерами; 2) сумму элементов массива, расположенных между первым и последним отрицатльными элементами.
Ввод сам напишешь
1) for (int i=1; i<15; i+2) {Sum=Sum+a[i]}

2)
for (int i=1; i<15; i++) {Sum=Sum+a[i]}
bool b=false;
for (int i=1; i<15; i++) {if (b) {Sum=Sum-a[i];} if (a[i]<0) {b=false}}
b=false;
for (int i=15; i>1; i--) {if (b) {Sum=Sum-a[i];} if (a[i]<0) {b=false}}
Дима Абросимов
Дима Абросимов
22 763
Лучший ответ
#include <iostream>
#include <iomanip>
using namespace std;
double sum_a(const double* v, const size_t n) {
auto s = 0.0;
for (auto i = 0U; i < n; i += 2U) s += v[i];
return s;
}
double sum_b(const double* v, const size_t n) {
auto s = 0.0;
for (auto i = 1U; i < n; i += 2U) s += v[i];
return s;
}
const double* first(const double* v, const size_t n) {
for (auto i = 1U; i < n; ++i) if (v[i] < 0U) return v + i;
return v + n;
}
const double* last(const double* v, const int n) {
for (auto i = n - 1; i >= 0; --i) if (v[i] < 0) return v + i;
return v + n;
}
double between(const double* start, const double* end) {
auto beg = start;
auto s = 0.0;
while (++beg < end) s += *beg;
return s;
}
void print(const double* v, const size_t n, streamsize w = 5U) {
for (auto i = 0U; i < n; ++i) cout << setw(w) << v[i];
cout.put('\n');
}
int main() {
double box[] = {
2.3, 3.7, -1.4, 7.2, 5.4,
1.5, 5.2, 3.8, 2.4, -9.6,
1.8, 5.1, -2.7, 2.9, 0.7
};
print(box, size(box));
auto even = sum_b(box, size(box));
cout << "Amount in even positions: " << even << '\n';
auto start = first(box, size(box));
auto end = last(box, size(box));
auto sum = between(start, end);
cout << "Sum between... " << sum << endl;
system("pause");
}