Param57. Описать процедуру EN_CodeText($$S$$, $$K$$), которая шифрует текстовый файл с именем $$S$$, выполняя циклическую замену каждой русской буквы на букву того же регистра, расположенную в алфавите на $$K$$-й позиции после шифруемой буквы $$(0<K<10)$$. Например, при $$K=3$$ «А» перейдет в «Г», «я» — в «в». Букву «ё» в алфавите не учитывать, считая, что за буквой «е» сразу идет «ж». Символы, не являющиеся русскими буквами, при шифровании не изменять. Используя эту процедуру и зная кодовое смещение $$K$$, зашифровать файл с указанным именем.
Решение:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
program param57; type St=String; var S:St; K:integer; Procedure EN_CodeText(S:St;K:integer); var F_out,F_in: Text; TempS:St; i,i2:integer; begin Assign(F_in,S); Reset(F_in); Assign(F_out,'~'+S); ReWrite(F_out); While not(eof(F_in)) do begin Readln(F_in,TempS); for i2:=1 to K do begin i:=1; while (i<=Length(TempS)) do begin case ord(TempS[i]) of 128..158,160..174,224..238: TempS[i]:=chr(ord(TempS[i])+1); 159: TempS[i]:=chr(128); 175: TempS[i]:=chr(224); 239: TempS[i]:=chr(160); end; inc(i); end; end; Writeln(F_out,TempS); end; Close(F_out); Close(F_in); Erase(F_in); Rename(F_out,S); end; begin Write('S: '); Readln(S); Write('K: '); Readln(K); EN_CodeText(S,K); end. |
Другие задачи из раздела Param можно посмотреть здесь.
Комментарии: