Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Delphi 7, шифр Цезаря. Проблема с буквой "я".

Автор: wakara
Дата сообщения: 30.11.2013 22:04
[more] Здравствуйте. Написал программу для шифрования в делфи 7. Все работает хорошо, пока перенос по ключу не попадает на букву "я". Программа использует таблицу аски. Ниже приведу код с двух кнопок. Первая шифрование, вторая дешифрование.

procedure TForm1.Button1Click(Sender: TObject);
var temp:string; i,j:integer;
begin
temp:=''; i:=0; j:=0;
for i:=0 to memo1.lines.Count-1 do
begin
for j:=1 to length(memo1.Lines[i]) do
begin
temp:=temp+chr((ord(memo1.lines[i][j])+strtoint(edit1.Text))mod 255);
end;
temp:=temp+#13+#10;
end;
memo2.text:=temp;
end;

procedure TForm1.Button2Click(Sender: TObject);
var temp:string; i,j:integer;
begin
temp:=''; i:=0; j:=0;
for i:=0 to memo2.lines.Count-1 do
begin
for j:=1 to length(memo2.Lines[i])do
begin
temp:=temp+chr((ord(memo2.lines[i][j])-strtoint(edit1.Text))mod 255);
end;
temp:=temp+#13+#10;
end;
memo2.text:=temp;
end; [/more]

Добавлено:
Ссылка
Ссылка на готовую программу.
Автор: volser
Дата сообщения: 01.12.2013 11:40
Какой индекс в буквы "я"? И какой получается после расшифровки?
Автор: A_V
Дата сообщения: 01.12.2013 18:59
wakara
если записывать управляющие симиолы (с кодами < 32, пробела т.е) в визуальный контрол (memo), то потом будут проблемы при чтении. если так уж хочется работать с текстом прям из контрола, то нужно такие символы дополнительно сдвигать и потом восстанавливать:

Код:
procedure TForm1.Button2Click(Sender: TObject);
var temp:string; i,j:integer;
c: byte;
begin
temp:=''; i:=0; j:=0;
for i:=0 to memo2.lines.Count-1 do
begin
for j:=1 to length(memo2.Lines[i])do
begin
c := ord(memo2.lines[i][j])-strtoint(edit1.Text);
if c < 32 then
c := c - 32;
temp:=temp+char(c );
end;
temp:=temp+#13+#10;
end;
memo2.text:=temp;
end;

procedure TForm1.Button1Click(Sender: TObject);
var temp:string; i,j:integer;
var c: byte;
begin
temp:=''; i:=0; j:=0;
for i:=0 to memo1.lines.Count-1 do
begin
for j:=1 to length(memo1.Lines[i]) do
begin
c := (ord(memo1.lines[i][j])+strtoint(edit1.Text));
if c < 32 then
c := c + 32;
temp:=temp+char(c);
end;
temp:=temp+#13+#10;
end;
memo2.text:=temp;
end;
Автор: wakara
Дата сообщения: 02.12.2013 18:52
A_V, благодарю.
Автор: GDSprogramer
Дата сообщения: 30.03.2014 20:28
Программа мною уже написана. Можете скачать ее на моем сайте програм.рф

Страницы: 1

Предыдущая тема: Составить программу на языке Turbo Pascal 7.0


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.