if not masissort then begin writeln('ВНИМАНИЕ! Двоичный поиск возможен только на отсортированных данных!');
write('Отсортировать данные (1-да, 0-нет)?: ');
readln(y);
if y = 1 then begin SortP;
writeln(F, 'Перед двоичным поиском данные отсортировали!');
writeln('Перед двоичным поиском данные отсортировали!');
end;
end;
write('Введите число которое требуется найти: ');
readln(el);
L := 0;
R := n - 1;
nstep := 0;
find := false;
while True do {бесконечный цикл}
begin M := (L + R) div 2; {средняя точка}
Inc(nstep); {+1 к кол. шагов}
{проверим не нашли ли в средней точке}
if mas[M] = el then begin find := True; {найден}
break; {выход из цикла}
end else {если не нашли}
begin {если M=L то конец поиска и выход из цикла)}
if (M = L) then break;
{в зависимости от элемента берем левую или правую часть отрезка
и ищем в нем на следующем цикле}
if el < mas[M] then R := M {элемент меньше и берем левую часть}
else L := M; {элемент больше и берем правую часть}
end;
end;
{если элемент не найден,то проверим R элемент еще раз, так как
M:=( n + n+1) div 2 всегда выдает n и никогда n+1}
if not find then begin find := mas[R] = el;
end;
{сообщаем о результате поиска}
writeln(F, 'Двоичный поиск элемента в массиве. el = ', el);
if find then begin writeln(F, 'Найдено! Количество шагов = ', nstep);
writeln('Найдено! Количество шагов = ', nstep);
end else begin writeln(F, 'Не найдено! Количество шагов = ', nstep);
writeln('Не найдено! Количество шагов = ', nstep);