pascal编程exitcode=201错误

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pascal编程exitcode=201错误相关的知识,希望对你有一定的参考价值。

program carlos;
type
hhyt=record
xjb:real;
v1,m1:real;
end;
var
b:array[0..100]of hhyt;
m,v:real;
l,n:longint;

procedure qsort(st,ed:longint);
var i,j:longint;
temp,t:real;
begin
if st>=ed then exit;
temp:=b[(st+ed)div 2].xjb;
i:=st-1;j:=j+1;
while i<j do
begin
repeat inc(i) until b[i].xjb>=temp;
repeat dec(j) until b[j].xjb<=temp;
if i<j then
begin
t:=b[i].xjb;
b[i].xjb:=b[j].xjb;
b[j].xjb:=t;
end;
end;
qsort(st,j);qsort(j+1,ed);
end;

procedure qx;
begin
read(n,v);
m:=10;
for l:=1 to n do
begin
read(b[l].v1,b[l].m1);
b[l].xjb:=b[l].m1/b[l].v1;
end;
end;

procedure zt;
begin
for l:=n downto 1 do
begin
if b[l].v1<v then
begin
m:=m+b[l].m1;
v:=v-b[l].v1;
end
else if b[l].v1=v then
begin
m:=b[l].m1;
break;
end
else begin
m:=m+v*b[l].xjb;
break;
end;
end;
write(m);
end;

begin
qx;
qsort(1,n);
zt;
end.

求提示哪里错误

201错误是数组超界了,这是由于你的快排写错了。
procedure qsort(st,ed:longint);
var i,j:longint;
temp,t:real;
begin
if st>=ed then exit;
temp:=b[(st+ed)div 2].xjb;
i:=st-1;j:=j+1; //你的快排这里错了,j是一个随机值,所以不能用j:=j+1;应该改成j:=ed+1;
while i<j do
begin
repeat inc(i) until b[i].xjb>=temp;
repeat dec(j) until b[j].xjb<=temp;
if i<j then
begin
t:=b[i].xjb;
b[i].xjb:=b[j].xjb;
b[j].xjb:=t;
end;
end;
qsort(st,j);qsort(j+1,ed);
end;
其实我从来没写过你这样的快排,我一般都是这样写了(代码如下):
Procedure qsort(l,r:longint);
var
i,j,x,t:longint;
begin
i:=l; j:=r; x:=a[(i+j)div 2];
repeat
while a[i]<x do inc(i);
while a[j]>x do dec(j);
if i<=j then
begin
t:=a[i];a[i]:=a[j];a[j]:=t;
inc(i); dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end;
其实好像大家一般都是这样写的,LZ不妨试试。
LZ要采纳啊!!
参考技术A 201 数组溢出
您的程序是对的,但数组下标太小
缩小输入范围或扩大下标
其他的就像楼上说的一样,谢谢本回答被提问者采纳
参考技术B 201错误是指下标越界...数组,变量类型开大一点就行了 参考技术C 范围检查出错

以上是关于pascal编程exitcode=201错误的主要内容,如果未能解决你的问题,请参考以下文章

pascal exitcode=255 是啥错误?

free pascal中的exitcode后面跟的数字,各代表啥?

exitcode 是什麽意思

编程,exited with exitcode =1 嘛意思,如何解决?急!

C++ Pascal 字符串错误。我在代码中找不到错误

为啥我的 pascal 程序以错误 207 退出