
17.03.2010, 17:22
|
|
Познающий
Регистрация: 17.02.2010
Сообщений: 45
С нами:
8542140
Репутация:
47
|
|
superboy4..покопался в твоем коде, честно, не особо понял что там написано  написал с нуля, вот код, прокоментил все, чтобы было понятно, если что-то все равно не понятно, спрашивай
Код:
unit Enciphering;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
StringGrid1: TStringGrid;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
const
n = 1000; // длина строки
dif = 224; // разница между символами в ASCII
var
Form1: TForm1;
key, tex: string;
tqu, kqu: integer;
rez: string;
tx: set of 'а'..'я';
tnum, knum, code: array [1..n] of integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
tex:=Edit1.Text; // Для текста
key:=Edit2.Text; // Для ключа
rez:=''; // Наш ответ
tqu:=length(tex); // Длина текста
kqu:=length(key); // Длина ключа
for i:=1 to length(tex) do tnum[i]:=-1; // Исключение инородных сиволов
for i:=1 to length(tex) do knum[i]:=0; // Обнуление
code:=knum;
for i:=1 to tqu do
if tex[i] in tx then tnum[i]:=ord(tex[i]) - dif; // Нахождение порядкового номера в алфавите (отсчет от 0 до 30)
for i:=1 to kqu do
knum[i]:=ord(key[i]) - dif;
for i:=kqu + 1 to tqu do
knum[i]:=knum[i - kqu]; // Дополнение ключа в случае если его длина меньше длины строки
for i:=1 to tqu do
if tnum[i]<> -1 then code[i]:=(tnum[i] + knum[i]) mod 32
else code[i]:=ord(' ')-dif; // Само шифрование
for i:=1 to tqu do
rez:= rez + chr(code[i] + dif); // Получение ответа
stringgrid1.ColCount:=tqu+1;
for i:=1 to tqu do
StringGrid1.Cells[i, 0]:=tex[i];
for i:=1 to tqu do
StringGrid1.Cells[i, 1]:=rez[i]; // Вывод ответа
end;
end.
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|