Система перестановок
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Menus; type TForm1 = class(TForm) real_str: TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Label3: TLabel; Button2: TButton; smeshch: TEdit; Label4: TLabel; Memo1: TMemo; decr_str: TEdit; procedure Button1Click(Sender: TObject); procedure smeshchChange(Sender: TObject; var knopka: Char); procedure Button2Click(Sender: TObject); procedure FormActivate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; dlina: integer; implementation {$R *.dfm} procedur TForm1.Button1Click(Sender: TObject); //telo procedury var //obъyavlenie peremennyh stroka: string; massiv: array of integer; i: integer; begin memo1.lines.Clear; //ochistka polya dlya zashifrovannoi stroki stroka:= real_str.text; //poluchenie real'noi sroki dlina:= length(stroka); //uznati dlinu stroki i zapisat' v dlina setlength(stroka, dlina+1); //zadat' dlinu setlength(massiv, dlina+1); if real_str.text = '' then //proverka na pustotu polya. esli pusto, to soobshenie, focus na obъekte i vihod iz procedury begin ShowMessage('Введите шифруемую строку'); real_str.SetFocus; exit; end; if smeshch.text = '' then // to zhe samoe begin button2.Enabled:= false; ShowMessage('Введите смещение'); smeshch.SetFocus; exit; end; if StrToInt(smeshch.text) > 256 then //potomu chto vsego byvaet 256 ASCII simvolov begin button2.Enabled:= false; showmessage('Смещение не может быть больше 256'); smeshch.text:= '0'; smeshch.SetFocus; end else begin for i:= 1 to dlina do begin massiv[i]:= ord(stroka[i]) + StrToInt(smeshch.text); if massiv[i] > 255 then massiv[i]:= massiv[i] mod 256 // ostatok ot deleniya na 256 end; end; for i:= 1 to dlina do begin memo1.Lines[0]:= memo1.Lines[0] + chr(massiv[i]); end; button2.Enabled:= true; button2.SetFocus; decr_str.Text:= ''; end; procedure TForm1.smeshchChange(Sender: TObject; var knopka: Char); //telo pocedury. zapreshaet vvod lyubyj simvolov, krome 0-9 begin case knopka of '0'..'9', #8: else knopka:= #0; end;end; procedure TForm1.Button2Click(Sender: TObject); var decr_sym: char; i: integer; begin button2.Enabled:= false; decr_str.Text:= ''; for i:= 1 to dlina do begin if (ord(memo1.Lines[0][i]) - StrToInt(smeshch.text)) >= 0 then begin decr_sym:= chr(ord(memo1.Lines[0][i]) - StrToInt(smeshch.text)); decr_str.Text:= decr_str.Text + decr_sym; end else begin decr_sym:= chr(256 - (StrToInt(smeshch.Text) - ord(memo1.Lines[0][i]))); decr_str.Text:= decr_str.Text + decr_sym; end; end;end; procedure TForm1.FormActivate(Sender: TObject); begin button2.Enabled:= false; real_str.SetFocus; end;end.
|