Дан массив х, элементы которого упорядочены по возрастанию. Для элемента р методом бинарного поиска проверить: если р входит в массив х, то found присвоить TRUE, а переменной к-номер элемента массива х, равного р; если р не входит в массив х, то found присвоить FALSE, а элемент р вставить в массив х, не нарушая порядок возрастания.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
x:array of integer;
p:integer;
found:boolean;
nz,vh,k:integer;
i,n:integer;
begin
n:=memo1.lines.count;
SetLength(x,n);
for i:=0 to n-1 do
x[i]:=strtoint(memo1.Lines[i]);
p:=strtoint(edit1.Text);
nz:=1;
vh:=n-1;
found:=false;
while (nz<=vh) and (not found) do
begin
i:=(nz+vh) div 2;
if x[i]=p then begin
found:=true;
k:=i;
edit2.text:=inttostr(k);
end
else
if x[i]<p
then
nz:=i+1
else
vh:=i-1;
end;
for i:=n downto vh do
x[i+1]:=x[i];
x[nz]:=p;
for i:=0 to n do
memo2.Lines.add(inttostr(x[i]));
end;
end.