C/C++

Программа на языке си.

Отсортировать четные строки матрицы m x n по возрастанию, а нечетные по убыванию.
(Размерность матрицы и ее значения вводятся с клавиатуры)
Заранее благодарен
 #include  
#include
#include
void flush(void) {
while (getchar() != '\n');
}
size_t length(const char* msg) {
size_t value;
printf("%s", msg);
scanf("%zu", &value);
flush();
return value;
}
void fill(int* row, size_t len) {
size_t i = 0;
if (!row) return;
while (i < len) {
scanf("%i", &row[i]);
++i;
}
}
void show(int* row, size_t len) {
size_t i = 0;
if (!row) return;
while (i < len) {
printf("%i ", row[i]);
++i;
}
puts("");
}
int increase(const void* a, const void* b) {
int x = *((int*)a);
int y = *((int*)b);
return x - y;
}
int decrease(const void* a, const void* b) {
int x = *((int*)a);
int y = *((int*)b);
return y - x;
}
void sort(int* row, size_t len, int(*comp)(const void*, const void*)) {
qsort(row, len, sizeof(int), comp);
}
int main(void) {
int** matrix = NULL;
size_t rows = length("Rows: ");
size_t cols = length("Columns: ");
size_t i;
matrix = (int**)malloc(rows * sizeof(int*));
puts("Input matrix:");
for (i = 0; i < rows; ++i) {
matrix[i] = (int*)malloc(cols * sizeof(int));
fill(matrix[i], cols);
if (i & 1) sort(matrix[i], cols, increase);
else sort(matrix[i], cols, decrease);
}
puts("");
for (i = 0; i < rows; ++i) show(matrix[i], cols);
for (i = 0; i < rows; ++i) free(matrix[i]);
free(matrix);
return 0;
}
P.S. Чётность определятся отсчётом от единицы. Если требуется считать с нуля, то строка 54 принимает следующий вид:
 if (~i & 1) sort(matrix[i], cols, increase); 
Денис Петрусенко
Денис Петрусенко
90 159
Лучший ответ