Дорогие и многоуважаемые модераторы!А также другие форумчане!Пожалуйста помогите!
Задача(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)(т.е в программе надо указать будет этот файл (или путь к нему))
Вот я составил эти программы, но они работают неправильно!Пожалуйста исправьте ошибки!
Код
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 25.10.2005 20:30
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 25.10.2005 21:00
А как указать путь к файлам? Да, но это ведь не все програмы!Помогите пожалуйста мне надо сдавать завтра!!!
Добавлено: Кстати в самом начале после alpha выдается ошибка!(что-то связано со знаком=)!Пожалуйста помогите! Заранее спасибо!
Автор: volvo 25.10.2005 21:07
Цитата
Да, но это ведь не все програмы!Помогите пожалуйста мне надо сдавать завтра!!!
Ну, и что? Сдавайте... Можно было бы и за 10 минут до сдачи вспомнить... Я не пишу готовых программ, кстати, во многом благодаря пользователю с ником alina, которому никогда нельзя было угодить... Так вот теперь пускай этот же пользователь попробует угодить преподавателю.
Цитата
Кстати в самом начале после alpha выдается ошибка!(что-то связано со знаком=)
timur, также известный как alina и adelina !!! Пора бы уже привыкнуть к тому, что я НЕ ДАЮ непроверенных решений! Если это лежит здесь, значит, это было скопировано из окна редактора после проверки...
Все претензии - к прокладке между стулом и клавиатурой!