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