Переставить местами элементы между верхним и нижним сектором матрицы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана квадратная матрица. Пусть главная и побочная диагональ делит матрицу на четыре сектора. Переставить метами элементы между верхним и нижним сектором, а также между правым и левым. Обе диагонали обнулить. Где ошибка?
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. int N;
  6. puts("Vvedite razmernost kvadratnoi matrici:");
  7. scanf("%d",&N);
  8. int a[N][N];
  9. int i,j;
  10. for(i=0;i<N;i++)
  11. {
  12. for(j=0;j<N;j++)
  13. {
  14. printf("Vvedite element matrici a[%d][%d]:\n",i,j);
  15. scanf("%d",&a[i][j]);
  16. }
  17. }
  18. puts("Vasha matrica:");
  19. for(i=0;i<N;i++)
  20. for(j=0;j<N;j++)
  21. printf("%d %d znachenie: %d\n",i,j,a[i][j]);
  22. for(i=0;i<N;i++)
  23. {
  24. for(j=0;j<N;j++)
  25. {
  26. if(i==j)
  27. {
  28. a[i][j]=0;
  29. }
  30. if(i+j==N-1)
  31. {
  32. a[i][j]=0;
  33. }
  34. }
  35. }
  36. int b=0,n=N,c=1;
  37. for(j=N-2;;j--)
  38. {
  39. for(i=N-1&&c=a[i][j];;i--)
  40. {
  41. if(a[i][j]!=0&&i+j!=N)
  42. {
  43. b=a[i][j];
  44. a[i][j]=c;
  45. }
  46. }
  47. }
  48. puts("Novaya matrica:");
  49. for(i=0;i<N;i++)
  50. for(j=0;j<N;j++)
  51. printf("%d %d znachenie: %d\n",i,j,a[i][j]);
  52. }
  53. return 0;
  54. }

Решение задачи: «Переставить местами элементы между верхним и нижним сектором матрицы»

textual
Листинг программы
  1. void swap(int*a, int*b) {
  2.     int t = *a;
  3.     *a = *b;
  4.     *b = t;
  5. }
  6. ...
  7. Цикл, который делает нужные перестановки
  8. for (i = 0; i < N; i++) {
  9.         for (j = 0; j < N; j++) {
  10.             // diagonal
  11.             if ((i == j) || (i + j == N - 1))
  12.                 a[i][j] = 0;
  13.             // ver[-niz
  14.             if ((i < j) && (j < N - 1 - i))
  15.                 swap(&a[i][j], &a[N - 1 - i][j]);
  16.             // levo-pravo
  17.             if ((i > j) && (i < N - 1 - j))
  18.                 swap(&a[i][j], &a[i][N - 1 - j]);
  19.  
  20.         }
  21.     }

Объяснение кода листинга программы

Код представляет собой функцию, которая меняет местами элементы в матрице. Функция swap меняет местами два указателя на элементы матрицы. Цикл выполняет несколько проверок и вызывает функцию swap для соответствующих элементов.

  1. Переменная N - размер матрицы
  2. Переменная i - текущий индекс по горизонтали
  3. Переменная j - текущий индекс по вертикали
  4. a[i][j] - элемент матрицы, который может быть изменен Внутри циклов выполняются следующие действия:
  5. Проверка на главной диагонали: если i == j или i + j == N - 1, то элемент матрицы устанавливается равным нулю.
  6. Проверка для верхнего сектора: если i < j и j < N - 1 - i, то элементы a[i][j] и a[N - 1 - i][j] меняются местами с помощью функции swap.
  7. Проверка для левого верхнего сектора: если i > j и i < N - 1 - j, то элементы a[i][j] и a[i][N - 1 - j] меняются местами с помощью функции swap. Поскольку код не выводит результат на экран, предполагается, что он используется в другом контексте и матрица передается в функцию для дальнейшей обработки.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.182 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы