Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Система Цезаря с ключевым словом





unit Unit1

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, math, Unit2, Unit3;

type

TForm1 = class(TForm)

edit_key_word: TEdit;

Label1: TLabel;

edit_key_number: TEdit;

Label2: TLabel;

Memo1: TMemo;

Label3: TLabel;

Button1: TButton;

Button2: TButton;

Memo2: TMemo;

Memo3: TMemo;

Label4: TLabel;

Label5: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

function crypt_sym(x: widechar): widechar; // функция, которая будет заменять символ из шифруемого текста на символ из подстановки. Она при вызове принимает аргумент типа widechar и возвращает результат типа widechar

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

mass_1: array of char;

i, j, k, key_number: integer;

FLAG_1: boolean;

str_2, str_1, key_word: string;

str_text, str_text_1: widestring;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);

begin

setlength(str_1, 26);

for i:= 1 to 26 do //цикл для вывода алфавита

begin

str_1[i]:= chr(i + 96);

memo1.Lines[0]:= memo1.Lines[0] + str_1[i] + ' ';

end;end;

procedure TForm1.Button1Click(Sender: TObject);

begin

setlength(mass_1, 52);

setlength(str_2, 26); // в str_2 будем формировать подстановку

setlength(key_word, length(edit_key_word.Text)); // длина строки равна длине строки, полученной с формы

key_word:= edit_key_word.Text;

key_number:= strtoint(edit_key_number.Text);

k:= 1; // будем использовать в качестве индкса элемнтов mass_1

for i:= 1 to key_number do //цикл для заполнения первой чатсти массива

begin

FLAG_1:= true;

for j:= 1 to length(key_word) do // цикл проверяющий повторяется ли элемент алфавита. В строку пишутся только те, которых нет в key_word и которые располагаются до номера первой буквы ключевого слова

begin

if key_word[j] = str_1[i] then

begin

FLAG_1:= false;

break;

end; end;

if FLAG_1 = false then continue

else begin

str_2[k]:= str_1[i];

inc(k);

end; end;

for i:= 1 to length(key_word) do // цикл продолжающий заполнение массива

begin

str_2[k]:= key_word[i];

inc(k); end;

for i:= length(key_word) + 1 to 26 do

begin

FLAG_1:= true;

for j:= 1 to length(key_word) do // цикл проверяющий повторяется ли элемент алфавита. В строку не пишутся те буквы, которые есть в key_word

begin

if key_word[j] = str_1[i] then

begin

FLAG_1:= false;

break;

end; end;

if FLAG_1 = false then continue

else begin

str_2[k]:= str_1[i];

inc(k); end; end;

for i:= 1 to 26 do //цикл для вывода подстановки

begin

memo1.Lines[2]:= memo1.Lines[2] + str_2[i] + ' ';

end;

setlength(str_text, length(memo2.Lines[0])*memo2.Lines.Count); // задали длину такую, чтобы точно хватило

for i:= 0 to memo2.Lines.Count do // цикл для записи всего шифруемого текста в одну строку

begin

str_text:= str_text + memo2.Lines[i];

end;

for i:= 1 to length(str_text) do

begin

str_text_1[i]:= crypt_sym(str_text[i]); // присваиваем элементу строки результат функции crypt_sym(x: widechar): widechar

end;

memo3.Lines[0]:= str_text_1 // вывод зашифрованного текста

end;

function TForm1.crypt_sym (x: widechar): widechar;

var

num: integer; // здесь будет хранить номер в алфавите того элемента, который пришёл. А потом заменять пришедший символ на символ из строки подстановки с тем же номером. А алфавит у нас хранится в строке str_1

begin

num:= pos(x, str_1);

crypt_sym:= widechar(str_2[num]); // widechar это функция, преобразующая строку (в нашем случае символ типа char) типа string в строку типа widestring (символ типа widechar). Это необходимо, потому что шифруемый текст у нас будет храниться в строке типа widestring, а подстановка хранится в строке типа string

end;end.







Дата добавления: 2015-06-15; просмотров: 429. Нарушение авторских прав; Мы поможем в написании вашей работы!




Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...


ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...


Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...


Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

Различие эмпиризма и рационализма Родоначальником эмпиризма стал английский философ Ф. Бэкон. Основной тезис эмпиризма гласит: в разуме нет ничего такого...

Индекс гингивита (PMA) (Schour, Massler, 1948) Для оценки тяжести гингивита (а в последующем и ре­гистрации динамики процесса) используют папиллярно-маргинально-альвеолярный индекс (РМА)...

Методика исследования периферических лимфатических узлов. Исследование периферических лимфатических узлов производится с помощью осмотра и пальпации...

Задержки и неисправности пистолета Макарова 1.Что может произойти при стрельбе из пистолета, если загрязнятся пазы на рамке...

Вопрос. Отличие деятельности человека от поведения животных главные отличия деятельности человека от активности животных сводятся к следующему: 1...

Расчет концентрации титрованных растворов с помощью поправочного коэффициента При выполнении серийных анализов ГОСТ или ведомственная инструкция обычно предусматривают применение раствора заданной концентрации или заданного титра...

Studopedia.info - Студопедия - 2014-2024 год . (0.008 сек.) русская версия | украинская версия