Бинарный поиск чисел в массиве - Pascal

Узнай цену своей работы

Формулировка задачи:

Привет! Никак не могу доработать программу: выводит только ответ для последнего значения второго массива. Заранее спасибо.
Листинг программы
  1. uses sysutils;
  2. var x,y:array[1..1000] of longint;
  3. m, n, a, i ,j,temp, left, right, middle:integer;
  4. flag:boolean;
  5. kek: byte;
  6. begin
  7. for kek:=1 to 20 do writeln(' ');
  8. readln(n);
  9. readln(m);
  10. for i:=1 to n do begin
  11. read(x[i]);
  12. end;
  13. for j:=1 to m do begin
  14. read(y[j]);
  15. end;
  16. left:=1;
  17. right:= n;
  18. flag:=false;
  19. while (left <= right) and not flag do
  20. begin
  21. middle:=(left+right) div 2;
  22. if y[j]<x[middle] then right:=middle-1
  23. else if y[j]>x[middle] then left:=middle+1
  24. else flag:=true;
  25. end;
  26. if not flag then writeln('-1')
  27. else writeln(y[j]);
  28. end.

Решение задачи: «Бинарный поиск чисел в массиве»

textual
Листинг программы
  1. var
  2.   a: array [0..99999] of Integer;
  3.   m, n, i, b, lt, rt, md: Integer;
  4. begin
  5.   Read(m,n);
  6.   for i:=0 to m-1 do Read(a[i]);
  7.   for i:=1 to n do begin
  8.     Read(b); lt:=0; rt:=m;
  9.     while lt<rt do begin
  10.       md:=lt+(rt-lt) div 2;
  11.       if a[md]<b then lt:=md+1 else rt:=md;
  12.     end;
  13.     if (lt<m) and (a[lt]=b) then Write(' ',lt+1) else Write(' ',-1);
  14.   end; WriteLn;
  15. end.

Объяснение кода листинга программы

  1. Объявляется массив a размером от 0 до 99999
  2. Объявляются переменные m, n, i, b, lt, rt, md типа Integer
  3. Считывается значение переменных m и n с клавиатуры
  4. В цикле от 0 до m-1 считываются значения элементов массива a с клавиатуры
  5. В цикле от 1 до n делается следующее:
    • Считывается значение переменной b с клавиатуры
    • Устанавливается значение переменной lt в 0 и rt в m
    • Запускается цикл, который выполнится до тех пор, пока lt меньше rt
    • Внутри цикла вычисляется значение md (середина), а затем проверяется условие: если a[md] меньше b, то lt присваивается значение md+1, в противном случае rt присваивается значение md
    • После завершения цикла, если lt меньше m и значение a[lt] равно b, то выводится номер позиции lt+1, иначе выводится -1
  6. После завершения внешнего цикла выводится результат перехода на новую строку Данный код реализует бинарный поиск чисел в массиве a и выводит номер позиции найденного элемента или -1, если элемент не найден.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы