Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Вниз

Объекты   Найти похожие ветки 

 
News   (2006-05-12 22:59) [0]

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

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-12 23:09) [1]

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


 
Джо ©   (2006-05-13 03:12) [2]

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



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.05.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.01 c
2-1147263371
VOIDER
2006-05-10 16:16
2006.05.28
выити из сервиса


2-1147323581
shadow86
2006-05-11 08:59
2006.05.28
Временная задержка при выполнении программы


15-1146765878
Strate
2006-05-04 22:04
2006.05.28
Ошибка при запуске "Локальная политка безрпасности"


3-1144305507
diwww
2006-04-06 10:38
2006.05.28
Как отменить скролинг по результатам проверки в BeforeScroll?


3-1144406589
Dest81
2006-04-07 14:43
2006.05.28
Adotable.filter





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский