Переставить местами элементы между верхним и нижним сектором матрицы - C (СИ)
Формулировка задачи:
Дана квадратная матрица. Пусть главная и побочная диагональ делит матрицу на четыре сектора. Переставить метами элементы между верхним и нижним сектором, а также между правым и левым. Обе диагонали обнулить.
Где ошибка?
#include <stdio.h>
#include <stdlib.h>
int main()
{
int N;
puts("Vvedite razmernost kvadratnoi matrici:");
scanf("%d",&N);
int a[N][N];
int i,j;
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
printf("Vvedite element matrici a[%d][%d]:\n",i,j);
scanf("%d",&a[i][j]);
}
}
puts("Vasha matrica:");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
printf("%d %d znachenie: %d\n",i,j,a[i][j]);
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
{
if(i==j)
{
a[i][j]=0;
}
if(i+j==N-1)
{
a[i][j]=0;
}
}
}
int b=0,n=N,c=1;
for(j=N-2;;j--)
{
for(i=N-1&&c=a[i][j];;i--)
{
if(a[i][j]!=0&&i+j!=N)
{
b=a[i][j];
a[i][j]=c;
}
}
}
puts("Novaya matrica:");
for(i=0;i<N;i++)
for(j=0;j<N;j++)
printf("%d %d znachenie: %d\n",i,j,a[i][j]);
}
return 0;
}Решение задачи: «Переставить местами элементы между верхним и нижним сектором матрицы»
textual
Листинг программы
void swap(int*a, int*b) {
int t = *a;
*a = *b;
*b = t;
}
...
Цикл, который делает нужные перестановки
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
// diagonal
if ((i == j) || (i + j == N - 1))
a[i][j] = 0;
// ver[-niz
if ((i < j) && (j < N - 1 - i))
swap(&a[i][j], &a[N - 1 - i][j]);
// levo-pravo
if ((i > j) && (i < N - 1 - j))
swap(&a[i][j], &a[i][N - 1 - j]);
}
}
Объяснение кода листинга программы
Код представляет собой функцию, которая меняет местами элементы в матрице. Функция swap меняет местами два указателя на элементы матрицы. Цикл выполняет несколько проверок и вызывает функцию swap для соответствующих элементов.
- Переменная
N- размер матрицы - Переменная
i- текущий индекс по горизонтали - Переменная
j- текущий индекс по вертикали a[i][j]- элемент матрицы, который может быть изменен Внутри циклов выполняются следующие действия:- Проверка на главной диагонали: если
i == jилиi + j == N - 1, то элемент матрицы устанавливается равным нулю. - Проверка для верхнего сектора: если
i < jиj < N - 1 - i, то элементыa[i][j]иa[N - 1 - i][j]меняются местами с помощью функцииswap. - Проверка для левого верхнего сектора: если
i > jиi < N - 1 - j, то элементыa[i][j]иa[i][N - 1 - j]меняются местами с помощью функцииswap. Поскольку код не выводит результат на экран, предполагается, что он используется в другом контексте и матрица передается в функцию для дальнейшей обработки.