#include <iostream>
#include <ctime>
#include <vector>
#include <numeric>
using namespace std;
void print_vector(vector<float> vec, int n) {
cout << endl;
for (float v : vec) {
cout << v << " ";
}
}
void print_vector_vectors(vector<vector<float>> const& mat) {
for (vector<float> row : mat) {
for (float val : row) {
cout << val << " ";
}
cout << endl;
}
}
vector<float> input_vector(vector<float> vec, int n) {
int elem;
for (int i = 0; i < n; i++) {
cin >> elem;
vec.push_back(elem);
}
return vec;
}
vector<float> input_vector_auto(vector<float> vec, int n) {
for (int i = 0; i < n; i++) {
vec.push_back(rand() % 7 - 5);
}
return vec;
}
float take_abs_in_vector(vector<float> vec) {
float sum = 0;
int size = 1;
for (int i = 0; i < vec.size(); i++) {
sum += abs(vec[i]);
}
float aver = sum / vec.size();
return aver;
}
vector<float> check_and_set_vector_abs(vector<float> vec, double abs1) {
if (vec.size() == 1)
return {-100000};
for (int i = 0; i < vec.size(); i++) {
if (abs(vec[i]) > abs1) {
vec[i] = abs1;
}
}
return vec;
}
bool check_truly_sequence_negative(vector<float> vec) {
int first;
int second;
int next;
int i = 2;
bool key1 = false;
bool key2 = false;
if (vec.size() == 1) //закомментить, если нужны единичные последовательности
return false;
if ((vec.size() == 2) && (vec[0] == vec[1])) // закомментить если нужны последовательности с одинаковым шагом в нуль
return false;
for (int val : vec) {
if (!key2 && key1) {
second = val;
key2 = true;
continue;
}
if (!key1) {
first = val;
key1 = true;
continue;
}
if (val - second != second - first) {
return false;
}
else {
first = second;
second = val;
continue;
}
}
return true;
}
vector<vector<float>> get_sequences_negative(vector<float> vec, int n) {
vector<vector<float>> vecs;
vector<float> vec1;
int index = 0;
for(const auto& v : vec){
if (v < 0) {
vec1.push_back(v);
continue;
}
else {
//print_vector(vec1, vec1.size());
if (check_truly_sequence_negative(vec1)) {
//if (check_truly_sequence_negative(vec1)) {
vecs.push_back(check_and_set_vector_abs(vec1, take_abs_in_vector(vec1)));
}
vec1.clear();
continue;
}
}
return vecs;
}
int main()
{
setlocale(LC_ALL, "Russian");
srand(time(NULL));
vector<float> vec;
vector<vector<float>> vec_vecs;
vector<float> const_vec = { -1,-2,-3,4,5 };
int n;
cout << "Введите количество элементов в массиве: ";
cin >> n;
vec = input_vector_auto(vec, n);
print_vector(vec, n);
vec_vecs = get_sequences_negative(vec, n);
print_vector_vectors(vec_vecs);
}