Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка_образец.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.98 Mб
Скачать

1. Постановка задачи

Создать компонент для шифрования – дешифрования текста тремя алгоритмами (алгоритм «Цезаря», алгоритм «Модифицированного Цезаря», алгоритм «Скитала») и применить его в программе.

2. Алгоритм создания компонента

  1. Для создания компонента нужно сначала определить визуальный он будет или нет.

  2. Теперь нужно выбрать предка. Как правило, используются в виде предков TComponent, TControl, TWinControl, TGraphicControl, TCustomXXXXXX, а также все компоненты палитры компонентов. Для своего компонента я взял предка TOpenDialog.

  3. В Borland Delphi в меню Component мы выбираем пункт New Component.

  4. Далее выводится небольшая таблица для нового компонента:

  • Ancestor type – выбираем предка для компонента;

  • Class Name – имя класса для компонента;

  • Palette Page – выбираем вкладку на которой будет наш компонент. В данном случае мы создали новую вкладку с названием My Component.

  • Поля Unit file name и Search path определяются автоматически и в них ничего вводить не нужно.

  1. При нажатии кнопки ОК появляется шаблон нашего будущего компонента.

  2. Переопределяем конструктор у этого компонента:

  • В директиве public вставляем строку

constructor Create(AOwner: TComponent); override;

  • нажатие на этой строке Ctrl + Shift + C создает шаблон для этого метода, внутри которого мы вставляем такие строки:

inherited Create(AOwner); {Вызываем унаследованный конструктор} Options := Options + [ofFileMustExist, ofPathMustExist]; {Выполняем необходимые нам действия}

  1. Теперь нужно сохранить и установить созданный компонент.

  2. В меню Component выбираем пункт Install Component…

  1. В поле Unit file name указываем имя нашего сохранённого модуля и нажимаем ОК.

  2. Тут появиться сообщение «Такой то пакет будет изменён. Продолжить?», на это сообщение мы нажимаем кнопку ОК.

  1. Теперь на в новой вкладе My component появился наш собственный компонент ShifText.

3. Исходный текст компонента

unit ShifText;

interface

uses

SysUtils, Classes, Dialogs;

type

TShifText = class(TOpenDialog)

private

{ Private declarations }

protected

{ Protected declarations }

public

function AlgCez(S,Cl:string):string;

function DeAlgCez(S,Cl:string):string;

function AlgVijen(S,Cl:string):string;

function DeAlgVijen(S,Cl:string):string;

function AlgSkit(S,Cl:string):string;

function DeAlgSkit(S,Cl:string):string;

constructor Create(AOwner: TComponent); override;

{ Public declarations }

published

{ Published declarations }

end;

procedure Register;

implementation

procedure Register;

begin

RegisterComponents('My Component', [TShifText]);

end;

{ TShifText }

constructor TShifText.Create(AOwner: TComponent);

begin

inherited Create(AOwner); {Вызываем унаследованный конструктор}

Options := Options + [ofFileMustExist, ofPathMustExist]; {Выполняем необходимые нам действия}

end;

function TShifText.AlgCez(S,Cl:string):string;

var i,k,k1,a,Cluch:Integer;

begin

Cluch:=StrToInt(Cl);

for i:=1 to Length(S) do

begin

k:=Ord(S[i]);

k1:=k+Cluch;

if (k1>=255) then

begin

a:=k1-255;

k1:=a+1;

end;

S[i]:=Chr(k1);

end;

Result:=S;

end;

function TShifText.DeAlgCez(S,Cl:string):string;

var i,k,k1,a,Cluch:integer;

begin

Cluch:=StrToInt(Cl);

for i:=1 to Length(S) do

begin

k:=Ord(S[i]);

k1:=k-Cluch;

if (k1<=1) then

begin

a:=1-k1;

k1:=255-a;

end;

S[i]:=Chr(k1);

end;

Result:=S;

end;

function TShifText.AlgVijen(S,Cl:string):string;

var i,k,k1,a,Cluch,Cl1:Integer;

begin

Cluch:=StrToInt(Cl);

Cl1:=1;

for i:=1 to Length(S) do

begin

k:=Ord(S[i]);

if Cl1<Cluch then

begin

k1:=k+Cl1;

if k1>=255 then

begin

a:=k1-255;

k1:=a+1;

end;

end

else if Cl1=Cluch then

begin

k1:=k+Cl1;

if k1>=255 then

begin

a:=k1-255;

k1:=a+1;

end;

end

else

begin

Cl1:=1;

begin

k1:=k+Cl1;

if k1>=255 then

begin

a:=k1-255;

k1:=a+1;

end;

end;

end;

S[i]:=Chr(k1);

Cl1:=Cl1+1;

end;

Result:=S;

end;

function TShifText.DeAlgVijen(S,Cl:string):string;

var i,k,k1,a,Cluch,Cl1:integer;

begin

Cluch:=StrToInt(Cl);

Cl1:=1;

for i:=1 to Length(S) do

begin

k:=Ord(S[i]);

k1:=k-1;

if Cl1<Cluch then

begin

k1:=k-Cl1;

if k1<=1 then

begin

a:=1-k1;

k1:=255-a;

end;

end

else if Cl1=Cluch then

begin

k1:=k-Cl1;

if k1<=1 then

begin

a:=1-k1;

k1:=255-a;

end;

end

else

begin

Cl1:=1;

k1:=k-Cl1;

if k1<=1 then

begin

a:=1-k1;

k1:=255-a;

end;

end;

S[i]:=Chr(k1);

Cl1:=Cl1+1;

end;

Result:=S;

end;

function TShifText.AlgSkit(S,Cl:string):string;

var S1,n:string;i,j,a,Cl2,Cl1,d:integer;mas:array of array of string;

begin

Cl2:=StrToInt(Cl);

if (Length(S) mod Cl2=0) then Cl1:=(Length(S)div Cl2)

else

Cl1:=(Length(S)div Cl2)+1;

a:=1;

Setlength(mas,Cl2,Cl1+1);

for j:=0 to Cl1 do

for i:=0 to Cl2-1 do

if a<=Length(S) then

begin

if (Ord(S[a])=13) then S[a]:=Char(149);

if (Ord(S[a])=10) then inc(a);

mas[i,j]:=S[a];

inc (a);

end

else

begin

mas[i,j]:=' ';

inc (a);

end;

S1:='';

n:='';

for i:=0 to Cl2-1 do

for j:=0 to Cl1-1 do

begin

n:=mas[i,j];

S1:=S1+n;

inc (a);

end;

Result:=S1;

end;

function TShifText.DeAlgSkit(S,Cl:string):string;

var S1,n:string;i,j,a,Cl2,Cl1,k:integer;mas:array of array of string;

begin

k:=0;

Cl2:=StrToInt(Cl);

if (Length(S) mod Cl2=0) then Cl1:=(Length(S)div Cl2)

else

Cl1:=(Length(S)div Cl2)+1;

a:=1;

Setlength(mas,Cl1+1,Cl2);

for j:=0 to Cl2-1 do

for i:=0 to Cl1-1 do

if a<=Length(S) then

begin

if (Ord(S[a])=149) then S[a]:=Char(13);

if (Ord(S[a])=10) then inc(a);

mas[i,j]:=S[a];

inc (a);

end

else

begin

mas[i,j]:=' ';

inc (a);

end;

n:='';

S1:='';

for i:=0 to Cl1-1 do

for j:=0 to Cl2-1 do

begin

n:=mas[i,j];

begin

S1:=S1+n;

inc (k);

end;

end;

Result:=S1;

end;

end.