Двумерный массив “си”

205
15 декабря 2016, 16:08

Дана матрица А(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;
}
Answer 1

В качестве первого шага напишите программу, которая сортирует (т.е. упорядочивает (переставляет)) числа в первом столбце.

На следующем шаге измените ее так, чтобы вместе с 2-мя числами первого столбца (который сортируете) переставлялись и числа во всех столбцах.

А потом, когда все это уже освоите, задумайтесь о более эффективном решении (минимизации суммы перестановок чисел).

Answer 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;
}
READ ALSO
Как записать текст в массив?

Как записать текст в массив?

Как написать код так, чтобы мой массив заполнялся текстом в 500 Кб и не захлебывался

295
R6010 abort() has been called

R6010 abort() has been called

http://pastebincom/g5dJAAYM# Выходит вот такая ошибка в данном коде

257
Как получить цвет пикселя виджета  QT?

Как получить цвет пикселя виджета QT?

Нужно получить значание RGB именно одной точки на QWidget

283
Определение типа файла

Определение типа файла

Здравствуйте, форумчане!

223