Тема: Массивы
Показать сообщение отдельно
  #2  
Старый 11.01.2010, 21:20
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А причем тут то, что 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;

Вот.
Ответить с цитированием