![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Шифрование [D7, XP]
Distemp © (2011-02-21 00:50:00)Суть в том, что программа работает немного неправильно. Например, если ввести лозунг "тетрадь", текст "ручка", и нажать шифр, то в алфавите лозунга выведется "те Традьбвгжзийклмнопсуфхцчшщъыэюя". Как сделать так, чтобы в алфавите лозунга выводилась только 1 буква "Т" (т.е. как убрать ту, которая выделена)
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Button1: TButton;
Button2: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j,k: integer;
l,m: string;
flag: boolean;
begin
flag:=false;
m:='';
k:=0;
l:='абвгдежзийклмнопрстуфхцчшщъыьэюя';
for i:=1 to 50 do
begin
if length(edit1.text)>=i then m:=m+edit1.Text[i]
else
begin
inc(k);
for j:=1 to length(edit1.text) do
if l[k]=edit1.Text[j] then flag:=true;
if not flag then m:=m+l[k];
flag:=false;
end;
end;
for i:=1 to length(edit2.Text) do
for j:=1 to length(m) do
if edit2.Text[i]=l[j] then edit3.Text:=edit3.Text+m[j];
edit4.Text:=l;
edit5.Text:=m;
end;
end.
Dennis I. Komarov (2011-02-21 13:43:00) [1]
> А что будешь делать если будет?
Тетрадь
han_malign (2011-02-21 13:33:00) [2]вообще то RC4 немного не так работает - перемешиваниекодовой таблицы происходят не только на ключевой последовательности, но и на кодируемой посылке...
http://ru.wikipedia.org/wiki/RC4
Dennis I. Komarov (2011-02-21 12:23:00) [3]X := []; a := '';
i:=1..n do
if x[i] not in X then begin
X add x[i];
a add x[i];
end;
ABC:=a+ABC;
А что будешь делать если будет?
P.S. Это не код, это алгоритм...
Distemp (2011-02-21 12:10:00) [4]
> Это учебное задание?
Да
Dennis I. Komarov (2011-02-21 12:05:00) [5]Это учебное задание?
Distemp (2011-02-21 11:54:00) [6]
> 1. а что за шифр такой?2. т.е. дано 2 слова, из второго
> надо буквы, встречающиеся в первом, вынести вперед?зынедавно
> спам письмо получил - сплошные Т в теме... не? :-|)
Например
лозунг: тетрадь
текст: ручка
алфавит: абвгдежзийклмнопрстуфхцчшщъыьэюя
алф. лозунга: терадьбвгжзийклмнопсуфхцчшщъыэюя
шифр: нсцзт
Алфавит лозунга должен получиться из лозунга+алфавит, без повторяющихся букв. Потом берем первую букву текста "Р" и ищем в алф. лозунга соответствующую ей по счету букву, получается "Н" и т.д., так и получается шифр.
Гость (2011-02-21 11:25:00) [7]1. а что за шифр такой?
2. т.е. дано 2 слова, из второго надо буквы, встречающиеся в первом, вынести вперед?
зы
недавно спам письмо получил - сплошные Т в теме...
не? :-|)
KilkennyCat (2011-02-21 02:22:00) [8]медленный способ: проверять строку на наличие такой буквы.
быстрый способ: запоминать, какие буквы были.
один из вариантов медленного:
медленный:
var
i, z : integer;
m : string;
begin
z := length(edit1.text);
if z < 1 then exit;
m:= edit1.text[1];
if z > 1 then for i := 2 to z do if AnsiPos(edit1.text[i], m) = 0 then m := m + edit1.text[i];
for i := 1072 to 1105 do if AnsiPos(chr(i), m) = 0 then m := m + chr(i);
end;