free pascal 编译成功 整体运行 答案错误 单步执行出问题

来源:百度知道 编辑:UC知道 时间:2024/06/01 15:44:29
做 usaco里的milk2 这道题的时候
程序编译成功了
运行一遍
输出的答案错了
我就F7单步执行
执行到只有一个语句循环体的while语句时
黑屏提示错误
继续F7
回到篮屏继续单步执行
以后每次到那个地方
就黑屏提示错误
再按F7 也还能回来
能否解释一下?
while (a[j]=a[i])and(j<max) do inc(j);

我已经知道了
根据输入数据
这句将被执行上百万次
而F7是按行执行,而不是按句执行
所以在这里停了几秒钟

二楼
我的程序的确是没有问题的
正如我上面说的那样

你把“inc(j);”调到下面单独列一行再试试,也许是数组越界了

之所以还能“再回来”是由于Free Pascal早期版本的Bug导致的

如果还是没有发现错误你再补充

附上我的很丑的程序

=============

program milk2;
const
MaxN=5000;
var
a,b:array[1..MaxN] of longint;
i,n,mid,temp,l,r,MaxWork,MaxBreak:longint;

procedure Qsort(l,r:longint);
var i,j:longint;
begin
i:=l; j:=r; mid:=a[(l+r) shr 1];
repeat
while a[i]<mid do inc(i);
while a[j]>mid do dec(j);
if i<=j then
begin
temp:=a[i]; a[i]:=a[j]; a[j]:=temp;
temp:=b[i]; b[i]:=b[j]; b[j]:=temp;
inc(i); dec(j);
end;
until i>j;
if l<j then Qsort(l,j);
if i<r then Qsort(i,r);
end;

procedure GetMax(var a:longint; b:longint);
begin
if b>a then a:=b;
end;

begin
assign(input,'milk2.in