Переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца - C (СИ)
Формулировка задачи:
Переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца. Распечатать часть полученной матрицы, состоящую из n первых строк, не имеющих отрицательных элементов.
Решение задачи: «Переставить в каждом столбце прямоугольной матрицы все отрицательные элементы в конец столбца»
textual
Листинг программы
#include <stdio.h>
const int N = 9;
const int M = 4;
int main()
{
int i, j, k, x, n, flag = 0;
int a[9][4] = {{-8,-6,-21,0},{-78,2,19,-34},{-61,-27,-3,7},{7,4,-9,-1},{23,345,765,23},
{34543,765,876,21},{4536,980,0,2},{756,908,234,456},{867,9054,2365,1}};
puts("Source matrix:");
for(i = 0; i < N; i++){
for(j = 0; j < M; j++)
printf("%9d", a[i][j]);
printf("\n");
}
printf("\n");
for(j = 0; j < M; j++){
for(i = 0; i < N; i++){
if(a[i][j] < 0){
for(k = N-1; k > i; k--){
if(a[k][j] >= 0){
x = a[i][j];
a[i][j] = a[k][j];
a[k][j] = x;
}
}
}
}
}
puts("Matrix after sort:");
for(i = 0; i < N; i++){
for(j = 0; j < M; j++)
printf("%9d", a[i][j]);
printf("\n");
}
printf("\n");
for(i = 0; i < N; i++){
for(j = 0; j < M; j++){
if(a[i][j] < 0)
flag = 1;
}
if(flag == 1)break;
}
n = i;
puts("Matrix only positive rows:");
for(i = 0; i < n; i++){
for(j = 0; j < M; j++)
printf("%9d", a[i][j]);
printf("\n");
}
return 0;
}