Код: Выделить всё
type
TKey=array[1..3,1..3] of integer;
TV=array [1..3] of integer;
TMinor=array[1..2,1..2] of integer;
TObr=array[1..3,1..3] of real;
function Mull(x:tv; key:TKey):tv;
var v:tv;
i,j,L:integer;
begin
for i:=1 to 3 do
begin
v[i]:=0;
for j:=1 to 3 do
v[i]:=v[i]+x[j]*Key[i,j];
end;
Mull:=v;
end;
function MullObr(x:tv; key:TObr):tv;
var v:tv;
i,j,L:integer;
s:real;
begin
for i:=1 to 3 do
begin
s:=0;
for j:=1 to 3 do
s:=s+x[j]*Key[i,j];
v[i]:=round(s);
end;
MullObr:=v;
end;
function Endcode(s:string;Key:TKey):String;
var i,j,k:integer;
c:char;
v,x:TV;
L:integer;
r:string;
l1:real;
begin
r:='';
L:=Length(s);
L1:=strtofloat(inttostr(L))/3;
for i:=1 to strtoint(floattostr(L1)) do
begin
for j:=0 to 2 do
begin
k:=i*3+j;
if k<=L then c:=s[k] else c:=char(0);
x[i]:=ord(c);
v:=Mull(x,Key);
if r<>'' then r:=r+' ';
r:=r+IntToStr(v[1]);
r:=r+' ';
r:=r+IntToStr(v[2]);
r:=r+' ';
r:=r+IntToStr(v[3]);
r:=r+' ';
end;
end;
Endcode:=r;
end;
function Det3(x:TKey):integer;
begin
Det3:=x[1,1]*(x[2,2]*x[3,3]-x[2,3]*x[3,2])-
x[2,1]*(x[1,2]*x[3,3]-x[1,3]*x[3,2])+
x[3,1]*(x[1,2]*x[2,3]-x[1,3]*x[2,2]);
end;
function Det2(x:TKey):integer;
begin
Det2:=x[1,1]*x[2,2]-x[1,2]*x[2,1];
end;
function Decode(s:string):string;
var r,b:string;
L,L1,i,j,k:integer;
V,x:TV;
c:char;
Obr:Tobr;
begin
r:='';
L:=Length(s);
i:=0;
while (i<L) do
begin
for j:=1 to 3 do
begin
b:='';
repeat
i:=i+1;
c:=s[i];
if c<>' ' then b:=b+c;
until ((c<>' ') and (i<L));
x[j]:=StrToInt(b);
end;
V:=MullObr(x,Obr);
c:=char(V[1]);
if c<>char(0) then s:=s+c;
c:=char(V[2]);
if c<>char(0) then s:=s+c;
c:=char(V[3]);
if c<>char(0) then s:=s+c;
end;
Decode:=r;
end;
function GetMinor(Key:TKey; i,j:integer):TMinor;
var i1,j1,i2,j2:integer;
r:TMinor;
begin
for i1:=1 to 2 do
for j1:=1 to 2 do
begin
if i1>=i then i2:=i1+1 else i2:=i1;
if j1>=j then j2:=j1+1 else j2:=j1;
r[i1,j1]:=r[i2,j2];
end;
end;
function KeyToObr(key:TKey):TObr;
var r:TObr;
d:real;
Minor:TMinor;
i,j:integer;
begin
d:=det3(Key);
for i:=1 to 3 do
for j:=1 to 3 do
begin
Minor:=GetMinor(Key,i,j);
r[j,i]:=Det2(Minor)/d;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Key:tkey;
x, v: tv;
s,t: string;
i,j,k:integer;
begin
Key[1,1]:=1;Key[1,2]:=4;Key[1,3]:=8;
Key[2,1]:=3;Key[2,2]:=7;Key[2,3]:=2;
Key[3,1]:=6;Key[3,2]:=9;Key[3,3]:=5;
s:=memo1.Text;
memo2.Text:=Endcode(s,Key);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
Key:tkey;
x, v: tv;
s,t: string;
begin
t:= memo2.Text;
memo3.Text:=Decode(t);
end;
end.