Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pascal,函数返回错误的值_Pascal_Freepascal - Fatal编程技术网

Pascal,函数返回错误的值

Pascal,函数返回错误的值,pascal,freepascal,Pascal,Freepascal,我似乎对Pascal中的函数有问题。该程序只是一个普通的递归binsearch,但它总是返回值4?有人能指出解决方案中的错误吗 var i: integer; const n = 10; type tablice = array[1..n] of integer; function Binsearch(const tab:tablice;l:integer;p:integer;x:integer):integer; var s: integer; begin if l=p then

我似乎对Pascal中的函数有问题。该程序只是一个普通的递归binsearch,但它总是返回值4?有人能指出解决方案中的错误吗

var i: integer;
const n = 10;
type tablice = array[1..n] of integer;

function Binsearch(const tab:tablice;l:integer;p:integer;x:integer):integer;
var s: integer;
begin
  if l=p then 
  begin
    if tab[l]=x then 
      Binsearch:=p
    else 
      Binsearch:=-1;
    end
    else 
    begin
      s:=(l+p) div 2;
      if tab[s]<x then 
        l:=s+1
      else 
        p:=s;
      Binsearch(tab,l,p,x);
    end;
end;

var A:tablice;
    x:integer;


begin
  for i:=1 to n do A[i]:=i;

  x:=30;
  writeln(Binsearch(A,1,n,x));
  readln;

end.
varⅠ:整数;
常数n=10;
tablice类型=整数的数组[1..n];
函数B搜索(常量选项卡:表格;l:整数;p:整数;x:整数):整数;
var-s:整数;
开始
如果l=p,那么
开始
如果tab[l]=x,则
b搜索:=p
其他的
b搜索:=-1;
结束
其他的
开始
s:=(l+p)第2分部;

if tab[s]Binsearch只返回上次调用的结果(在本例中,结果为-1)。在其他情况下,不会指定结果,因此会显示一个随机值

将ricorsive呼叫更改为

Binsearch:=Binsearch(tab,l,p,x);

通过这种方式,它将结果返回给所有previos调用。

它不应该是
Binsearch:=Binsearch(…)而不仅仅是
bin搜索(…)?(同样适用于C版本顺便说一句)否则在这种情况下它可能不会返回值。首先,您从未在pascal代码中返回结果。。结果应为:=-1;出口Div与divising不同。。换句话说,div与/operator不同。Div将对结果进行除法,然后四舍五入,以确保除法的结果是整数而不是浮点。你的C++代码会做除法并切掉小数。您的pascal代码将进行除法运算,并将结果四舍五入到接近零的位置。好的。发现了问题所在。结果证明斯塔克斯写的是问题的关键。谢谢。@CantChooseServerNames:这都错了,如果您启用编译器警告,那么编译器就会为您找到问题
Binsearch:=Binsearch(tab,l,p,x);