Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2011, 02:56   #1
oliviya1111
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 27
Вопрос Шифратор клавиш.

это часть из программы...не могу понять как она работает. знаю что меняется буква на другую букву...
самое главное нужно к ней сделать дешифратор. то есть из конечной буквы сделать первоначальную букву.
Помогите. очень надо. особенно важно разъяснение процесса.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
doS:string;
posleS:string;
S:string;
dlina:integer;
i:integer;
begin
posles:=' ';
doS:=Edit1.Text;
dlina:=length(doS);
For i:=1 to dlina do
begin
posleS:=posleS+chr(ord(doS[i])*2);
end;
Edit3.Text:=posleS;
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 10.11.2011 в 08:14.
oliviya1111 вне форума Ответить с цитированием
Старый 10.11.2011, 03:45   #2
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Работает она очень просто - умножает ascii-код каждой буквы на 2, вот и все.

А вот с расшифровкой будут проблемы. Очевидно, что все, что мы можем сделать - заменить умножение делением. Это будет работать для английского текста (точнее для символов, чьи коды <=127). А русский текст надежно расшифровать не получится никак, потому что умножение на 2 фактически выполняется по модулю 255, и байт будет переполняться.
Son Of Pain вне форума Ответить с цитированием
Старый 10.11.2011, 09:58   #3
Хамяг
Форумчанин
 
Аватар для Хамяг
 
Регистрация: 22.08.2008
Сообщений: 105
По умолчанию

widechar - это же 65 килосимволов, разве нет? должно работать всё равно.

хотя, в старых версия делфей char это ansichar, и необходимо самому сменить тип переменной на widechar.

и в качеcтве совета - вместо ord и chr лучше использовать привидение типов (word и widechar).
Хамяг вне форума Ответить с цитированием
Старый 10.11.2011, 12:46   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Цитата:
Сообщение от Хамяг Посмотреть сообщение
хотя, в старых версия делфей char это ansichar, и необходимо самому сменить тип переменной на widechar.
Да, я просто версии старше седьмой в руках не держал, потому исхожу из нее )
Son Of Pain вне форума Ответить с цитированием
Старый 10.11.2011, 19:53   #5
oliviya1111
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Работает она очень просто - умножает ascii-код каждой буквы на 2, вот и все.

А вот с расшифровкой будут проблемы. Очевидно, что все, что мы можем сделать - заменить умножение делением. Это будет работать для английского текста (точнее для символов, чьи коды <=127). А русский текст надежно расшифровать не получится никак, потому что умножение на 2 фактически выполняется по модулю 255, и байт будет переполняться.
Спасибо за помощь) попробую придумать что-нибудь. деление на 2 не помогает. пишет ошибка в неправильности. но ошибка в самой программе.
даже не знаю что придумать...
менять шифратор нельзя точно...
oliviya1111 вне форума Ответить с цитированием
Старый 10.11.2011, 20:56   #6
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Какую-какую ошибку пишет? )
Son Of Pain вне форума Ответить с цитированием
Старый 10.11.2011, 21:41   #7
oliviya1111
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Какую-какую ошибку пишет? )
[Pascal Error] Unit1.pas(45): E2008 Incompatible types
oliviya1111 вне форума Ответить с цитированием
Старый 10.11.2011, 21:53   #8
oliviya1111
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 27
По умолчанию

procedure TForm1.Button2Click(Sender: TObject);
var
doS,posleS,S:string;
dlina,i:integer;
begin
doS:=' ';
posleS:=Edit3.Text;
dlina:=length(posleS);
For i:=1 to dlina do
begin
doS:=doS+chr(ord(posleS[i])/2);
end;
Edit4.Text:=doS;
end.
это типо дешифратор моими руками....
плохо реагирует на строчку: doS:=doS+chr(ord(posleS[i])/2);
oliviya1111 вне форума Ответить с цитированием
Старый 10.11.2011, 21:53   #9
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Вместо / должно быть написано div
Son Of Pain вне форума Ответить с цитированием
Старый 10.11.2011, 21:55   #10
oliviya1111
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 27
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
И что написано в той строчке?
doS:=doS+chr(ord(posleS[i])/2);
пишет ошибку: [Pascal Error] Unit1.pas(45): E2008 Incompatible types
oliviya1111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шифратор на C++ Lampard7 Общие вопросы C/C++ 9 12.10.2011 23:54
Программа-Шифратор venomdanger Помощь студентам 0 27.12.2010 19:12
Шифратор frekoz Общие вопросы C/C++ 6 02.04.2010 13:16
Шифратор на VBA Versifikator Microsoft Office Excel 4 06.12.2007 19:17