Ошибка в коде — обработка матриц - C (СИ)

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

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

Листинг программы
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4.  
  5. void printArray(int *a,int rx, int ry, int m, int n)
  6. {
  7. int i, j;
  8. for(i=0; i<m; i++)
  9. {
  10. for(j=0; j<n; j++)
  11. printf("%3d ", *(a + i*rx + j));
  12. printf("\n");
  13. }
  14. }
  15. void sort(int *a,int rx,int ry, int m, int n)
  16. {
  17. int i, j, temp, pr;
  18. for(i=0; i<n; i++)
  19. for(j=0; j<m; j++)
  20. {
  21. do
  22. {
  23. pr=1;
  24. if(*(a+i*rx+j)<*(a+i*rx+j+1))
  25. {
  26. temp=*(a+i*rx+j);
  27. *(a+i*rx+j)=*(a+i*rx+j+1);
  28. *(a+i*rx+j+1)=temp;
  29. pr=0;
  30. }
  31. }
  32. while(!pr);
  33. }
  34. }
  35. int uslArray(int *a,int rx,int ry, int m, int n)
  36. {
  37. int i,j,u=0;
  38. for(i=0; i<m; i++)
  39. for(j=0; j<n; j++)
  40. if((*(a + i*rx + j))<j) u++;
  41. return u;
  42. }
  43. void main ()
  44. {
  45. int n,m,b,i,j;
  46. int a[100][100];
  47. clrscr();
  48. begin:
  49. printf("vvedite kolicestvo strok=");
  50. scanf("%d", &m); //m strok
  51. printf("\nvvedite kolicestvo stolbcov=");
  52. scanf("%d", &n); //n stolbcov
  53. if ((m<1)||(n<1)||(n>100)||(m>100))
  54. {
  55. printf("nepravil`nyi vvod\n");
  56. goto begin;
  57. }
  58. scanb:
  59. printf("vvedite konec diapazona generacii chisel:");
  60. scanf("%d",&b);
  61. if(b<1)
  62. {
  63. printf("ne udovletvoryaet usloviyu!\n");
  64. goto scanb;
  65. }
  66. for(i=0; i<m; i++)
  67. for(j=0; j<n; j++)
  68. a[i][j] = random(b)+1;
  69. printArray(*a,100,100,m,n);
  70. printf("\n usloviyu udovletvoryaet %d elementov", uslArray(&a[0][0],100,100,m,n));
  71. sort(&a[0][0],100,100,m,n);
  72. printf("\n\n");
  73. printArray(&a[0][0],100,100,m,n);
  74. printf("\n usloviyu udovletvoryaet %d elementov", uslArray(&a[0][0],100,100,m,n));
  75. getch();
  76. }

Решение задачи: «Ошибка в коде — обработка матриц»

textual
Листинг программы
  1. void sort(int *a,int rx,int ry, int m, int n)
  2. {
  3.    int i, j, temp, pr;
  4.  
  5.    for(i=0; i<n; i++)
  6.    {
  7.       for(j=0; j<m; j++)
  8.       {
  9.          for (pr = 0; pr < m - j -1; pr++)
  10.          {
  11.             if(*(a+i*rx+pr)<*(a+i*rx+pr+1))
  12.             {
  13.                temp=*(a+i*rx+pr);
  14.                *(a+i*rx+pr)=*(a+i*rx+pr+1);
  15.                *(a+i*rx+pr+1)=temp;
  16.             }
  17.          }
  18.       }
  19.    }
  20. }

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

В представленном коде реализуется сортировка матрицы целых чисел по возрастанию. Список действий, которые выполняются в коде:

  1. Входные данные: матрица a, её размерность rx, ry, количество строк m, количество столбцов n.
  2. Переменные i, j, temp, pr используются для хранения индексов и временного значения.
  3. Выполняется двойной цикл for для прохода по всем элементам матрицы.
  4. Внутренний цикл j выполняется для прохода по всем столбцам матрицы.
  5. Внутренний цикл pr выполняется для прохода по всем элементам текущего столбца, начиная с первого элемента и до элемента, следующего за последним элементом матрицы (т.к. в цикле for переменная j итерируется от 0 до m-1, то при вычислении a+i*rx+pr+1 мы выходим за пределы матрицы, если текущий столбец имеет размерность меньше, чем rx).
  6. Если текущий элемент матрицы a[i][j] меньше следующего элемента a[i][j+1], то выполняется сортировка элементов текущего столбца.
  7. Для сортировки используется временная переменная temp, которая хранит значение элемента a[i][j].
  8. Значение a[i][j] заменяется на значение a[i][j+1].
  9. Значение a[i][j+1] заменяется на значение temp.
  10. Цикл pr завершается.
  11. Цикл j завершается.
  12. Цикл i завершается. Таким образом, данный код реализует сортировку матрицы по возрастанию.

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


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

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

12   голосов , оценка 3.667 из 5

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

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

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