После сортировки произвести поиск в массиве введенного значения - Pascal

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

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

Подскажите пожалуйста у меня в этом коде, точнее в процедуре: Poisk (Поиск искомого значения с барьером), есть ошибка, она может найти почти любое число из массива, кроме последнего, в чем может быть проблема?
Листинг программы
  1. {
  2. Задача:
  3. Дано натуральное число N (1N100), целочисленный линейный массив a0, a1, …, aN-1.
  4. Элементы массива заполняются случайными целыми числами из диапазона [0, N].
  5. Требуется отсортировать массив. Метод сортировки определяется вариантом в соответствии с таблицей 1.
  6. После сортировки произвести поиск в массиве введенного значения. Алгоритм поиска определяется в таблице 2.
  7. }
  8. const
  9. n = 10;
  10. type
  11. TIndex = 1..n;
  12. TElement = integer;
  13. Tvector = array [TIndex] of TElement;
  14. var
  15. m :TElement;
  16. a : Tvector;
  17. i,k : TElement;
  18. {Заполнение массива}
  19. procedure MakeVector (var a : TVector; n : word);
  20. var
  21. i : TIndex;
  22. begin {MakeVector}
  23. randomize;
  24. for i:=1 to n do
  25. a[i] := random(m);
  26. end; {MakeVector}
  27. {Вывод массива на экран}
  28. procedure PrintVector (var a : TVector; n : word);
  29. var
  30. i : TIndex;
  31. begin {PrintVector}
  32. for i:=1 to n do
  33. write(a[i]:4);
  34. writeln;
  35. end; {PrintVector}
  36. {Процедура сортировки массива}
  37. procedure Sortirovka (var a : TVector; n : word);
  38. var
  39. i,j,imin : integer;
  40. begin {Sort}
  41. for i:=1 to n-1 do
  42. begin
  43. imin := i;
  44. for j:= i+1 to n do
  45. if a[j]<a[imin] then
  46. imin:=j;
  47. swap(a[i], a[imin]);
  48. end;
  49. end; {Sort}
  50. {Поиск искомого значения с барьером}
  51. procedure Poisk (var a : TVector; n : word);
  52. var
  53. k:integer;
  54. begin
  55. write('Введите искомое число k= ');
  56. read(k);
  57. i:=1;
  58. a[n]:=k;{барьер}
  59. while a[i]<>k do
  60. inc(i);
  61. if i<n then
  62. writeln('Hайден элемент с индексом i= ', i)
  63. else
  64. writeln('Элемент не найден');
  65. end;
  66.  
  67. Begin
  68. write('Введите диапозон max числа :');
  69. read(m);
  70. {Создание массива}
  71. MakeVector(a,n);
  72. PrintVector(a,n);
  73. {Сортировка массива}
  74. Sortirovka(a,n);
  75. PrintVector(a,n);
  76. {Поиск искомого значения с барьером}
  77. writeln;
  78. Poisk(a,n);
  79. End.

Решение задачи: «После сортировки произвести поиск в массиве введенного значения»

textual
Листинг программы
  1.   {Поиск искомого значения с барьером}
  2.   procedure Poisk(var a: TVector; n: word; k: Integer);
  3.   var t: integer;
  4.   begin
  5.     t:=a[n]; a[n]:=k;                       {сохраним крайний элемент, установим барьер}
  6.     i:=1; while a[i]<>k do Inc(i); a[n]:=t; {выполним поиск, вернем крайний элемент}
  7.     if a[i]=k                               {проверим, что же было найдено}
  8.     then WriteLn('Hайден элемент с индексом i= ', i)
  9.     else WriteLn('Элемент не найден');
  10.   end;

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

  1. В процедуре Poisk объявлены три переменные: a (массив), n (индекс текущего элемента) и k (значение, которое нужно найти).
  2. Переменная t инициализируется значением a[n], а значение a[n] заменяется на k (барьер).
  3. Переменная i инициализируется единицей и начинается цикл while, который выполняется до тех пор, пока a[i] не станет равным k.
  4. После цикла значение a[n] заменяется на t (сохраненное начальное значение).
  5. Если a[i] равно k, то это означает, что искомое значение было найдено. В этом случае выводится сообщение Hайден элемент с индексом i=, i.
  6. Если a[i] не равно k, то это означает, что искомое значение не было найдено. В этом случае выводится сообщение Элемент не найден.

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


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

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

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

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

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

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