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

Задача: 

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

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

  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.

Комментарии

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

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

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

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

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

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

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