Дана матрица А(10х10). Расставить строки таким образом, чтобы элементы в первом столбце были упорядочены по убыванию.
#include <stdio.h>
#include <stdlib.h>
#define n 4
#define m 4
int main()
{
int i, j, mem;
int a[n][m];
for (i=0;i<n;i++)
for (j=0;j<m;j++)
scanf("%d", &a[i][j]);
for ( i=0; i<n/2; i++)
{
mem=a[i][1];
a[i][1]=a[n-i-1][1];
a[n-i-1][1]=mem;
}
printf ("%d", a[i][j]);
system("Pause");
return 0;
}
В качестве первого шага напишите программу, которая сортирует (т.е. упорядочивает (переставляет)) числа в первом столбце.
На следующем шаге измените ее так, чтобы вместе с 2-мя числами первого столбца (который сортируете) переставлялись и числа во всех столбцах.
А потом, когда все это уже освоите, задумайтесь о более эффективном решении (минимизации суммы перестановок чисел).
Отлично - Ваш swap умеет переставлять числа!
// swap
{ int mem = a[i][1];
a[i][1] = a[n-i-1][1]; // мы знаем, что массивы в С нумеруются с 0?
a[n-i-1][1] = mem;
}
Теперь напишем то же самое для перестановки столбцов: (т.е. мы знаем, как можно организовать матрицы в С: как массив указетелей (а указатель=массив, если он указывает на кусок памяти, содержащей элементы одинакового типа, записанные в ней без промежутков - друг за другом), и указетели, как любые элементы с одинаковым размером можно переставлять внутри массива). Таким образом:
void swap_columns (int *(col1[]), int *(col2[]))
// можно писать (int **col1, int **col2)
// В функции нам нужен указатель на указатель, чтобы вернуть изменения
{ int *temp_column = *col1;
*col1 = *col2;
*col2 = temp_column;
} // ** - это, наверно, непонятно, но это правильно.
int main (void)
{ int i=0, j=0;
// ...
int matrix[][]; // или int **matrix; - указатели,
// на которые malloc-ом надо навесить память, если вы проходили
// динамическое распределенение памяти:
// В нашем случае, надо вызвать первый malloc для массива столбцов,
// размера (int*) * columns_count
// и в цикле для каждого массива-столбца, размера int*rows_count
// ...
// А это - "сортировка пузырьком" для столбцов по первому значению
for (i=0; i<columns_count; ++i)
for (j=i+1; j<columns_count; ++j)
if( matrix[i][0] > matrix[j][0] )
swap_columns (&matrix[i], &matrix[i+1]);
// ...
return 0;
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как написать код так, чтобы мой массив заполнялся текстом в 500 Кб и не захлебывался
http://pastebincom/g5dJAAYM# Выходит вот такая ошибка в данном коде