Показать сообщение отдельно
Старый 20.06.2013, 17:20   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Вот, попробуйте так:
Код:
Const
 N=10;
 M=8;

Type
 Matr=Array[1..N,1..M] of Byte;
 Lin=Array[1..(2*(N-1))+(2*(M-1))] of Byte;

Var
 A,B:Matr;
 V,W:Lin;
 i,j,K:Byte;

Function M_L(C:Matr):Lin;
var
 q,p,r:byte;
 G:Lin;
begin
 r:=0;
 For p:=1 to M do
  begin
   Inc(r);
   G[r]:=C[1,p];
  end;
 For q:=2 to N do
  begin
   Inc(r);
   G[r]:=C[q,M];
  end;
 For p:=M-1 downto 1 do
  begin
   Inc(r);
   G[r]:=C[N,p];
  end;
 For q:=N-1 downto 2 do
  begin
   Inc(r);
   G[r]:=C[q,1];
  end;
 M_L:=G;
end;

Function L_M(C:Lin;T:Matr):Matr;
var
 q,p,r:byte;
 Y:Matr;
begin
 Y:=T;
 r:=0;
 For p:=1 to M do
  begin
   Inc(r);
   Y[1,p]:=C[r];
  end;
 For q:=2 to N do
  begin
   Inc(r);
   Y[q,M]:=C[r];
  end;
 For p:=M-1 downto 1 do
  begin
   Inc(r);
   Y[N,p]:=C[r];
  end;
 For q:=N-1 downto 2 do
  begin
   Inc(r);
   Y[q,1]:=C[r];
  end;
 L_M:=Y;
end;

Function Shift(S:Lin;D:Byte):Lin;
var
 q,p,X:Byte;
 S1:Lin;
begin
 S1:=S;
 for p:=1 to D do
  begin
   X:=S1[2*(N-1)+2*(M-1)];
   for q:=(2*(N-1))+(2*(M-1))-1 downto 1 do S1[q+1]:=S1[q];
   S1[1]:=X;
  end;
 Shift:=S1;
end;

Begin    
 Randomize;
 For i:=1 to N do
  begin
   For j:=1 to M do
    begin
     A[i,j]:=Random(256);
     Write(A[i,j]:6);
    end;
   Writeln;
  end;
 Writeln;
 Write('K= ');
 Readln(K);
 V:=M_L(A);
 W:=Shift(V,K);
 B:=L_M(W,A);
 For i:=1 to N do
  begin
   For j:=1 to M do Write(B[i,j]:6);
   Writeln;
  end;
 Readln;
End.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070