Показать сообщение отдельно
  #4  
Старый 02.06.2010, 14:51
Аватар для Ferra
Ferra Ferra вне форума
Местный
 
Регистрация: 12.03.2006
Адрес: Минск
Сообщения: 527
Репутация: 1336
По умолчанию

Меня смущает то, что ты складываешь i-й символ ключа с i-м текста в обоих случаях. Во-вторых в Шифре Цезаря идёт сдвиг каждого символа на определённое фиксированное число. Так что поясни что ты хочешь сделать.
http://ru.wikipedia.org/wiki/Шифр_Цезаря

Сча набросал, вроде работает, лови:
Код:
//Найти позицию символа в алфавите
function PosInVoc(Symbol : Char; Vocabulary : String) : Word;
var
 i : Word;
begin
Result := 0;
 for i := 1 to Length(Vocabulary) do
  if Vocabulary[i] = Symbol then
    begin
    Result := i;
    break;
    end;
end;

//Шифрование Цзарем
function Caesar(Text : String; Seed : Byte; Vocabulary : String; Encrypt : Boolean = True) : String;
var
 i : LongWord;
 n, pos : Word;
begin
Result := '';
n := Length(Vocabulary);
Seed := Seed mod n;
 if Length(Text) <> 0 then
  for i := 1 to Length(Text) do
    begin
    pos := PosInVoc(Text[i], Vocabulary);
     if Encrypt then Result := Result + Vocabulary[(pos + Seed) mod n]
      else Result := Result + Vocabulary[(pos - Seed + n) mod n]
    end;
end;

//Использование
procedure TForm1.Button1Click(Sender: TObject);
Begin
//текст - "hello", шифруется в эдит1, дешифрация в эдит2
Edit1.Text := Caesar('hello', 3, 'qwertyuiopasdfghjklzxcvbnm', true);
Edit2.Text := Caesar(Edit1.Text, 3, 'qwertyuiopasdfghjklzxcvbnm', false);
end;
__________________
Нет повести печальнее на свете, чем повесть о заклиневшем Resete.
Ответить с цитированием