Помощь - Поиск - Пользователи - Календарь
Полная версия: Шифровка строк
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
timur
Дорогие и многоуважаемые модераторы!А также другие форумчане!Пожалуйста помогите!

Задача(1):
Дано: Строка s1 и ключ.
Получить зашифрованную строку s2! У s2 длина равна длине s1!!!
Вот программа, но она для частного случая, т.к. если k будет не 3 то тогда придется присваивать иксу не ‘а’, а другую букву!
Код
uses crt;
var s:string;
   i:byte;
BEGIN
    clrscr;
    write('Введите строку для шифровки: ');
    readln(s);
    for i:=1 to length(s) do
              else if s[i]='X' then s[i]:='A'
             else if s[i]='Y' then s[i]:='B'
             else if s[i]='Z' then s[i]:='C'
             else if s[i]='x' then s[i]:='a'
             else if s[i]='y' then s[i]:='b'
             else if s[i]='z' then s[i]:='c'
             else s[i]:=chr(ord(s[i])+3);
    writeln(s);
    readln;
END.

Надо учитывать, что каждой букве соответствует свое число!
Например, A=65, B=66,C=67 и т.д.

Задача(2):
Дано: ключ и s2.
Расшифровать строку s2 и получить (найти) строку s1!

Задача(3):
Дано: s2, ключ неизвестен( ключ находится в пределах [2;26]
Расшифровать строку s2.В файле out.txt будет 26 строк, рядом со строками будет ключ!

Задача(4)
Дана строка s1 и плавающий ключ. Зашифровать строку s1 получить строку s2!
Плавающий ключ- это ключ который не постоянен для каждой буквы! Т.е каждая буква имеет свой определенный ключ!

Т.Е. надо сделать следующее:
Файл shi1.dat-надо расшифровать(т.е в программе надо указать будет этот файл (или путь к нему))
Файл f3.dat-надо расшифровать(т.е в программе надо указать будет этот файл (или путь к нему))
Файл f1.dat-надо зашифровать двумя способами(это задача 1 и задача4)(т.е в программе надо указать будет этот файл (или путь к нему))

Вот я составил эти программы, но они работают неправильно!Пожалуйста исправьте ошибки! sad.gif sad.gif sad.gif
Код
procedure p1;
var s,s2:string;
k,i:byte;
begin
assign(input,'f1.dat');reset(input);
assign(output,'f1_out.dat');rewrite(output);
readln(s);readln(k);
s2:='';
for i:=1 to length(s) do
begin
if ord(s[i])+k<255 then
s2:=s2+chr(ord(s[i])+k) else
s2:=s2+chr(ord(s[i])+k-254);
end;
writeln(s2);
close(input);close(output);
end;

procedure p2;
var   s,s2:string;
k,i:byte;
begin
assign(input,'shi1.dat');reset(input);
assign(output,'shi1_out.dat');rewrite(output);
readln(s);
readln(k);
s2:='';
for i:=1 to length(s) do         begin
if ord(s[i])-k>0 then
s2:=s2+chr(ord(s[i])-k) else
s2:=s2+chr(ord(s[i])-k+254);
end;
writeln(s2);
close(input);close(output);
end;

procedure p3;
var a:array[1..26] of string;
s:string;
i,k:byte;
begin
assign(input,'f3.dat');reset(input);
assign(output,'f3_out.dat');rewrite(output);
readln(s);
for i:=1 to 26 do a[i]:='';
for k:=1 to 26  do
for i:=1 to length(s) do
begin
if ord(s[i])-k>0 then
a[k]:=a[k]+chr(ord(s[i])-k) else
a[k]:=a[k]+chr(ord(s[i])-k+254);
end;

for k:=1 to 26 do
writeln(a[k],' ',k);

close(input);close(output);
end;


procedure p4;
var a:array[1..26] of string;
b:array[1..255] of integer;
code:integer;
s,st:string;
i,k:byte;
begin
assign(input,'f4.dat');reset(input);
assign(output,'f4_out.dat');rewrite(output);
readln(s);
readln(st);
k:=length(st);

for i:=1 to k do val(st[i],b[i],code);
      st:='';
for i:=1 to k do
begin
if ord(s[i])+b[i]<255 then
st:=st+chr(ord(s[i])+b[i]) else
st:=st+chr(ord(s[i])+b[i]-254);
end;
 writeln(st);
close(input);close(output);
end;


BEGIN
p1;
p2;
p3;
p4;
END.

Всем заранее спасибо!!!
volvo
timur, выделяем само кодирование и декодирование в отдельные функции, и вся дальнейшая работа делается элементарно... Вот эти 2 функции:
const
alpha: string =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
function encode(s: string; key: byte): string;
var
i, p: integer;
begin
for i := 1 to length(s) do begin
p := pos(s[i], alpha);
if p > 0 then begin

inc(p, key);
if p > length(alpha) then
dec(p, length(alpha));

s[i] := alpha[p];
end;
end;
encode := s;
end;

function decode(s: string; key: byte): string;
var i, p: integer;
begin
for i := 1 to length(s) do begin
p := pos(s[i], alpha);
if p > 0 then begin
dec(p, key);
if p < 0 then
inc(p, length(alpha));

s[i] := alpha[p];
end;
end;
decode := s;
end;
timur
А как указать путь к файлам?
Да, но это ведь не все програмы!Помогите пожалуйста мне надо сдавать завтра!!!

Добавлено:
Кстати в самом начале после alpha выдается ошибка!(что-то связано со знаком=)!Пожалуйста помогите!
Заранее спасибо!
volvo
Цитата
Да, но это ведь не все програмы!Помогите пожалуйста мне надо сдавать завтра!!!
Ну, и что? Сдавайте... Можно было бы и за 10 минут до сдачи вспомнить...
Я не пишу готовых программ, кстати, во многом благодаря пользователю с ником alina, которому никогда нельзя было угодить... Так вот теперь пускай этот же пользователь попробует угодить преподавателю.

Цитата
Кстати в самом начале после alpha выдается ошибка!(что-то связано со знаком=)

timur, также известный как alina и adelina !!! angry.gif Пора бы уже привыкнуть к тому, что я НЕ ДАЮ непроверенных решений! Если это лежит здесь, значит, это было скопировано из окна редактора после проверки...

Все претензии - к прокладке между стулом и клавиатурой!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.