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

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

Форум «Всё о Паскале» _ Задачи _ Криптография

Автор: Дюдя 5.07.2006 20:23

Решил написать примитивный шифровальщик smile.gif
Идея такая: вводим слово, а программа сдвигает каждую букву вперед по алфавиту.
"А" меняется на "Б", "Б" на "В" и т.д.
Но беда - не сообразил, как сделать. Натолкните на верную мысль, пожалуйста smile.gif

Автор: Bokul 5.07.2006 20:27

if a='z' then
a:='a'
else
a:=succ(a);

Автор: volvo 5.07.2006 20:33

Хорошо. "Я" на что меняться будет? Опять на "А"?

Тогда легче просто описАть строку - алфавит и работать с ней:

Const
alpha: string = 'АБВ...ЭЮЯ';
{ естественно, строка должна быть заполнена ВСЕМИ символами алфавита }
...
readln(s);
for i := 1 to length(s) do
s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) + 1];


Bokul, а то, что множество символов кириллицы разорвано между 'п' и 'р', это ничего? У тебя там будет сбой smile.gif

Автор: Дюдя 5.07.2006 20:42

Да, опять на А smile.gif
Зато полноценный криптограф получается, правда слабенький smile.gif Весьма...

Автор: volvo 5.07.2006 20:44

Дюдя, сюда тоже загляни:
http://forum.pascal.net.ru/index.php?showtopic=3913

Автор: Bokul 5.07.2006 20:50

Цитата
Зато полноценный криптограф получается, правда слабенький Весьма

Можно привести полностю в нечитаемий вид изменив чуточку алфавит( у Volvo это alpha), добавив
некоторые символы и цифры: №"%?*()_+459*-+ и т.д.

Автор: Дюдя 5.07.2006 21:40

Получился шифровальщик для самых маленьких smile.gif

Код

program shtirliz;
uses crt;
const
alpha: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !@#$%^&*(),/2';

var
s: string;
i: byte;

begin
clrscr;
write('Enter text: ');
readln(s);
  for i := 1 to length(s) do
    s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) +1];
  for i := 1 to length(s) do
  write(s[i]);
readln;
write('Now we will decode it! Press enter!');
readln;
  for i := 1 to length(s) do
    s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) -1];
  for i := 1 to length(s) do
  write(s[i]);
readln;
end.

Автор: volvo 5.07.2006 22:05

Дюдя, проверь на строке, в которой есть 'A' smile.gif

Автор: Bokul 5.07.2006 22:05

Цитата
Получился шифровальщик для самых маленьких

s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) +1];

s[i] := alpha[(pos(s[i], alpha) mod Length(alpha)) +1];

Вместо единицы введи целочисленную переменную, ключ.
По нему ты сможешь шифровать строчку, и только зная его - расшифровать ее.
alpha: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 !@#$%^&*(),/2';

Лучше разбросать, перемешать елементы алфавита между собой.

Автор: pavel_the_best 2.11.2017 13:45

function code(a: string; f: integer): string;
var
e: string;
b: char;
c, d: integer;
begin
d := 1;
e := '';
while d <= length(a) do
begin
b := a[d];
c := ord(b);
c := c + f;
b := chr©;
e := e + b;
d := d + 1;
end;
Result := e;
end;

function decode(a:string; f:integer):string;
var
e: string;
b: char;
c, d: integer;
begin
d := 1;
e := '';
while d <= length(a) do
begin
b := a[d];
c := ord(b);
c := c - f;
b := chr©;
e := e + b;
d := d + 1;
end;
Result := e;
end;



var
a, b, c: string;
f: integer;
begin
randomize;
f:=random(1, 10);
read(a);
b := code(a, f);
writeLn(b);
c := decode(b, f);
writeLn©;
end.


Прикрепленные файлы
Прикрепленный файл  coder.pas ( 769 байт ) Кол-во скачиваний: 256