1. Для примеров 5.1 — 5.3 выполните перечисленные задания.
1. Заполните таблицу.
2. Добавьте в таблицу свои данные, такие, чтобы искомый элемент был первым в массиве; последним в массиве.
№ | n | Массив | x | Результат |
1 | 5 | 2 14 7 20 16 | 20 |
5.1: Элемент найден 5.2: Элемент найден на месте 4 5.3: Элемент найден на месте 4 |
2 | 5 | 2 3 4 5 6 | 8 |
5.1: Элемент не найден 5.2: Элемент не найден 5.3: Элемент не найден |
3 | 7 | 2 4 6 8 10 11 12 | 8 | 5.1: Элемент найден
5.2: Элемент найден на месте 4 5.3: Элемент найден на месте 4 |
4 | 5 | 6 3 9 12 15 | 3 | 5.1: Элемент найден
5.2: Элемент найден на месте 2 5.3: Элемент найден на месте 2 |
5 | 5 | 9 3 6 4 7 | 9 | 5.1: Элемент найден
5.2: Элемент найден на месте 1 5.3: Элемент найден на месте 1 |
6 | 5 | 4 0 5 6 3 | 3 | 5.1: Элемент найден
5.2: Элемент найден на месте 5 5.3: Элемент найден на месте 5 |
3. Какой ответ выдаст каждая из программ, если в массиве несколько элементов, удовлетворяющих условию задачи? Почему?
Программа из примера 5.1 выдаст ответ «Элемент найден» не зависимо от количества совпадений, т.к. программа сравнивает каждый элемент массива с переменной x
и, если элемент равен x
, каждый раз присваивает переменной p
значение true
. Таким образом, количество совпадений (одно или более) не повлияет на ответ программы.
Программа из примера 5.2 выведет место последнего найденного элемента из двух, т.к. программа сравнивает каждый элемент массива с переменной x
и, если элемент равен x
, каждый раз присваивает переменной k
позицию этого элемента. Таким образом, в переменной k
в конце программы останется позиция последнего найденного элемента.
Программа из примера 5.3 выведет место первого найденного элемента из двух, т.к. программа ищет нужный элемент в цикле while
, одним из условий работы которого является a[k]<>x
(цикл работает до тех пор, пока не найдёт нужный элемент). Таким образом, цикл завершает поиск элементов, когда находит первое совпадение.
4. Что нужно изменить в программе 5.2, чтобы выдавался не последний из найденных элементов, а первый?
Самым простым способом будет заменить цикл for var i := 1 to n do
на for var i := n downto 1 do
. Тогда перебор и массива и поиск элемента начнётся не с начала, а с конца.
5. Что нужно изменить в программе 5.1, чтобы выдавался не последний из найденных элементов, а первый?
В программе из примера 5.1 не выдаётся последний из найденных элементов, эта программа выдаёт лишь ответы «Элемент найден» или «Элемент не найден».
6. Измените условие цикла while примера 5.3 так, чтобы использовалась логическая операция not.
Итоговая программа будет выглядеть так:
var a: array[1..10] of integer;
n, x, k: integer;
begin
write('Количество n=');
readln(n);
writeln('Элементы массива');
for var i := 1 to n do
read(a[i]);
write('Число x =');
readln(x);
//линейный поиск элемента
k:=1;
while (k<=n) and (not (a[k] = x)) do
k:=k+1;
if k = n+1 then
writeln('Элемент не найден')
else
writeln('Элемент найден на месте ', k);
end.