Постановка задач



бет5/8
Дата07.04.2023
өлшемі0,65 Mb.
#80314
1   2   3   4   5   6   7   8
Байланысты:
KURSOVAYa YaZYKI 2

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);


Достарыңызбен бөлісу:
1   2   3   4   5   6   7   8




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет