Циклический сдвиг прямоугольной матрицы
Нужно осуществить сдвиг прямоугольной матрицы на k элементов вправо или вниз, где k может быть больше кол-ва элементов в строке или столбце. Код работает в целом, но сдвиг вниз не работает. Я вроде перевернул массив, но неудачно. p.s. Если кто-то покажет как написать сдвиг проще, буду очень благодарен.
int main(){
int m, n, k, side;
double tmp;
cout << "Enter the size of matrix.\n";
cin >> m >> n; //m-строки, n-столбцы
double** arr = new double* [m];
for (int i = 0; i < m; i++){
arr[i] = new double[n];
}
for (int i = 0; i < m; i++){ //Заполнение случайными числами и вывод изначальной матрицы.
for (int j = 0; j < n; j++){
arr[i][j] = rand() % 50;
cout << arr[i][j] << "\t";
}
cout << "\n";
}
cout << "Select the number you want to shift by.\n";
cin >> k; //Число на которое будет выполнен сдвиг.
cout << "Now enter 1 to move the matrix to the right or 2 to move it down.\n";
cin >> side; //Выбор стороны
if (side==1){
for (int c = 0; c < k; c++){
for (int i = 0; i < m; i++){
tmp = arr[i][n-1];
for (int j = n; j > 0; j--){
arr[i][j] = arr[i][j - 1];
}
arr[i][0] = tmp;
}
}
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
cout << arr[i][j] << "\t";
}
cout << "\n";
}
}
else if (side == 2){
for (int c = 0; c < k; c++){
tmp = arr[m - 1][j];
for (int i = m; i > 0; i--){
arr[i][j] = arr[i - 1][j];
}
arr[0][j] = tmp;
}
for (int i = 0; i < m; i++){
for (int j = 0; j < n; j++){
cout << arr[i][j] << "\t";
}
cout << "\n";
}
}
else{
cout << "Error! You entered the wrong number.";
}
return 0;
}