Показать сообщение отдельно

  #1  
Старый 17.03.2010, 17:22
Soherox
Познающий
Регистрация: 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.
 
Ответить с цитированием