Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Шифрование

Автор: Black Zi 19.03.2007 21:41

1. Создать программу шифровщик-дишифровщик. Вначале выбераем шифровку или дишифровку выполняем. Для шифровки вводим русский текст, преобразуем все буквы в заглавные, а затем прибавляем каждому коду буквы сдвиг (сдвиг может быть и отрицательным, мы сами его вводим). А на дишифровщике точно на оборот... Заранее благодарю!!!

Автор: Tan 19.03.2007 22:05

Ну вот вроде шифровка так выглядит, если я правильно понял ( или с русскими по другому? ), для любых сиволов. Это только шифровка обратный процесс аналогичен:

uses crt;
var s : string;
ch : char;
n,i : integer;
newstring : string;
begin
Clrscr;
writeln ('Vvedite stroku');
readln (s);
newstring:=s;
writeln ('Shifrujem: Y/N');
readln (ch);
if (Ch='y') or (Ch='y') then
begin
writeln ('Vvedite velichinu smeshenija? ');
readln (n);
for i:=1 to Length(S) do
begin
newstring[i]:=Upcase(chr(ord(s[i])+n));
end;
end else exit;
writeln ('Novaja stroka: ',newstring);
readkey;
end.


Автор: klem4 19.03.2007 22:30

 ! 
Если тема не будет переименована, она будет закрыта



Tan, и что выдаст твоя программа для строки

ab при n = -4 ?

Пользуемся поиском, задача решалась !

Автор: Tan 19.03.2007 22:38

Границы смещения я и не ставил, если ты про это конечно, если человек понял идею для него это не проблема.

Автор: klem4 19.03.2007 22:39

Да что ты ! А что-же у тебя в программе знначат вот эти строки ?

 writeln ('Vvedite velichinu smeshenija? ');
readln (n);

//....

newstring[i]:=Upcase(chr(ord(s[i])+n))


?

+ Смотрел какой результат UpCase дает для кириллицы ? А ведь именно с ней надо работать по заданию.

Автор: compiler 20.03.2007 0:48

Цитата(klem4 @ 19.03.2007 17:30) *

Если тема не будет переименована, она будет закрыта

а пользыватели могут периименовывать темы? Мы простые смертные на это к сожелению не способны...

Автор: Артемий2 20.03.2007 1:08

{$X+}
function UpNCase(ch: char): char;
begin
case ch of
'А'..'п': begin UpNCase:=chr(ord('А')+ord(ch)-ord('а')); end;
'р'..'я': begin UpNCase:=chr(ord('Р')+ord(ch)-ord('р')) end;
end;
end;


Вот подкидываю с кириллицей..

Автор: Алена 20.03.2007 15:53

http://forum.pascal.net.ru/index.php?s=&showtopic=3913&view=findpost&p=34167 (метод Цезаря)

Автор: Black Zi 20.03.2007 21:07

Ребят, век не забудем... Я пока не проверял, но выгледит красиво. Надеюсь машине тоже понравится... А переименовать почему-то не могу тему. Мож потому что я с мини оперы сдеся...

Автор: klem4 20.03.2007 21:21

Мне кажется просто Цезарь это не совсем то что нужно, я думаю должно быть что-то вроде этого:

const
s_alpha = 'абвгдеёжзийклмнопрстуфхцчшщъыьэюя';
b_alpha = 'АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';

function Lower(s: String): String;
var
i: Integer;
begin
for i := 1 to Length(s) do
s[i] := s_alpha[ Pos(s[i], b_alpha) ];
Lower := s;
end;

function Crypt(const s: String; shift: Integer): String;
var
newPos, i, delta: Integer;
r: String;
begin

shift := shift - 33 * (shift div 33);

if shift < 0 then shift := 33 + shift;

r := '';

for i := 1 to Length(s) do begin
newPos := Pos(s[i], s_alpha) + shift;
if newPos > 33 then dec(newPos, 33);
r := r + b_alpha[newPos];
end;

Crypt := r;
end;

function DeCrypt(s: String; shift: Integer): String;
begin
Decrypt := Lower(Crypt(Lower(s), -shift));
end;

var
s: String;

begin
s := 'абвя';
writeln(s);
s := Crypt(s, -34);
writeln(s);
s := DeCrypt(s, -34);
writeln(s);
end.