Wyszukiwaniem binarnym musze znaleźć PIERWSZY szukany element. Czyli np interesuje mnie 18 ale nie takie byle jakie w środku tylko pierwsze 18 w tablicy.
Jak poprawić poniższy program żeby robił to co powinien...rwe włosy z głowy bo nie moge tego poprawić..
Oczywiście nie interesuje mnie wyszukanie 18 w środku a później przechodzenie do tyłu na piechotkę.
Program powinien się kończyć i zwracać dobry wynik kiedy skrzyżują sie wskaźniki lewy(l) i prawy(p).
Wklejam cały program żeby można było przetestować czy działa
program szukbin;
const n=40;
type tab=array[1..n] of integer;
var wyn:integer;
cos:tab;
function bin(var t:tab; x:integer):integer;
var l, p, sr:integer;
begin
clrscr;
l:=0; p:=n-1;
while(l<p) do
begin
sr:=(l+p) div 2;
if t[sr]<=x then
l:=sr+1
else
p:=sr-1;
end;
if t[l]=x then
bin:=l
else
bin:=-1;
end;
begin
cos[1]:=1;cos[2]:=2;
cos[3]:=3;cos[4]:=5;
cos[5]:=6;cos[6]:=8;
cos[7]:=11;cos[8]:=13;
cos[9]:=17;cos[10]:=18;
cos[11]:=18;cos[12]:=18;
cos[13]:=18;cos[14]:=18;
cos[15]:=24;cos[16]:=25;
cos[17]:=29;cos[18]:=33;
cos[19]:=38;
wyn:=bin(cos, 18);
writeln(wyn);
end.