永发信息网

pascal编程高手看下

答案:3  悬赏:50  手机版
解决时间 2021-05-17 10:39
  • 提问者网友:火车头
  • 2021-05-16 14:45

我编一串程序,运行时显示exitcode=201;请各位看看错在哪儿了(我先知道哪里错了,为什么错了,各位不用再打一遍了.....)

以下是代码:

program random;
var a:array[1..10]of integer;
    n,i,j,m,s:integer;
begin
    asssign(input,'random.in');reset;
    asssign(output,'random.out');rewrite;
    read(n);readln;
    s:=n;
    for i:=1 to n do read(a[i]);
    for i:=1 to n do
        for j:=1 to n do if a[i]>a[j] then begin
            m:=a[j];
            a[j]:=a[i];
            a[i]:=m;
                                            end;
        for i:=1 to n do
            for j:=i to n do
                if a[i]=a[j] then begin
                for j:=j+1 to n do
                a[j]:=a[j+1];
                s:=s-1;
                                   end;
    write(s);
    writeln;
    for i:=1 to s do write(a[s]);
    readln;
    close(input);
    close(output);
end.

最佳答案
  • 五星知识达人网友:一叶十三刺
  • 2021-05-16 16:04

exitcode=201是下标出界的意思


 for i:=1 to n do
    for j:=i to n do——————这里的循环变量用了J
    if a[i]=a[j] then begin
    for j:=j+1 to n do ————这里也用了J 两处的循环变量应该不同 你改下
    a[j]:=a[j+1];  ————>当n=10时 这里下标出界 所以上一句的for语句的终止值改为n-1
    s:=s-1;
    end;

全部回答
  • 1楼网友:想偏头吻你
  • 2021-05-16 18:24

你这是明明的随机数的程序吧,建议增大n,同时,去重的语句建议用repeat或者while,因为去重之后n会减小,后面运行到n就没用的,因为此时n已经小于原来的n了。并且,去重应该写成for j:=i+1 to n do,因为如果是i到n,当j=i的时候,就会把这个数去掉。还有!你的输出应该是write(a[i],' ');,而不是a[s],要不会错的,不输出空格也会错,因为你会看不清楚到底输出了哪些数字。

这个程序其实有三个错误。

  • 2楼网友:舊物识亽
  • 2021-05-16 17:17
应该是这里下标出界了吧 for j:=j+1 to n do
    a[j]:=a[j+1];
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯