Ошибка в коде — обработка матриц - C (СИ)
Формулировка задачи:
#include<stdio.h> #include<stdlib.h> #include<conio.h> void printArray(int *a,int rx, int ry, int m, int n) { int i, j; for(i=0; i<m; i++) { for(j=0; j<n; j++) printf("%3d ", *(a + i*rx + j)); printf("\n"); } } void sort(int *a,int rx,int ry, int m, int n) { int i, j, temp, pr; for(i=0; i<n; i++) for(j=0; j<m; j++) { do { pr=1; if(*(a+i*rx+j)<*(a+i*rx+j+1)) { temp=*(a+i*rx+j); *(a+i*rx+j)=*(a+i*rx+j+1); *(a+i*rx+j+1)=temp; pr=0; } } while(!pr); } } int uslArray(int *a,int rx,int ry, int m, int n) { int i,j,u=0; for(i=0; i<m; i++) for(j=0; j<n; j++) if((*(a + i*rx + j))<j) u++; return u; } void main () { int n,m,b,i,j; int a[100][100]; clrscr(); begin: printf("vvedite kolicestvo strok="); scanf("%d", &m); //m strok printf("\nvvedite kolicestvo stolbcov="); scanf("%d", &n); //n stolbcov if ((m<1)||(n<1)||(n>100)||(m>100)) { printf("nepravil`nyi vvod\n"); goto begin; } scanb: printf("vvedite konec diapazona generacii chisel:"); scanf("%d",&b); if(b<1) { printf("ne udovletvoryaet usloviyu!\n"); goto scanb; } for(i=0; i<m; i++) for(j=0; j<n; j++) a[i][j] = random(b)+1; printArray(*a,100,100,m,n); printf("\n usloviyu udovletvoryaet %d elementov", uslArray(&a[0][0],100,100,m,n)); sort(&a[0][0],100,100,m,n); printf("\n\n"); printArray(&a[0][0],100,100,m,n); printf("\n usloviyu udovletvoryaet %d elementov", uslArray(&a[0][0],100,100,m,n)); getch(); }
Решение задачи: «Ошибка в коде — обработка матриц»
textual
Листинг программы
void sort(int *a,int rx,int ry, int m, int n) { int i, j, temp, pr; for(i=0; i<n; i++) { for(j=0; j<m; j++) { for (pr = 0; pr < m - j -1; pr++) { if(*(a+i*rx+pr)<*(a+i*rx+pr+1)) { temp=*(a+i*rx+pr); *(a+i*rx+pr)=*(a+i*rx+pr+1); *(a+i*rx+pr+1)=temp; } } } } }
Объяснение кода листинга программы
В представленном коде реализуется сортировка матрицы целых чисел по возрастанию. Список действий, которые выполняются в коде:
- Входные данные: матрица a, её размерность rx, ry, количество строк m, количество столбцов n.
- Переменные i, j, temp, pr используются для хранения индексов и временного значения.
- Выполняется двойной цикл for для прохода по всем элементам матрицы.
- Внутренний цикл j выполняется для прохода по всем столбцам матрицы.
- Внутренний цикл pr выполняется для прохода по всем элементам текущего столбца, начиная с первого элемента и до элемента, следующего за последним элементом матрицы (т.к. в цикле for переменная j итерируется от 0 до m-1, то при вычислении a+i*rx+pr+1 мы выходим за пределы матрицы, если текущий столбец имеет размерность меньше, чем rx).
- Если текущий элемент матрицы a[i][j] меньше следующего элемента a[i][j+1], то выполняется сортировка элементов текущего столбца.
- Для сортировки используется временная переменная temp, которая хранит значение элемента a[i][j].
- Значение a[i][j] заменяется на значение a[i][j+1].
- Значение a[i][j+1] заменяется на значение temp.
- Цикл pr завершается.
- Цикл j завершается.
- Цикл i завершается. Таким образом, данный код реализует сортировку матрицы по возрастанию.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д