Переставить местами элементы между верхним и нижним сектором матрицы - 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
. Поскольку код не выводит результат на экран, предполагается, что он используется в другом контексте и матрица передается в функцию для дальнейшей обработки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д