Тема: Двовимірний динамічний масив (додати стовбчик у вказану позицію)
Привіт. Потрібна допомога в наступній задачі
Дано двовимірний масив, розміри якого задає користувач. В даний масив потрібно вставити стовбчик у вказану користувачем позицію. Використовувати можна лише вказівники. Жодних індексів!!!
У мене зациклює функція copy_arr. Що з нею не так?
Дякую
void init_arr(int *arr, int x_size)
{
for (int *arr_ptr = arr; arr_ptr < arr + x_size; ++arr_ptr)
{
*arr_ptr = rand() % 50 - 25;
}
}
void arr_initialization(int **arr, int lines, int columns) // ініціалізація масиву
{
for (int **arr_ptr_ptr = arr; arr_ptr_ptr < arr + lines; ++arr_ptr_ptr)
{
*arr_ptr_ptr = new int[columns];
init_arr(*arr_ptr_ptr, columns);
}
}
void print_arr(int **arr, int lines, int columns) // друк масиву
{
for (int **arr_ptr_ptr = arr; arr_ptr_ptr < arr + lines; ++arr_ptr_ptr)
{
for (int *arr_ptr = *arr_ptr_ptr; arr_ptr < *arr_ptr_ptr + columns; ++arr_ptr)
{
cout << setw(4) << *arr_ptr;
}
cout << endl;
}
}
void copy_arr(int **arr_scr, int lines, int columns, int **arr_dst) //копіювання масиву
{
for (int **arr_scr_ptr_ptr = arr_scr; arr_scr_ptr_ptr < arr_scr + lines; ++arr_scr_ptr_ptr)
{
for (int *arr_scr_ptr = *arr_scr_ptr_ptr; arr_scr_ptr < *arr_scr_ptr_ptr + columns; ++arr_scr_ptr, ++arr_dst)
{
*arr_dst = arr_scr_ptr;
arr_scr_ptr = nullptr;
}
}
}
int **add_column_to_arr(int **arr, int lines, int *columns, int index)
{
int new_size = *columns + 1;
int **arr_ptr_ptr = new int*[lines];
for (int y = 0; y < lines; ++y)
{
arr_ptr_ptr[y] = new int[new_size];
}
copy_arr(arr, lines, index, arr_ptr_ptr);
copy_arr(arr + index, lines, *columns - index, arr_ptr_ptr + index + 1);
for (int y = 0; y < lines; ++y)
{
arr_ptr_ptr[y][index] = 1;
}
*columns = new_size;
return arr_ptr_ptr;
for (int y = 0; y < lines; ++y)
arr_ptr_ptr[y] = new int[*columns];
clear_arr(arr_ptr_ptr, lines);
}
void task1()
{
int lines = 0;
int columns = 0;
cout << "Array initialization." << endl;
cout << "Enter number of lines : ";
cin >> lines;
cout << "Enter number of columns : ";
cin >> columns;
int **dimm2_arr;
dimm2_arr = new int *[lines];
for (int i = 0; i < lines; i++)
{
dimm2_arr[i] = new int[columns];
}
arr_initialization(dimm2_arr, lines, columns);
print_arr(dimm2_arr, lines, columns);
int index;
do
{
cout << "Enter the index of column to add : ";
cin >> index;
} while (index < 0 || index > columns);
dimm2_arr = add_column_to_arr(dimm2_arr, lines, &columns, index);
print_arr(dimm2_arr, lines, columns);
clear_arr(dimm2_arr, lines);
}