Program Shifr;var s1,s2:string; i,n,k,p:integer; key:integer; //ключ шифрования...

0 голосов
121 просмотров

Program Shifr;
var s1,s2:string;
i,n,k,p:integer;
key:integer; //ключ шифрования
f1,f2:text;
BEGIN
assign(f1,'Dannie.txt');
assign(f2,'Shifr.txt');
reset(f1);
rewrite(f2);
writeln('Введите ключ шифрования от 1 до 33:');
readln(key);
while Not(Eof(f1)) do
begin
readln(f1,s1);
s2:='';
for i:=1 to length(s1) do
s2:=s2+chr(ord(s1[i])+key);
writeln(f2,s2);
end;
close(f1);
close(f2);
END.
. Создать программы шифрации и дешифрации для следующего цикличного модифицированного алгоритма Цезаря: ключ шифрования 1 цифра от 1 до 26, эта цифра определяет сдвиг 1 симовла шифруемого текста в сторону увеличения, 2 символа шифруемого текста в сторону уменшения, 3 символа снова в сторону увеличения и т. д.
При этом если мы сдвигаем в сторону увеличения последние буквы алфавита, то они циклически преобразуются в первые, напрмер 'z' сдвигаемая на 2 позиции вправо превратится в 'b'. Если сдвиг идет в сторону уменшения, то наоборот первые симолы алфавита, преобразуются в посление, например, 'a' сдвигаемая в сторону уменьшения на 2 позиции, преобразуется в 'y'.
Примечание. Для шифруемого текста в этой задаче проще использовать только симолы латинского алфавита.


Информатика (125 баллов) | 121 просмотров
Дан 1 ответ
0 голосов
Правильный ответ

Program Shifr;
var s1,s2,alf:string;
i:integer;
key, Kod:integer; //ключ шифрования
f1,f2:text;
BEGIN
alf:='abcdefghijklmnopqrstuvwxyz';
assign(f1,'Dannie.txt'); 
assign(f2,'Shifr.txt'); 
reset(f1);
rewrite(f2);
writeln('Введите ключ шифрования от 1 до 25:');
readln(key);
while Not(Eof(f1)) do
  begin
  readln(f1,s1);
  s2:='';
  for i:=1 to length(s1) do
    begin
    Kod:=Pos(s1[i],s1);
    Kod:=Kod+key;
    if Kod>26 then Kod:=Kod-26;
    if Kod<1 then Kod:=Kod+26;<br>    s2:=s2+alf[Kod];
    key:=-key;
    end;
  writeln(f2,s2);
  end;
close(f1); 
close(f2); 
END. 

(6.2k баллов)
0

Ну, раз вопросов нет, ухожу. Попозже загляну.

0

программа работает и без прописывания пути, нужно только в настройках компиляции убрать галку с "выходные файлы генерировать в папку и удалить файл exe после выполнения "

0

Да, молодец, что разобралась сама.

0

Так я пошел?

0

Да, конечно, спасибо большое))

0

где мне поменять знаки чтобы получился дешифратор?

0

Все-таки тут есть ошибка. Не выявил ее при тестировании, потому что плохой тестовый набор взял. Строка Kod:=Pos(s1[i],s1); должна выглядеть так Kod:=Pos(s1[i],alf); А чтобы получился дешифратор надо строку Kod:=Kod+key; поменять на Kod:=Kod-key;

0

спасибо

0

что означает оператор ALF?

0

Это не оператор. Это строковая переменная. В ней записан весь алфавит, поэтому так и назвал.