
Сообщение от
Nevado4ka
просто именно с нечетными строками я отсекаю первую сверху строку и правый крайний столбец
Так в ТЗ прописано? Или можно отсекать любые?
Добавлено через 8 минут
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| template <class T> void swapInSqr(T **arr, int rows, int cols)
{
rows -= (rows & 1);
cols -= (cols & 1);
for(int i = 0; i < rows; i += 2)
for(int j = 0; j < cols; j += 2)
{
T tmp = arr[i][j];
arr[i][j] = arr[i + 1][j + 1];
arr[i + 1][j + 1] = tmp;
tmp = arr[i][j + 1];
arr[i][j + 1] = arr[i + 1][j];
arr[i + 1][j] = tmp;
}
} |
|
При нечетном количестве строк, отсекает нижнюю строку, при нечетном количестве столбцов - правый. Чтобы изменить к примеру столбцы, нужно убрать строчку cols -= (cols & 1); и в цикле прописать int j = (cols & 1), т.е. этот
код
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| template <class T> void swapInSqr(T **arr, int rows, int cols)
{
rows -= (rows & 1);
for(int i = 0; i < rows; i += 2)
for(int j = (cols & 1); j < cols; j += 2)
{
T tmp = arr[i][j];
arr[i][j] = arr[i + 1][j + 1];
arr[i + 1][j + 1] = tmp;
tmp = arr[i][j + 1];
arr[i][j + 1] = arr[i + 1][j];
arr[i + 1][j] = tmp;
}
} |
|
будет отсекать нижнюю строку и левый столбец. С изменением строки аналогично меняете int i = 0;