Шифрование методом Атбаш (проблемы с кодировкой) - Pascal
Формулировка задачи:
Вот сам код(функция взята с форума):
Проблема в том, что если в файле in.txt : abcdefghijklmnopqrstuvwxyz ,
то в файле out.txt : џћќњ›љ™—–•”“’‘ђЏЋЌЊ‹Љ‰?‡†
Хотя должно быть : ZYXWVUTSRQPONMLKJIHGFEDCBA
Знает кто в чем дело ?
function Atbash(tc: string): string;
var i:integer;
begin
for i:=1 to length(tc) do
tc[i]:=Chr(256-Ord(tc[i]));
Atbash:=tc;
end;
var
s:string;
f,t:text;
begin
assign(f,'in.txt'); reset(f);
assign(t,'out.txt'); rewrite(t);
while not eof(f) do
begin
readln(f,s);
s:=Atbash(s);
writeln(t,s);
end;
close(f);
close(t);
readln;
end.Решение задачи: «Шифрование методом Атбаш (проблемы с кодировкой)»
textual
Листинг программы
function Atbash(tc: string): string; var i:integer; begin for i:=1 to length(tc) do if ((tc[i]>='a') and (tc[i]<='z')) or ((tc[i]>='A') and (tc[i]<='Z')) then tc[i]:=Chr(187-Ord(tc[i])); Atbash:=tc; end; var s:string; f,t:text; begin assign(f,'in.txt'); reset(f); assign(t,'out.txt'); rewrite(t); while not eof(f) do begin readln(f,s); s:=Atbash(s); writeln(t,s); end; close(f); close(t); end.
Объяснение кода листинга программы
- В функции Atbash перебираются все символы строки tc.
- Если символ является буквой верхнего регистра (от 'A' до 'Z') или буквой нижнего регистра (от 'a' до 'z'), то он заменяется на символ, который получается путем сдвига символа на 186 позиций влево в ASCII таблице.
- Функция возвращает измененную строку tc.
- В основной части программы открываются файлы in.txt и out.txt для чтения и записи соответственно.
- Чтение файла in.txt происходит в переменную s до тех пор, пока не достигнут конец файла.
- После чтения каждой строки из in.txt вызывается функция Atbash, которая заменяет символы в строке s на символы, полученные путем сдвига на 186 позиций влево.
- Измененная строка s записывается в файл out.txt.
- После окончания чтения файла in.txt и записи в файл out.txt файлы закрываются.