Please help me, why elements 1 and 2 are not transferred to 2 elements counterclockwise, what needs to be corrected? Code:
#include "stdafx.h" #include iostream> #include stdlib.h> #include stdio.h> using namespace std; int main() { int ROW, COL; int **mArray; setlocale(LC_ALL, "Russian"); cout << "Перенос элементов прямоугольной матрицы на 2 элемента против часовой стрелки\n\n"; cout << "Введите количество столбцов:\n"; cin >> COL; cout << "Введите количество строк: \n"; cin >> ROW; if (COL != ROW) { mArray = new int *[ROW]; cout << "Введите элементы матрицы \n"; for (int i = 0; i < ROW; i++) { mArray[i] = new int[COL]; for (int j = 0; j < COL; j++) cin >> mArray[i][j]; } int * arrPerimetr = NULL, perimetr = 0, i = 0, j = 0, n = 0, m = 0, k = 0, shift = 2; /* насколько сдвигаем */ perimetr = (ROW + COL) * 2 - 4; m = perimetr - 1; arrPerimetr = (int*)malloc(sizeof(int) * perimetr); for (i = 0; i < ROW; i++) { printf("\n"); for (j = 0; j < COL; j++) { if (i == 0 || (i > 0 && j == COL - 1)) { arrPerimetr[n] = mArray[i][j]; n++; } if (j == 0 && i > 0 || (i == ROW - 1 && j < COL - 1)) { arrPerimetr[m] = mArray[i][j]; m--; } printf("\t%d", mArray[i][j]); } } puts("\n\n Результат:"); /*fill*/ n = shift; k = 0; m = perimetr - 1; for (i = 0; i < ROW; i++) { printf("\n"); for (j = 0; j < COL; j++) { if (i == 0 || (i > 0 && j == COL - 1)) { mArray[i][j] = arrPerimetr[n]; n++; } if (j == 0 && (i > 0 && i <= shift)) { mArray[i][j] = arrPerimetr[k]; k++; } if ( (j == 0 && i > shift && i < COL - 1) || (i == ROW - 1 && j > 0 && j <= ROW) ) { mArray[i][j] = arrPerimetr[m]; m--; } printf("\t%d", mArray[i][j]); } } printf("\n"); free(arrPerimetr); } else cout << "\n\nМатрица квадратная" << endl; system("pause"); } PS Here is a screenshot of the program:
