永发信息网

高悬赏pascal 106:缺字符表达式,改程序。

答案:2  悬赏:40  手机版
解决时间 2021-05-03 22:13
  • 提问者网友:人傍凄凉立暮秋
  • 2021-05-02 21:51

下面这个程序缺字符表达式,帮忙改下。

.context 编码解码

【题目】从键盘输入一个英文句子,设计一个编码、解码程序。

编码过程:先键入一个正整数N(1〈=N〉=26)。这个N决定了转换关系。

例如当N=1,输入的句子为ABCXYZ时,则其转换码为ABCXYZ不变。当N=2时,

其转换码为BCDYZA,其它的非字母字符不变。为使编码较于破译,将转换码的信

息自左而右两两交换,若最后仅剩单个字符则不换。然后,将一开始表示转换关

系的N根据ascii表序号化成大写字母放在最前面。

如:abcABCxyzXYZ-/,1. n=3

① cdeCDEzabZAB-/,1. {根据N的值转换}

② dcCeEDazZbBA/-1,. {两两交换}

③ CdcCeEDazZbBA/-1,. {最后编码}

解码过程为编码的逆过程。

【参考程序】

var one:string;

i,what,n,temp,s:integer;temp1:char;

begin

writeln('input your choice:'); {编码,解码过程通过菜单选择}

writeln('1.bian ma'); {选1,编码}

writeln('2.jie ma'); {选2,解码}

readln(what); {输入选择}

writeln('input a string:'); {无论是编码或是解码,均要输入一字符串}

readln(one); {读入字符串到one中}

if what=1 then begin {如果是编码过程}

readln(n); {读入N}

n:=n-1; {根据题意,要换成N-1,为什么?例如N=1,则字符不变}

for i:=1 to length(one) do begin {字串one从头到尾编码}

if ord(one[i]) in [65..90] then begin {如为大写字母}

temp:=ord(one[i])+n; {序号先加N}

if temp>90 then temp:=temp-90+64; {超过Z的处理,保证处理后仍为}

one[i]:=chr(temp); {大写字母}

end;

if ord(one[i]) in [97..122] then begin {如为小写字母}

temp:=ord(one[i])+n;

if temp>122 then temp:=temp-122+96; {超过z的处理,保证为小写字母}

one[i]:=chr(temp); {处理后放回原位置}

end;

end;

s:=ord(one[0]); {S放one字符串长度,用以控制两两交换次数}

if odd(s) then dec(s); {假如是奇数,则减1,保证是偶数次}

i:=1;

repeat

temp1:=one[i]; {以下三句实现前后两字符的两两交换}

one[i]:=one[i+1];

one[i+1]:=temp1;

i:=i+2; {一次便交换两个字符}

until i>=s; {直到字串结束}

write(chr(ord(n+1+64))); {输出N的对应大写字母}

write(one); {输出编码后的one字符串}

end;

if what=2 then begin {解码过程}

n:=ord(upcase(one[1]))-64-1; {由one字串的头一个字符获取密钥N}

one:=copy(one,2,length(one)-1); {取出N后,one字符串减去第一个字符}

s:=ord(one[0]); {以下实现字符串的两两交换}

if odd(s) then dec(s); {S控制两两交换的次数,保证是偶数次}

i:=1;

repeat

temp1:=one[i]; {前后两个字符两两交换}

one[i]:=one[i+1];

one[i+1]:=temp1;

i:=i+2;

until i>=s; {直到字串结束}

for i:=1 to length(one) do begin {根据N的值还原字符串}

if ord(one[i]) in[65..90] then begin {大写字母}

temp:=ord(one[i])-n; {序号 -N}

if temp<65 then temp:=temp+26; {保证在A..Z范围内转换}

one[i]:=chr(temp); {转换后放回原处}

end;

if ord(one[i]) in[97..122] then begin {小写字母}

temp:=ord(one[i])-n;

if temp<97 then temp:=temp+26;

one[i]:=chr(temp);

end;

end;

writeln(one); {输出解码后的字符串}

end;

end.

高悬赏。

最佳答案
  • 五星知识达人网友:患得患失的劫
  • 2021-05-02 22:37
键盘
全部回答
  • 1楼网友:第四晚心情
  • 2021-05-02 23:17
从软件
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯