После сортировки произвести поиск в массиве введенного значения - Pascal
Формулировка задачи:
Подскажите пожалуйста у меня в этом коде, точнее в процедуре: Poisk (Поиск искомого значения с барьером), есть ошибка, она может найти почти любое число из массива, кроме последнего, в чем может быть проблема?
Листинг программы
- {
- Задача:
- Дано натуральное число N (1N100), целочисленный линейный массив a0, a1, …, aN-1.
- Элементы массива заполняются случайными целыми числами из диапазона [0, N].
- Требуется отсортировать массив. Метод сортировки определяется вариантом в соответствии с таблицей № 1.
- После сортировки произвести поиск в массиве введенного значения. Алгоритм поиска определяется в таблице № 2.
- }
- const
- n = 10;
- type
- TIndex = 1..n;
- TElement = integer;
- Tvector = array [TIndex] of TElement;
- var
- m :TElement;
- a : Tvector;
- i,k : TElement;
- {Заполнение массива}
- procedure MakeVector (var a : TVector; n : word);
- var
- i : TIndex;
- begin {MakeVector}
- randomize;
- for i:=1 to n do
- a[i] := random(m);
- end; {MakeVector}
- {Вывод массива на экран}
- procedure PrintVector (var a : TVector; n : word);
- var
- i : TIndex;
- begin {PrintVector}
- for i:=1 to n do
- write(a[i]:4);
- writeln;
- end; {PrintVector}
- {Процедура сортировки массива}
- procedure Sortirovka (var a : TVector; n : word);
- var
- i,j,imin : integer;
- begin {Sort}
- for i:=1 to n-1 do
- begin
- imin := i;
- for j:= i+1 to n do
- if a[j]<a[imin] then
- imin:=j;
- swap(a[i], a[imin]);
- end;
- end; {Sort}
- {Поиск искомого значения с барьером}
- procedure Poisk (var a : TVector; n : word);
- var
- k:integer;
- begin
- write('Введите искомое число k= ');
- read(k);
- i:=1;
- a[n]:=k;{барьер}
- while a[i]<>k do
- inc(i);
- if i<n then
- writeln('Hайден элемент с индексом i= ', i)
- else
- writeln('Элемент не найден');
- end;
- Begin
- write('Введите диапозон max числа :');
- read(m);
- {Создание массива}
- MakeVector(a,n);
- PrintVector(a,n);
- {Сортировка массива}
- Sortirovka(a,n);
- PrintVector(a,n);
- {Поиск искомого значения с барьером}
- writeln;
- Poisk(a,n);
- End.
Решение задачи: «После сортировки произвести поиск в массиве введенного значения»
textual
Листинг программы
- {Поиск искомого значения с барьером}
- procedure Poisk(var a: TVector; n: word; k: Integer);
- var t: integer;
- begin
- t:=a[n]; a[n]:=k; {сохраним крайний элемент, установим барьер}
- i:=1; while a[i]<>k do Inc(i); a[n]:=t; {выполним поиск, вернем крайний элемент}
- if a[i]=k {проверим, что же было найдено}
- then WriteLn('Hайден элемент с индексом i= ', i)
- else WriteLn('Элемент не найден');
- end;
Объяснение кода листинга программы
- В процедуре Poisk объявлены три переменные: a (массив), n (индекс текущего элемента) и k (значение, которое нужно найти).
- Переменная t инициализируется значением a[n], а значение a[n] заменяется на k (барьер).
- Переменная i инициализируется единицей и начинается цикл while, который выполняется до тех пор, пока a[i] не станет равным k.
- После цикла значение a[n] заменяется на t (сохраненное начальное значение).
- Если a[i] равно k, то это означает, что искомое значение было найдено. В этом случае выводится сообщение
Hайден элемент с индексом i=
, i. - Если a[i] не равно k, то это означает, что искомое значение не было найдено. В этом случае выводится сообщение
Элемент не найден
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д