: , , .
/* 12. : , , . . */
// :
void in_matr(int x[ ][10], int m, int n); // m *n
//
void in_matr_rand(int x[ ][10], int m, int n); //
// m*n [-10, 10].
void out_matr(int x[ ][10], int m, int n); // m*n
// .
void processing(int x[ ][10], int *y, int m, int n); //
// m*n , "+"- ,
// y[ ].
void sort_columns(int x[ ][10], int m, int n); //
// m*n .
void rows_move(int x[ ][10], int m, int n); // 0-
// .
#include <stdio.h>
#include <conio.h>
void main()
{ int m, n, x[10][10], y[10] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
char ch;
printf(" *** Matrix Sort *** ");
printf("\n\n m<=10, n<=10: ");
scanf("%d %d", &m, &n);
printf("\n - 'c' \
- 'r'? - ");
scanf("%c%c", &ch, &ch);
if((ch=='c') || (ch=='C')) in_matr(x, m, n);
else { randomize(); in_matr_rand(x, m, n);}
printf("\n : %d*%d \n", m, n);
out_matr(x, m, n);
processing(x, y, m, n);
printf("\n \
: \n");
out_matr(x, m, n);
sort_columns(x, m, n);
printf("\n \
: \n");
out_matr(x, m, n);
printf("\n 0- \
: \n");
rows_move(x, m, n);
out_matr(x, m, n);
getch();
return 0;
} /* in_matr(), in_matr_rand() out_matr()
10. m n
. */
processing() m n
y[ ].
: m = 4, n = 4, y[ ] = { 10, 9, 8, 7 },
-1 -1 -1 -1 10 9 8 7
x = -2 2 -2 -2 => -2 2 -2 -2
-3 -3 -3 -3 10 9 8 7
4 -4 4 4 4 -4 4 4
void processing(int x[ ][10], int *y, int m, int n)
{ int i, j, k;
for (i = 0; i < m; i++) //
{ j = -1;
do // 'i' x[i][j] >= 0
|
|
{ j++;
if(x[i][j] >= 0 && j!= n) break; //
if(j == n) // 'i' "-"-
for (k=0; k<n; k++) x[i][k] = y[k];
}
while (j!= n);
}
/* rows_move() 0- m*n.
: m = 4, n = 4,
0 1 1 1 4 4 4 4
x = 2 2 2 2 => 2 2 2 2
0 3 3 3 0 3 3 3
4 4 4 4 0 1 1 1
*/
void rows_move(int x[ ][10], int m, int n)
{ int ii = 0, //
kk = n-1, //
//
i, j, k, w;
while(ii < kk)
{ for (i = ii; i < m-1; i++) //
if(x[i][0] == 0) break;
ii = i;
for (k = kk; k > ii; k- -) //
if(x[k][0]!= 0) break; //
kk = k;
if(ii < kk) // ii kk
for (j = 0; i < n; j++) // j k
{ w = x[ii][j];
x[ii][j] = x[kk][j];
x[kk][j] = w;
}
ii++, kk--;
}
}
/* sort_columns() m*n
.
: m = 4, n = 4,
3 1 2 0 0 1 2 3
x = 3 1 2 0 => 0 1 2 3
3 1 2 1 1 1 2 3
3 1 2 2 2 1 2 3
*/
void sort_columns(int x[ ][10], int m, int n)
{ int i, j, k, z;
for (j = 0; j < n-1; j++)
for (k = j+1; k < n; k++)
if (x[0][j] > x[0][k]) //
for (i = 0; i < m; i++) // j k
{ z = x[i][j];
x[i][j] = x[i][k];
x[i][k] = z;
}
}
1. n- ?
2. m n ( ).
3. n x n:
for(j = 0; j < n; j++)
for(i = n-1; i > j; i--) [i][j] = [ i - j ] [ n-1 - j ]
4. : ) k- ; ) k- .
5. sort_columns(). .
6. rows_move() ?