#include <stdio.h>
#define N 3
#define M 5
void swap(int * a, int * b)
{
const int temp = *b;
*b = *a;
*a = temp;
}
void printarray(int * B)
{
for(int i = 0; i < N; ++i)
{
for(int j = 0; j < M; ++j, ++B)
}
}
int main(void) {
int B[N][M];
int i, j;
// заполняем массив начальными значениями и выводим на экран
for(i = 0; i < N; ++i)
for(j = 0; j < M; ++j)
B[i][j] = i * M + j + 1;
printf("Начальный массив:\n"); printarray(& B[0][0]);
int beginrow, begincol, endrow, endcol;
int i1;
beginrow = 0;
begincol = 0;
endrow = N;
endcol = M;
for(i = 0; i < N / 2; ++i)
{
// для промежуточного хранения при обмене используется первый элемент подматрицы
// двигаем первую строку
i1 = beginrow;
for(j = begincol + 1; j < endcol; ++j)
swap(& B[beginrow][begincol], & B[i1][j]);
// двигаем последний столбец без первой и последней строк
j = endcol - 1;
for(i1 = beginrow + 1; i1 < (endrow - 1); ++i1)
swap(& B[beginrow][begincol], & B[i1][j]);
// двигаем последнюю строку в обратном порядке
i1 = endrow - 1;
for(j = endcol - 1; j >= begincol ; --j)
swap(& B[beginrow][begincol], & B[i1][j]);
// двигаем первый столбей в обратном порядке, кроме первой и последней строки
j = begincol;
for(i1 = endrow - 2; i1 > beginrow; --i1)
swap(& B[beginrow][begincol], & B[i1][j]);
++beginrow;
++begincol;
--endrow;
--endcol;
}
if(N % 2)
{
// Для нечетных N нужно дополнительно двинуть средний вектор
i1 = beginrow;
for(j = begincol + 1; j < endcol; ++j)
swap(& B[beginrow][begincol], & B[i1][j]);
}
printarray(& B[0][0]);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgTgkzCiNkZWZpbmUgTQk1Cgp2b2lkIHN3YXAoaW50ICogYSwgaW50ICogYikKewogIGNvbnN0IGludCB0ZW1wID0gKmI7CiAgKmIgPSAqYTsKICAqYSA9IHRlbXA7Cn0Kdm9pZCBwcmludGFycmF5KGludCAqIEIpCnsKICBmb3IoaW50IGkgPSAwOyBpIDwgTjsgKytpKQogIHsKICAJZm9yKGludCBqID0gMDsgaiA8IE07ICsraiwgKytCKQogIAkJcHJpbnRmKCIlZFx0IiwgKkIpOwogIAlwcmludGYoIlxuIik7CiAgfQp9CmludCBtYWluKHZvaWQpIHsKICBpbnQgQltOXVtNXTsKICBpbnQgaSwgajsKICAvLyDQt9Cw0L/QvtC70L3Rj9C10Lwg0LzQsNGB0YHQuNCyINC90LDRh9Cw0LvRjNC90YvQvNC4INC30L3QsNGH0LXQvdC40Y/QvNC4INC4INCy0YvQstC+0LTQuNC8INC90LAg0Y3QutGA0LDQvQogIGZvcihpID0gMDsgaSA8IE47ICsraSkKICAJZm9yKGogPSAwOyBqIDwgTTsgKytqKQogIAkJQltpXVtqXSA9IGkgKiBNICsgaiArIDE7CiAgcHJpbnRmKCLQndCw0YfQsNC70YzQvdGL0Lkg0LzQsNGB0YHQuNCyOlxuIik7CiAgcHJpbnRhcnJheSgmIEJbMF1bMF0pOwogIAogIGludCBiZWdpbnJvdywgYmVnaW5jb2wsIGVuZHJvdywgZW5kY29sOwogIGludCBpMTsKICBiZWdpbnJvdyA9IDA7CiAgYmVnaW5jb2wgPSAwOwogIGVuZHJvdyA9IE47CiAgZW5kY29sID0gTTsKICBmb3IoaSA9IDA7IGkgPCBOIC8gMjsgKytpKQogIHsKICAJLy8g0LTQu9GPINC/0YDQvtC80LXQttGD0YLQvtGH0L3QvtCz0L4g0YXRgNCw0L3QtdC90LjRjyDQv9GA0Lgg0L7QsdC80LXQvdC1INC40YHQv9C+0LvRjNC30YPQtdGC0YHRjyDQv9C10YDQstGL0Lkg0Y3Qu9C10LzQtdC90YIg0L/QvtC00LzQsNGC0YDQuNGG0YsKICAJLy8g0LTQstC40LPQsNC10Lwg0L/QtdGA0LLRg9GOINGB0YLRgNC+0LrRgwogIAlpMSA9IGJlZ2lucm93OwogIAlmb3IoaiA9IGJlZ2luY29sICsgMTsgaiA8IGVuZGNvbDsgKytqKQogIAkJc3dhcCgmIEJbYmVnaW5yb3ddW2JlZ2luY29sXSwgJiBCW2kxXVtqXSk7CiAgCS8vINC00LLQuNCz0LDQtdC8INC/0L7RgdC70LXQtNC90LjQuSDRgdGC0L7Qu9Cx0LXRhiDQsdC10Lcg0L/QtdGA0LLQvtC5INC4INC/0L7RgdC70LXQtNC90LXQuSDRgdGC0YDQvtC6CiAgCWogPSBlbmRjb2wgLSAxOwogIAlmb3IoaTEgPSBiZWdpbnJvdyArIDE7IGkxIDwgKGVuZHJvdyAtIDEpOyArK2kxKQogIAkJc3dhcCgmIEJbYmVnaW5yb3ddW2JlZ2luY29sXSwgJiBCW2kxXVtqXSk7CgkvLyDQtNCy0LjQs9Cw0LXQvCDQv9C+0YHQu9C10LTQvdGO0Y4g0YHRgtGA0L7QutGDINCyINC+0LHRgNCw0YLQvdC+0Lwg0L/QvtGA0Y/QtNC60LUKICAJaTEgPSBlbmRyb3cgLSAxOwogIAlmb3IoaiA9IGVuZGNvbCAtIDE7IGogPj0gYmVnaW5jb2wgOyAtLWopCiAgCQlzd2FwKCYgQltiZWdpbnJvd11bYmVnaW5jb2xdLCAmIEJbaTFdW2pdKTsKICAJLy8g0LTQstC40LPQsNC10Lwg0L/QtdGA0LLRi9C5INGB0YLQvtC70LHQtdC5INCyINC+0LHRgNCw0YLQvdC+0Lwg0L/QvtGA0Y/QtNC60LUsINC60YDQvtC80LUg0L/QtdGA0LLQvtC5INC4INC/0L7RgdC70LXQtNC90LXQuSDRgdGC0YDQvtC60LgKICAJaiA9IGJlZ2luY29sOwogIAlmb3IoaTEgPSBlbmRyb3cgLSAyOyBpMSA+IGJlZ2lucm93OyAtLWkxKQogIAkJc3dhcCgmIEJbYmVnaW5yb3ddW2JlZ2luY29sXSwgJiBCW2kxXVtqXSk7CiAgCQoJKytiZWdpbnJvdzsKCSsrYmVnaW5jb2w7CgktLWVuZHJvdzsKCS0tZW5kY29sOwogIH0KICBpZihOICUgMikKICB7CiAgCS8vINCU0LvRjyDQvdC10YfQtdGC0L3Ri9GFIE4g0L3Rg9C20L3QviDQtNC+0L/QvtC70L3QuNGC0LXQu9GM0L3QviDQtNCy0LjQvdGD0YLRjCDRgdGA0LXQtNC90LjQuSDQstC10LrRgtC+0YAKICAJaTEgPSBiZWdpbnJvdzsKICAJZm9yKGogPSBiZWdpbmNvbCArIDE7IGogPCBlbmRjb2w7ICsraikKCQlzd2FwKCYgQltiZWdpbnJvd11bYmVnaW5jb2xdLCAmIEJbaTFdW2pdKTsKICB9CgogIHByaW50Zigi0KDQtdC30YPQu9GM0YLQsNGCXG4iKTsKICBwcmludGFycmF5KCYgQlswXVswXSk7CiAgcmV0dXJuIDA7Cn0K