永发信息网

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

答案:2  悬赏:40  手机版
解决时间 2021-05-03 22:13

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

.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.

高悬赏。

最佳答案
键盘
全部回答
从软件
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
什么花一百年才开一次?
我在朋友那拿了一张他用过的WINDWOS正版操作
八爪鱼价格多少钱一斤,外面买的卤猪肚要这样
问问干什么的
1988年11月13日可以领取结婚证吗?
尝新节是哪个民族的,花婆节是哪一个族的节日
为什么人喜欢生气啊
请问谁是北京科技大学天津学院的学生,我想咨
青海省邮电规划设计有限公司在哪里啊,我有事
上司每天急着找我聊天,是喜欢我吗
现在什么行业最好?
恋爱会影响学习么?
在深圳福永去东莞市总站该座几路车!
QQ三国用2个普通加3个精致可以改出精致的武器
感情的事真的有很多烦恼吗?
推荐资讯
怎么能变得热情?
河北正定哪里有旺铺出租吗?
为什么岗位调离能防止人员内耗
玉怀综合商店这个地址在什么地方,我要处理点
自由幻想渔夫文华任务队伍人员等级怎样才合理
为什么地下城50级鬼剑士的太刀武器老土呢
八班军训口号霸气,形容军训的诗句
孙悦在斯杯首发中打什么位置?
江苏省苏州市相城区太平镇的建设银行在哪
仰宫地址在哪,我要去那里办事
变形金刚完美硬盘安装问题
中国有多广阔?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?