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

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

Шифрование [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;


Наверх

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