C/C++

Программа на С++ с использованием vector

Задание:
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) номер минимального по модулю элемента массива;
2) сумму модулей элементов массива, расположенных после первого от-
рицательного элемента.
3)Сжать массив, удалив из него все элементы, величина которых находится в интервале [a;b] Освободившиеся элементы в конце массива заполнить нулями
#include iostream
#include vector
#include cmath
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
double s = 0;
int k = 1000000;
int n, a, b;
int p = 0;
cout << "Введите размер массива" << endl;
cin >> n;
vector A(n);
cout << "Заполните массив" << endl;
for (int i = 0; i < n; i++) {
cin >> A[i];
}
int min = A[0];
for (int i = 0; i < n; i++) {
if (abs(A[i]) < min) {
min = A[i];
p = i;
}
}
for (int i = 0; i < n; i++) {
if (A[i] < 0) {
k = i;
break;
}
}
for (int i = k + 1; i < n; i++) {
s = s + abs(A[i]);
}
cout << "Номер минимального по модулю элемента массива: " << p << endl;
cout << "Сумма модулей элементов расположенных после первого отрицательного элемента: " << s << endl;
cout << "Введите интервал " << endl;
cin >> a >> b;

for (int i = 0; i < n; i++) {
cout << A[i] << " ";
}
return 0;
}

Не могу разобраться с 3 пунктом, помогите пожалуйста
#include <algorithm>
#include <iostream>
#include <vector>
#include <iterator>
#include <numeric>
#include <iterator>
using namespace std;
double real(const char* msg) {
cout << msg;
double value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
unsigned integer(const char* msg) {
cout << msg;
unsigned value;
cin >> value;
cin.ignore(cin.rdbuf()->in_avail());
return value;
}
int main() {
system("chcp 1251 > nul");
const auto n = integer("Введите размер массива: ");
vector<double> box(n);
puts("Заполните массив");
for (auto& x : box) cin >> x;
const auto comp = [](double a, double b) { return fabs(a) < fabs(b); };
const auto iter = min_element(box.begin(), box.end(), comp);
const auto index = distance(box.begin(), iter);
cout << "Номер минимального по модулю элемента: " << index + 1 << '\n';
const auto seek = [](double x) { return x < 0; };
const auto first = find_if(box.begin(), box.end(), seek);
auto sum = 0.0;
if (first != box.end()) {
const auto shell = [](double acc, double x) { return acc += fabs(x); };
sum = accumulate(first + 1, box.end(), 0.0, shell);
}
cout << "Сумму модулей после первого отрицательного: " << sum << '\n';
const auto a = real("a: ");
const auto b = real("b: ");
const auto match = [a, b](double x) { return x >= a && x <= b; };
box.erase(remove_if(box.begin(), box.end(), match), box.end());
box.shrink_to_fit();
copy(box.begin(), box.end(), ostream_iterator<double>(cout, " "));
puts("");
system("pause > nul");
}
Игорь Раковский
Игорь Раковский
73 657
Лучший ответ
Андрей Хижняк Помогите,Николай!!!
Вот задание:
Дана последовательность из чисел(использовать массив) и в ней нужно найти самую большую(длинную) последовательность, которая не содержит нулевых значений. Заранее огромное спасибо!
Если кратко, можно поочерёдно, начиная с A[a], присваивать элементы, которые следуют после A[b], а когда они кончатся, начать всё остальное обнулять
Tariel Aytiev
Tariel Aytiev
2 322
прости, но я не разбираюсь в кодинге, не мое это.
Vasia Skvortsov
Vasia Skvortsov
534