Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объекты [D2005, XP]


News ©   (2006-05-12 22:59:00) 

Добрый вечер! Уважаемые программисты, помогите, пожалуйста, с таким вопросом: есть текст программы, реализующий алгоритм шифрования Плейфейера:

interface
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls;
type
 TForm2 = class(TForm)
 Button1: TButton;
 Button2: TButton;
 Memo1: TMemo;
 Button3: TButton;
 procedure Button3Click(Sender: TObject);
 procedure Button2Click(Sender: TObject);
 procedure Button1Click(Sender: TObject);
 private
   { Private declarations }

 public
   { Public declarations }
end;

const matr: array [1..8,1..8] of char=(('ш','Ш','и','И','ф','Ф','р','Р'),
                                       ('п','П','л','Л','е','Е','а','А'),
                                       ('б','Б','в','В','г','Г','д','Д'),
                                       ('ж','Ж','з','З','й','Й','к','К'),
                                       ('м','М','н','Н','о','О','с','С'),
                                       ('т','Т','у','У','х','Х','ц','Ц'),
                                       ('ч','Ч','щ','Щ','ы','ь','э','Э'),
                                       ('ю','Ю','я','Я',',','.',' ','-'));

     code='шШиИфФрРпПлЛеЕаАбБвВгГдДжЖзЗйЙкКмМнНоОсСтТуУхХцЦчЧщЩыьэЭюЮяЯ,. -';

VAR
 Form2: TForm2;
 Stream,Stream1: TFileStream;
 str, new: String;
 Buf: array [1..400] of char;
 num, Dlina_str, Dlina_new: Byte;

implementation

{$R *.dfm}

{Шифрование исходного текста}
procedure TForm2.Button1Click(Sender: TObject);
var c,i,num,k,l,m,n: integer;
begin
{Открытие файла}
try
 Stream:=TFileStream.Create('d:\input.txt', fmOpenRead);
 Stream.Seek(0,soFromEnd);
 count:=Stream.Size;
 Stream.Seek(0,soFromBeginning);
 Stream.Read(Buf,count);
 finally
 Stream.Free;
end;
New:='';
Str:='';
{Преобразование считанного текста в строку}
for i:=1 to count do
 Str:=Str+buf[i];
{Разбиение строки на пары символов}
Dlina_str:= Length(str) div 2;
FOR num:= 1 TO dlina_str DO
 New:= (New + Str[2*num-1] + Str[2*num]);
 {Шифрование открытого текста по матрице алфавита Плэйфера}
 str:='';
 Dlina_new:= Length(New)div 2;
 FOR num:= 1 TO Dlina_new DO
   begin
     p1:=pos(New[2*num-1],code);
     p2:=pos(New[2*num],code);
     k:=(p1 div 8)+1;
     l:=(p1 mod 8);
     if l=0 then begin k:=k-1; l:=8; end;
     m:=(p2 div 8)+1;
     n:=p2 mod 8;
     if n=0 then begin m:=m-1; n:=8; end;
     if k=m then  {Если символы находятся в одной строке матрицы алфавита}
     begin
       if l=8 then Str:=Str+matr[k,1] else Str:=Str+matr[k,l+1];
       if n=8 then str:=Str+matr[m,1] else Str:=Str+matr[m,n+1];
     end
     else
     if l=n then {Если в одном столбце}
     begin
       if k=8 then Str:=Str+matr[1,l] else Str:=Str+matr[k+1,l];
       if m=8 then Str:=Str+matr[1,n] else Str:=Str+matr[m+1,n];
     end
     else begin
           Str:=Str+matr[k,n];
           Str:=Str+matr[m,l];
           end;
   end;
 c:=Length(New);
 New:='';
 {Вывод полученного текста на экран}
   for i:=1 to c do
   begin
     Buf[i]:=Str[i]; New:=New+Str[i];
   end;
 Memo1.Lines.Add('');
 Memo1.Lines.Add('*************** Зашифрованный текст ***************');
 Memo1.Lines.Add(New);
 c:=Length(New);
 {Запись полученного текста в файл}
   try
   Stream1:=TFileStream.Create('d:\output.txt', fmOpenWrite);
   Stream1.Seek(0,soFromBeginning);
   Stream1.Write(Buf,c);
   finally
 Stream1.Free;
 end;
end;

{Дешифрование полученного текста}
procedure TForm2.Button2Click(Sender: TObject);
var i, count: integer;
begin
 try
 Stream:=TFileStream.Create('d:\input.txt', fmOpenRead);
 Stream.Seek(0,soFromEnd);
 count:=Stream.Size;
 Stream.Seek(0,soFromBeginning);
 Stream.Read(Buf,count);
 finally
 Stream.Free;
end;
New:= '';
Str:='';
for i:=1 to count do New:=New+buf[i];
Dlina_str:= Length(New)div 2;
FOR num:= 1 TO Dlina_str DO
 begin
     p1:=pos(New[2*num-1],code);
     p2:=pos(New[2*num],code);
     k:=(p1 div 8)+1;
     l:=(p1 mod 8);
     if l=0 then begin k:=k-1; l:=8; end;
     m:=(p2 div 8)+1;
     n:=p2 mod 8;
     if n=0 then begin m:=m-1; n:=8; end;
     if k=m then
     begin
       if l=1 then Str:=Str+shifr[k,8] else Str:=Str+shifr[k,l-1];
       if n=1 then Str:=Str+shifr[m,8] else Str:=Str+shifr[m,n-1];
     end
     else
     if l=n then
     begin
       if k=1 then Str:=Str+shifr[8,l] else Str:=Str+shifr[k-1,l];
       if m=1 then Str:=Str+shifr[8,n] else Str:=Str+shifr[m-1,n];
     end
     else begin
           Str:=Str+shifr[k,n];
           Str:=Str+shifr[m,l];
           end;
 end;
count:=Length(New);
New:='';
for i:=1 to count do
 begin
     Buf[i]:='0';
     Buf[i]:=Str[i];
   end;
 For i:=(count+1) to 400 do
 Buf[i]:=' ';
 Memo1.Lines.Add('');
 Memo1.Lines.Add('');
 Memo1.Lines.Add('*************** Расшифрованный текст ***************');
 Memo1.Lines.Add(Buf);
 try
   Stream1:=TFileStream.Create('d:\output.txt', fmOpenWrite);
   Stream1.Seek(0,soFromBeginning);
   Stream1.Write(Buf,count);
 finally
 Stream1.Free;
end;
end;

{Открытие исходного файла}
procedure TForm2.Button3Click(Sender: TObject);
begin
 try
 Stream:=TFileStream.Create('d:\input.txt', fmOpenRead);
 Stream.Seek(0,soFromEnd);
 count:=Stream.Size;
 Stream.Seek(0,soFromBeginning);
 Stream.Read(Buf,count);
 Memo1.Lines.Clear;
 Memo1.Lines.Add('*************** Исходный текст ***************');
 Memo1.Lines.Add(Buf);
 finally
 Stream.Free;
end;
end;
Мне нужно добавить в эту программу объекты (собственные, не стандартные), чтобы были реализованы все три принципа объектно-ориентированного программирования (использование property тоже требуется). Помогите, пожалуйста, это сделать, а то у самого не очень получается. Заранее спасибо!


Джо   (2006-05-13 03:12:00) [1]

Реализуй наследников TStream. Первый, когда в него записываешь, "на лету" шифрует данные. Второй, когда из него читаешь, их расшифровывает. Дешево и практЫчно :)


Гаврила   (2006-05-12 23:09:00) [2]

Задание по учебе чтоли?
По сабжу.
Смотри сам. Что такое объект
это совокупность данных и методов по работе с этими данными.
Попробуй выделить некие сущности этого алгоритма в отдельные сушности, и сделай эти сущности объектами.
PS
Разбираться в том коде что ты написал...
архисложная задача. Не осилил


Наверх

Титульная страница Поиск, карта сайта Написать письмо