А причем тут то, что M > N???
Тут такая фигня.
1. Нужна процка, которая будет менять строки местами, притом на вход они просто принимает массив и индексы строк.
2. В основной процке у нас цикл, в котором вычисляем пары и запускаем обмен.
Код:
const
N = 5;
M = 7;
type
TMatrix = Array [1..N,1..M] Of Integer;
procedure ExchangeRows(var M : Matrix; Index1, Index2 : Integer);
var
I, Buf : Integer;
begin
For I := 1 To N Do // по колонкам
Begin
Buf := M[I,Index1];
M[I,Index1] := M[I,Index2];
M[I,Index2] := Buf;
End;
end;
procedure DoWork(var M : TMatrix);
var
I : Integer;
I1, I2 : Integer;
begin
I := 1;
While I < N Do
Begin
I1 := I;
I2 := I+2;
If (I1 <= N) And (I2 <= N) Then ExchangeRows(M,I1,I2);
I1 := I+1;
I2 := I+3;
If (I1 <= N) And (I2 <= N) Then ExchangeRows(M,I1,I2);
I := I + 4;
End;
end;
Вот.