Нужно написать программу с бинарным поиском в упорядоченном по убыванию массиве, и высчитать временную сложность алгоритма. Но программа не работает, ошибка в процедуре poisc. Не знаю как исправить.
Код:
program pro1;
uses op,obrabotki;
var a:mas;
n,key:integer;
begin
vvod(a,n);
writeln('Исходный массив');
vivod(a,n);
sort(a,n);
writeln('После сортировки');
vivod(a,n);
write(' Введите число:');
poisc(a,n);
end.
Код:
unit obrabotki;
interface
uses op;
procedure vvod(var a:mas; var n:integer);
procedure vivod (a:mas;n:integer);
procedure sort(var a:mas;n:integer) ;
procedure poisc(a:mas;n:integer);
implementation
procedure vvod(var a:mas;var n:integer);
var i:integer;
begin
writeln ('Введите количество элементов');
readln(n);
writeln('Введите элементы:');
for i:=1 to n do
Readln(a[i]);
end;
procedure vivod (a:mas;n:integer);
var i:integer;
begin
for i:=1 to n do write(a[i]:4);
writeln;
end;
procedure sort(var a:mas;n:integer) ;
var i, temp, n_min : integer;
begin
temp:=0;
for i :=1 to n do begin
for n_min :=1 to n do begin
if a[i] > a[n_min] then begin
temp:= a[i];
a[i]:= a[n_min];
a[n_min]:=temp;
end;
end;
end;
end;
procedure poisc(a:mas;n:integer);
var
i,l,u,r,m,key:integer;
begin
l := 1;
r := n + 1;
u:=0;
inc(u,2);
readln(key);
While l < r - 1 do
begin
m := (l + r) div 2;
inc(u);
if a[m] > key then
begin
r := m;
inc(u,2);
end
else
begin
l := m;
inc(u,2);
end;
begin
if a[l] = key then WriteLn(l)
else writeln('Данных элементов нет в массиве');
end;
writeln('Временная сложность: ',u);
end;
end;
end.
Код:
unit op;
interface
type mas=array [1..10000] of integer;
implementation
end.