
25.01.2012, 20:29
|
 |
Новичок
|
|
Регистрация: 27.03.2011
Адрес: г.Кемерово
Сообщения: 98
Версия Delphi: XE
Репутация: 10
|
|
Метод Цезаря с ключём в виде слова
Программа работает исправно с английскими буквами но если ввести в программу что ни будь на русском то ни чего не происходит.
Как это можно исправить?
При ключе hi
Hello - Hflmo
При ключе пр
Привет -Привет
Код:
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, ComCtrls, ActnList, Menus, ClipBrd, Buttons;
type
TMainForm = class(TForm)
StatusBar1: TStatusBar;
ActionList1: TActionList;
actExit: TAction;
actLoad: TAction;
actSave: TAction;
actRun: TAction;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
GrBoxOutPut: TGroupBox;
memoOutput: TMemo;
GrBoxInput: TGroupBox;
memoInput: TMemo;
Button1: TButton;
GroupBox1: TGroupBox;
edtKey: TLabeledEdit;
CheckBox1: TCheckBox;
BitBtn1: TBitBtn;
Button2: TButton;
Button3: TButton;
procedure actExitExecute(Sender: TObject);
procedure actLoadExecute(Sender: TObject);
procedure actSaveExecute(Sender: TObject);
procedure actRunExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure actSaveUpdate(Sender: TObject);
procedure actRunUpdate(Sender: TObject);
procedure edtKeyKeyPress(Sender: TObject; var Key: Char);
procedure CheckBox1Click(Sender: TObject);
procedure memoInputChange(Sender: TObject);
procedure memoInputKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure Button3Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
procedure TMainForm.actExitExecute(Sender: TObject);
begin
Close;
end;
procedure TMainForm.actLoadExecute(Sender: TObject);
begin
if OpenDialog1.Execute then
memoInput.Lines.LoadFromFile(OpenDialog1.FileName);
end;
procedure TMainForm.actRunExecute(Sender: TObject);
var i, j, n, fl, pw: integer;
ch: Char;
stKey: string;
flag: Boolean;
begin
memoOutput.Text := '';
stKey := edtKey.Text;
j := 1; fl := 0; pw := 0;
for i := 1 to Length(memoInput.Text) do
begin
ch := memoInput.Text[i];
flag := false;
if ch in ['a'..'z'] then
begin
flag := true;
fl := Ord('a'); pw := 26;
end;
if ch in ['A'..'Z'] then
begin
flag := true;
fl := Ord('A'); pw := 26;
end;
if ch in ['а'..'я'] then
begin
flag := true;
fl := Ord('а'); pw := 33;
end;
if ch in ['А'..'Я'] then
begin
flag := true;
fl := Ord('А'); pw := 33;
end;
if flag then
begin
if CheckBox1.Checked then
n := (ORD(ch) - fl - ORD(stKey[j])+ 10*pw) mod pw + fl
else
n := (ORD(ch) - fl + ORD(stKey[j])) mod pw + fl;
ch := Chr(n);
Inc(j);
if j > Length(stKey) then j := 1;
end;
memoOutput.Text := memoOutput.Text + ch;
end;
end;
procedure TMainForm.actRunUpdate(Sender: TObject);
begin
actRun.Enabled := ((TRIM(memoInput.Text) <> '') AND (edtKey.Text <> ''));
end;
procedure TMainForm.actSaveExecute(Sender: TObject);
begin
if SaveDialog1.Execute then
memoOutput.Lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TMainForm.actSaveUpdate(Sender: TObject);
begin
actSave.Enabled := memoOutput.Text <>'';
end;
procedure TMainForm.Button2Click(Sender: TObject);
begin
if SaveDialog1.Execute then
memoOutput.Lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TMainForm.Button3Click(Sender: TObject);
begin
if OpenDialog1.Execute then
memoInput.Lines.LoadFromFile(OpenDialog1.FileName);
end;
procedure TMainForm.CheckBox1Click(Sender: TObject);
begin
if CheckBox1.Checked then
actRun.Caption := 'Расшифровать'
else
actRun.Caption := 'Зашифровать';
end;
procedure TMainForm.edtKeyKeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
actRun.Execute;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
memoInput.Text:='';
memoOutput.Text:='';
end;
procedure TMainForm.memoInputChange(Sender: TObject);
begin
StatusBar1.Panels[0].Text := IntToStr(Length(memoInput.Text)) + ' символов';
end;
procedure TMainForm.memoInputKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if ((Key = VkKeyScan('a')) or (Key = VkKeyScan('ф'))) and (ssCtrl in Shift) then
(Sender as TMemo).SelectAll;
end;
end.
|