Не совсем понял всех условий, например "все значения функций должны быть перенаправлены в качестве параметров", по этому если это условие не выполнено - объясни мне что это такое и я переделаю.
Не делал итераторы цикла динамическими ибо это не имеет смысла, остальные переменные я использовал как указатели.
Тестировал на GNU GCC, всё работает, писал на чистой Си.
<h2>Мой вариант решения:</h2>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//Создание нашей матрицы
int** NewMatrix(int *row, int* col)
{
int** matrix = new int*[*col];
for(int i = 0; i < *col; ++i)
{
matrix[i] = new int[*row];
}
return matrix;
}
//удаление матрицы
void DestroyMatrix(int **matrix, int *col)
{
for(int i = 0; i < *col; ++i)
{
delete[]matrix[i];
}
delete[]matrix;
}
//заполнение матрицы случайными числами
int ** Random(int**matrix, int* col, int *row)
{
srand(time(0));
for(int i = 0; i < *col; ++i)
{
for(int j = 0; j < *row; ++j)
{
matrix[i][j] = rand()%10;
}
}
return matrix;
}
//вывести матрицу на экран
void ShowMatrix(int**matrix, int* col, int *row)
{
for(int i = 0; i < *col; ++i)
{
for(int j = 0; j < *row; ++j)
{
printf("%d ",matrix[i][j]);
}
printf("\n");
}
}
//функция сдвигает крайние элементы по кольцу
int **Roll(int**matrix, int *col, int *row)
{
int **mx = NewMatrix(row,col);
//копирование элементов с верхней строки в последний столб
for(int i = 0; i < *col; ++i)
{
mx[i][*col-1] = matrix[0][i];
}
//копирование последнего столба в последнюю строку
for(int i = 0, j = *col-1; i < *col; ++i,j--)
{
mx[*col-1][i] = matrix[j][*col-1];
}
//копирование последней строки в первый столб
for(int i = 0; i < *col; ++i)
{
mx[i][0] = matrix[*col-1][i];
}
//копирование первого столба в первую строку
for(int i = 0, j = *col-1; i < *col; ++i,j--)
{
mx[0][i] = matrix[j][0];
}
//копирование остальных элементов в середине матрицы
for(int i = 1; i < *col-1; ++i)
{
for(int j = 1; j < *row-1; ++j)
{
mx[i][j]=matrix[i][j];
}
}
//удаление лишней матрицы
DestroyMatrix(matrix,col);
return mx;
}
int main()
{
int *row = new int(5);
int *col = new int(5);
int **mx = NewMatrix(row,col);
mx = Random(mx,col,row);
ShowMatrix(mx,col,row);
mx = Roll(mx,col,row);
printf("\nRolling...\n\n");
ShowMatrix(mx,col,row);
DestroyMatrix(mx,col);
delete row;
delete col;
system("pause");
}
<h2 />