исправить код, чтобы искаженный разряд менялся не с лева на права, а наоборот
Код:
function COD(s:string):string;
var i:Integer;
m:string;
begin
m:='11001';
SetLength(Result,5);
for i:=1 to 5 do Result[i]:=IntToStr((StrToInt(s[i])+StrToInt(m[i])) mod 2)[1];
Result:=IntToStr(StrToInt(Result));
end;
function Chifr(str:string):string;
var i,l,all:Integer;
s,st,s1:string;
begin
all:=0;
st:=str+'0000';
s1:=COD(Copy(st,1,5));
all:=all+5;
while all<length(str)+4 do begin
s:=s1+Copy(st,all+1,5-length(s1));
all:=all+5-length(s1);
if length(s) = 5 then s1:=COD(s) else s1:=s;
end;
l:=length(s1);
for i:=1 to 4-l do s1:='0'+s1;
Result:=str+s1;
end;
function Raschifr(str:string):string;
var all,i,l:Integer;
s,st,s1:string;
begin
all:=0;
st:=str;
s1:=COD(Copy(st,1,5));
all:=all+5;
while all<length(str) do begin
s:=s1+Copy(st,all+1,5-length(s1));
all:=all+5-length(s1);
if length(s)=5 then s1:=COD(s) else s1:=s;
end;
l:=length(s1);
for i:=1 to 4-l do s1:='0'+s1;
Result:=s1;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Key in ['0','1'] then
if length(Edit1.Text)=11 then Key:=Chr(0) else Key:=Key
else Key:=Chr(0);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
iter:=0;
Edit2.Text:=Chifr(Edit1.Text);
end;
function MakeError(str:string; n,len:Byte) : string;
begin
if str[n]='1' then str[n]:='0' else str[n]:='1';
Result:=str;
end;
procedure TForm1.Button2Click(Sender: TObject);
var n:Integer;
begin
if Edit3.Text='' then n:=0 else n:=StrToInt(Edit3.Text);
Edit4.Text:=MakeError(Edit2.Text,n,length(Edit2.Text));
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0','1','2','3','4','5','6','7','8','9']) then Key:=Chr(0);
end;
function vlevo(str:string):string;
var s:string; i,len:Integer;
begin
len:=length(str);
SetLength(s,len);
for i:=1 to len-1 do s[i]:=str[i+1];
s[len]:=str[1];
Result:=s;
end;
function vpravo(str:string):string;
var s:string; i,len:Integer;
begin
len:=length(str);
SetLength(s,len);
for i:=1 to len-1 do s[i+1]:=str[i];
s[1]:=str[len];
Result:=s;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
form1.close;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
Edit4.Text:=vlevo(Edit4.Text);
iter:=iter+1;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Edit5.Text:=Raschifr(Edit4.Text);
end;
procedure TForm1.Button5Click(Sender: TObject);
var i,len,l:Integer; s,kor,err:string;
begin
kor:=Edit5.Text;
err:=Edit4.Text;
len:=length(err);
l:=length(kor);
s:=err;
for i:=0 to l-1 do s[len-i]:=IntToStr((StrToInt(err[len-i])+StrToInt(kor[l-i])) mod 2)[1];
for i:=1 to Tag do s:=vpravo(s);
Edit6.Text:=s;
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
edit1.Text:='';
edit2.Text:='';
edit3.Text:='';
edit4.Text:='';
edit5.Text:='';
edit6.Text:='';
end;
procedure TForm1.Label7Click(Sender: TObject);
begin
panel1.visible:=false;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
panel1.Visible:=true;
end;