const alfa:array[0..65] of char = ('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й', 'К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я', 'а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы', 'ь','э','ю','я');
var
Form1: TForm1;
a:array[0..65] of char;
i, j, k: integer;
s, s2:string;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
For i:=0 to 65 do
begin
a[i]:= alfa[(i+1) mod 66];
end;
// шифр
k := StrToInt(Edit1.Text);
s := Memo1.Lines.Text;
for i := 1 to length(s) do
for j := 0 to 65 do
if s[i] = a[j] then s2 := s2+a[(j+(k-1)) mod 66];
Memo2.Lines.Text := s2;
s2 := '';
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
// дешифр
k := StrToInt(Edit1.Text);
s := Memo1.Lines.Text;
for i := 1 to length(s) do
for j := 0 to 65 do
if s[i] = a[j] then s2 := s2+a[(j-(k-1)) mod 66];
Memo2.Lines.Text := s2;
s2 := '';
end;