看看我程序怎么错了,谢谢了,跪求!pascal!

对信息进行加密,可提高信息传输的安全性。正是由于它的重要用途,人们 发明了各种各样的加密方式。其中一种方式是,对文中单词进行逆序处理。请你 写一个程序,对已加密的文本进行解密。

输入文件(encrypt.in)
第 1 行,一个整数 n,表示后面将有 n 行已加密的信息。
第 2 行至第 n+1 行,每行一个不超过 1000 个字符的字符串,每个字符串中
只有空格和小写字母组成。
输出文件(encrypt.out)
共 n 行,每行对应输出解密后的文本
输入
2
eno otw eerth
i ekil siht emag
输出
one two three
i like this game
我的程序
program encrypt;
var
s,s1:string;
i,r,p,n,k,l:integer;
procedure ok(s11:string);
var
t,j:integer;
begin
t:=length(s11);
for j:=t downto 1 do write(s11[i]);
end;

begin
assign(input,'encrypt.in');
reset(input);
assign(output,'encrypt.out');
rewrite(output);
readln(n);
p:=1;
for i:=1 to n do
begin
readln(s);
for k:=1 to length(s) do
if k=length(s) then
begin
l:=p;
r:=k;
s1:=copy(s,l,k-r+1);
ok(s1);
p:=r;
writeln;
end
else
if s[k]=' ' then begin
l:=p;
r:=k;
s1:=copy(s,l,k-r+1);
writeln(s1);
write(' ');
ok(s1);
p:=r;
end;
p:=1;
end;
close(input);
close(output);
end.

程序改正如下:
program encrypt;
var
s,s1:string;
i,r,p,n,k,l:integer;
procedure ok(s11:string); //这个过程没有改
var
t,j:integer;
begin
t:=length(s11);
for j:=t downto 1 do write(s11[j]); //这里有个小错误 j 打成 i 可能是手误 注意!
end;

begin
assign(input,'encrypt.in');
reset(input);
assign(output,'encrypt.out');
rewrite(output);
readln(n);
for i:=1 to n do
begin
p:=1; //这个放在每个过程一开始,每读入一个初始化为1
readln(s);
s:=s+' '; //这个最重要!!在后面加上一个空格,就不需要分别判断
for k:=1 to length(s) do
if s[k]=' ' then begin
l:=p;
r:=k;
s1:=copy(s,l,r-l); //这里是复制s中第l个开始的r-l+1-1个(不包括空格啊!)
ok(s1); //逆序打印~~没变
if k<>length(s) then write(' '); //这里也是重点!判断是否最后一个 要不要空格!
p:=r+1; //下次从空格的下一个开始复制 你没注意到
end;
end;
close(input);
close(output);
end.
end.
就是这样 总体思想要把握,原本编的还不错。。继续努力!!有不懂的欢迎问我!

参考资料:自己打的辛苦啊!!楼主加分!!

温馨提示:答案为网友推荐,仅供参考
相似回答