#include using namespace std; /// @brief Переворачивает две половины массива относительно центра и вставляет в середину заданное число /// @param arr указатель на динамический массив /// @param size размер динамического массива /// @param value вставляемое значение в середину void insert_to_list(int *& arr, int & size, const int & value) { // Реализацию писать тут /* Рекомендация: Можно сделать вспомогательную функцию для переворота части массива, например: void arr_part_reverse(int * start, int * end); Замечания: 1. Если размер массива нечетный, то элемент массива в центре относить к левой половине массива при перевороте 2. Если размер массива равен единице, то произвести вставку в начало массива 3. Если размер массива нулевой (при этом arr == nullptr), то результирующий массив должен состоять из одного элемента Примеры: 1) Вход: arr = [1, 2, 3, 4, 5], size = 5, value = -101 Измененный arr = [3, 2, 1, -101, 5, 4], size = 6 2) Вход: arr = [1, 2, 3, 4, 5, 6], size = 6, value = 0 Измененный arr = [3, 2, 1, 0, 6, 5, 4], size = 6 3) Вход: arr = [1], size = 1, value = 5 Измененный arr = [5, 1], size = 2 4) Вход: arr = nullptr, size = 0, value = 5 Измененный arr = [5], size = 1 5) Вход: arr = [1, 2], size = 2, value = 10 Измененный arr = [1, 10, 2], size = 3 */ } bool compare_arr(const int * arr1, const int & size1, const int * arr2, const int & size2); void task_call_wrapper(int *& arr, int & size, const int & value); int main() { // Tests int size = 7; int * a = new int[7] {5, 5, 1, -9, 0, 1, 10}; task_call_wrapper(a, size, 1000); int * b = new int[8] {-9, 1, 5, 5, 1000, 10, 1, 0}; cout << "Test 1: " << (compare_arr(a, size, b, 8) ? "Passed" : "Failed") << endl; delete[] a; delete[] b; size = 0; a = nullptr; task_call_wrapper(a, size, 1000); b = new int[1] {1000}; cout << "Test 2: " << (compare_arr(a, size, b, 1) ? "Passed" : "Failed") << endl; if (a != nullptr) delete[] a; delete[] b; size = 1; a = new int[1] {-10}; task_call_wrapper(a, size, 1000); b = new int[2] {1000, -10}; cout << "Test 3: " << (compare_arr(a, size, b, 2) ? "Passed" : "Failed") << endl; delete[] a; delete[] b; size = 4; a = new int[4] {0, 10, 90, 15090}; task_call_wrapper(a, size, 1000); b = new int[5] {10, 0, 1000, 15090, 90}; cout << "Test 4: " << (compare_arr(a, size, b, 5) ? "Passed" : "Failed") << endl; delete[] a; delete[] b; size = 3; a = new int[3] {0, 10, 1}; task_call_wrapper(a, size, 1000); b = new int[4] {10, 0, 1000, 1}; cout << "Test 5: " << (compare_arr(a, size, b, 4) ? "Passed" : "Failed") << endl; delete[] a; delete[] b; size = 11; a = new int[11] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; task_call_wrapper(a, size, 1000); b = new int[12] {6, 5, 4, 3, 2, 1, 1000, 11, 10, 9, 8, 7}; cout << "Test 6: " << (compare_arr(a, size, b, 12) ? "Passed" : "Failed") << endl; delete[] a; delete[] b; size = 10; a = new int[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; task_call_wrapper(a, size, 1000); b = new int[11] {5, 4, 3, 2, 1, 1000, 10, 9, 8, 7, 6}; cout << "Test 7: " << (compare_arr(a, size, b, 11) ? "Passed" : "Failed") << endl; delete[] a; delete[] b; return EXIT_SUCCESS; } void task_call_wrapper(int *& arr, int & size, const int & value) { try { insert_to_list(arr, size, value); } catch (...) { cout << "Inner function error" << endl; } } bool compare_arr(const int * arr1, const int & size1, const int * arr2, const int & size2) { if (size1 != size2) return false; if (arr1 == nullptr && arr2 == nullptr) return true; if (arr1 == nullptr || arr2 == nullptr) return false; for (auto i = 0; i < size1; ++i) if (arr1[i] != arr2[i]) return false; return true; }