unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IdGlobal; type TForm1 = class(TForm) GroupBox1: TGroupBox; moText: TMemo; GroupBox2: TGroupBox; GroupBox3: TGroupBox; moBag: TMemo; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label5: TLabel; GroupBox4: TGroupBox; moTransformedText: TMemo; Button1: TButton; edBinaryView: TEdit; edHemmingWithError: TEdit; edTransformedHemming: TEdit; edHemming: TEdit; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var x, b, a, k, j, i: Integer; s8bit, s12bit, xor4bit, s, s1, s2, BinaryViewElements1, X4BinaryViewElements, Y4BinaryViewElements: string; begin edBinaryView.Clear; edHemming.Clear; edHemmingWithError.Clear; moBag.Clear; edTransformedHemming.Clear; moTransformedText.Clear; s8bit:=''; s12bit:=''; xor4bit:=''; s:=''; s1:=''; s2:=''; BinaryViewElements1:=''; X4BinaryViewElements:=''; Y4BinaryViewElements:=''; {1} for i:=1 to length(moText.Text) do edBinaryView.Text:=edBinaryView.Text+copy(inttobin(ord(moText.Text[i])),25,8); {2} for i:=1 to (length(edBinaryView.Text) div 8) do begin s8bit:=copy(edBinaryView.Text,(i-1)*8+1,8); s12bit:='00'+s8bit[1]+'0'+s8bit[2]+s8bit[3]+s8bit[4]+'0'+s8bit[5]+s8bit[6]+s8bit[7]+s8bit[8]; BinaryViewElements1:=''; for j:=1 to 12 do if s12bit[j]='1' then BinaryViewElements1:=BinaryViewElements1+copy(IntToBin(j),29,4); xor4bit:=''; X4BinaryViewElements:=copy(BinaryViewElements1,1,4); for j:=1 to (length(BinaryViewElements1) div 4)-1 do begin Y4BinaryViewElements:=copy(BinaryViewElements1,j*4+1,4); for k:=1 to 4 do xor4bit:=xor4bit+inttostr(strtoint(X4BinaryViewElements[k]) xor strtoint(Y4BinaryViewElements[k])); X4BinaryViewElements:=xor4bit; xor4bit:=''; end; xor4bit:=X4BinaryViewElements; s12bit:=xor4bit[4]+xor4bit[3]+s8bit[1]+xor4bit[2]+s8bit[2]+s8bit[3]+s8bit[4]+xor4bit[1]+s8bit[5]+s8bit[6]+s8bit[7]+s8bit[8]; s:=s+s12bit; edHemming.Text:=s; end; {3} for i:=1 to (length(edHemming.Text) div 12) do begin s8bit:=copy(edHemming.Text,(i-1)*12+1,12); a:=random(101); if a<80 then begin b:=random(12)+1; if s8bit[b]='1' then s8bit[b]:='0' else s8bit[b]:='1'; end; edHemmingWithError.Text:=edHemmingWithError.Text+s8bit; end; {4} for i:=1 to (length(edHemmingWithError.Text) div 12) do begin s8bit:=copy(edHemmingWithError.Text,(i-1)*12+1,12); s1:=s1+s8bit[3]+s8bit[5]+s8bit[6]+s8bit[7]+s8bit[9]+s8bit[10]+s8bit[11]+s8bit[12]; end; for j:=1 to (length(s1) div 8) do begin s12bit:=copy(s1,(j-1)*8+1,8); x:=0; s8bit:=''; for i:=8 downto 1 do s8bit:=s8bit+s12bit[i]; for i:=0 to 7 do if s8bit[i+1]='1' then x:=x+(1 shl i) else x:=x+0; moBag.Text:=moBag.Text+chr(x); end; {5} s12bit:=''; for i:=1 to (length(edHemmingWithError.Text) div 12) do begin s12bit:=copy(edHemmingWithError.Text,(i-1)*12+1,12); BinaryViewElements1:=''; for j:=1 to 12 do if s12bit[j]='1' then BinaryViewElements1:=BinaryViewElements1+copy(IntToBin(j),29,4); xor4bit:=''; X4BinaryViewElements:=copy(BinaryViewElements1,1,4); for j:=1 to (length(BinaryViewElements1) div 4)-1 do begin Y4BinaryViewElements:=copy(BinaryViewElements1,j*4+1,4); for k:=1 to 4 do xor4bit:=xor4bit+inttostr(strtoint(X4BinaryViewElements[k]) xor strtoint(Y4BinaryViewElements[k])); X4BinaryViewElements:=xor4bit; xor4bit:=''; end; xor4bit:=X4BinaryViewElements; s:='0000'+xor4bit; x:=0; BinaryViewElements1:=''; for k:=8 downto 1 do BinaryViewElements1:=BinaryViewElements1+s[k]; for j:=0 to 7 do if BinaryViewElements1[j+1]='1' then x:=x+(1 shl j) else x:=x+0; if xor4bit<>'0000' then if s12bit[x]='0' then s12bit[x]:='1' else s12bit[x]:='0'; edTransformedHemming.Text:=edTransformedHemming.Text+s12bit; end; {6} for i:=1 to (length(edTransformedHemming.Text) div 12) do begin s8bit:=copy(edTransformedHemming.Text,(i-1)*12+1,12); s2:=s2+s8bit[3]+s8bit[5]+s8bit[6]+s8bit[7]+s8bit[9]+s8bit[10]+s8bit[11]+s8bit[12]; end; for j:=1 to (length(s2) div 8) do begin s12bit:=copy(s2,(j-1)*8+1,8); x:=0; s8bit:=''; for i:=8 downto 1 do s8bit:=s8bit+s12bit[i]; for i:=0 to 7 do if s8bit[i+1]='1' then x:=x+(1 shl i) else x:=x+0; moTransformedText.Text:=moTransformedText.Text+chr(x); end; end; end.
|