Пример. Поиск в упорядоченном по возрастанию массиве первого вхождения числа X.
program Poisk3a;
var A:array[1..100] of integer;
N,X,left,right:integer;
begin
read(N); {N<=100}
write('введите упорядоченный по возрастанию массив');
for i:=1 to N do read(A[i]);
read(X);
left:=1; right:=N;
{левая и правая граница фрагмента для поиска}
while left begin
c:=(left + right) div 2;
{середина с округлением в меньшую сторону}
if X>A[c] then
{если массив упорядочен по убыванию, то if X left:=c+1
{выбираем правую половину без середины, меняя left}
else right:=c;
{выбираем левую половину с серединой, меняя right}
end;
if X=A[left] then {здесь left = right, но не всегда = c}
write('первое вхождение числа ',X,' в массив A на ',left,' месте')
else write('не нашли');
end.
2008-04-09 • Просмотров [ 20289 ]
var A:array[1..100] of integer;
N,X,left,right:integer;
i,c:integer;
begin
N:=11;
writeln('vvedi masiv');
for i:=1 to N do begin read(A[i]); end;
Writeln('4to nayti?');
readln(X);
left:=1;
right:=N;
for i:=1 to N do
begin
c:=(left + right) div 2;
if A[c]=X then begin Writeln('Nayden A[',c,']=X=',a[c]); break end
Else
begin
if X>A[c] then
begin
left:=c
end
else begin right:=c; end;
end;
if ((right-left)=1) and (left<>1) Then left:=right;
end;
readln;
end.
У меня работает...Кому обьяснить надо будет пишите raven-2109@meta.ua