Отсортировать в матрице столбцы по убыванию значений элементов в первой строке

Задача: 

Отсортировать в матрице столбцы по убыванию значений элементов в первой строке.

Данную задачу можно понять так:

  1. отсортировать необходимо первую строку матрицы;
  2. остальные элементы каждого столбца должны переместиться в тот же столбец, куда переместился их первый (верхний) элемент, т.е. следовать за ним.
Алгоритм решения задачи: 

См. сортировка выбором. Можно попробовать использовать метод пузырька.

Отличие лишь в том, что цикл сортировки включает перестановку всех элементов очередного столбца матрицы.

Программа на языке Паскаль: 

const
    n = 4; m = 6;
var
    arr: array[1..n,1..m] of integer;
    i,j,k,q,id: byte;
    min: integer;
 
begin
    randomize;
    for i:=1 to n do begin
        for j:=1 to m do begin
            arr[i,j] := random(50) - 25;
            write(arr[i,j]:4);
        end;
        writeln;
    end;
 
    k := m;
    j := 1;
    while k > 1 do begin
        min := arr[1,1];
        id := 1;
        for j:=2 to k do
            if arr[1,j] < min then begin
                min := arr[1,j];
                id := j;
            end;
        arr[1,id] := arr[1,j];
        arr[1,j] := min;
        for i:=2 to n do begin
            min := arr[i,id];
            arr[i,id] := arr[i,j];
            arr[i,j] := min;
        end;
        k := k - 1;
    end;
 
    writeln;
    for i:=1 to n do begin
        for j:=1 to m do
            write(arr[i,j]:4);
        writeln;
    end;
readln;
end.

Комментарии

Мой вариант на C#

//Ваша матрица
int temp = 0;
 
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    if (myMatrix[0, i] < myMatrix[0, j])
                    {
                        temp = myMatrix[0, j];
                        myMatrix[0, j] = myMatrix[0, i];
                        myMatrix[0, i] = temp;
                        for (int k = 1; k < n; k++)
                        {
                            temp = myMatrix[k, j];
                            myMatrix[k, j] = myMatrix[k, i];
                            myMatrix[k, i] = temp;
                        }
                    }
                }
            }
 
            Console.WriteLine();
 
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write(myMatrix[i, j] + "\t");
                }
                Console.WriteLine();
            }

переменная q нигде не

переменная q нигде не используется

Программа на Паскаль написана

Программа на Паскаль написана неверно. Здесь
arr[1,id] := arr[1,j];
arr[1,j] := min;
происходит выход за границы матрицы

Программа работает. Указанные

Программа работает.

Указанные вами строки просто выполняют обмен значений. Ни переменная id, ни j за пределы не выходят