• Предмет: Информатика
  • Автор: Молодочек
  • Вопрос задан 1 год назад

Срочно! С++ . Одномерный массив

Приложения:

Koljisto: Не головоломок, а любителям знатно потролить автора
Koljisto: Хотя задачка в принципе решаема
Молодочек: Размер массива взят как 5 что бы показать что массив статический а не динамический
Молодочек: Сути это не менят
BobbyFresnel: Да, решаемая, если ее минут 15 еще формулировать.
BobbyFresnel: Поотому что если все, как тут пыталичь на примере объяснить, есть еще частные случаи. Вспоминаем, что последовательность (если она реально последовательность) может быть пустой, может содержать один элемент....\
Молодочек: Тут последовательность рассматривается в интуитивно простом виде: 2 и больше отрицательных чисел будут последовательностью
BobbyFresnel: То, что последовательность - это два и более элемента - это уже Ваше, авторское прочтение термина. Но об этом надо в задании писать
Koljisto: Тогда нет особого смысла искать абсолютное среднее, как и изменение максимальных в этой последовательности
BobbyFresnel: Вот я то же самое хотел сказать, но не успел еще.

Ответы

Ответ дал: Koljisto
0

#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);

}


Koljisto: Забыл убрать вот это только :)
if (vec.size() == 1)

return {-100000};
BobbyFresnel: Да... я думаю, в том же PascalABС.NET это все пишется в десяток строк. Или что-то в этом роде.
BobbyFresnel: Но, как тут вчера один решатель написал. "зато не паскаль"
Koljisto: "Паскаль для школьников"
Koljisto: Не помню кем сказано
BobbyFresnel: Неточно сказано. Паскаль - для обучения программированию в качестве ПЕРВОГО изучаемого языка.
BobbyFresnel: Все прочие языки карявят незрелое алгоритмическое мышление, если с них начать.
BobbyFresnel: А Паскаль Виртом как раз создавался для обучения. А Вирт - он отнюдь не дурачок.
Вас заинтересует