Поиск элемента в массиве по ключу

Df: Процесс нахождения элемента в последовательности по значению одного или более чем одного поля называется поиском в последовательности. Линейный поиск заключается в последовательном просмотре всех элементов массива до тех пор пока либо будет найден искомый элемент, либо пока не закончатся элементы массива. Для реализации алгоритма заведем переменную логического типа flag, с помощью которой можно будет выйти из цикла в случае нахождения искомого элемента.

Реализация:

write(' Введите образец для поиска');

readln(key);

flag:=FALSE; {совпадений нет}

i:=1;

repeat

if a[i] = key then flag:=TRUE {совпадение с образцом}

else i:=i+1; {переход к следующему элементу}

until (i>n) or flag; {окончание цикла, если произошло совпадение с образцом или проверены все элементы массива}

if flag then writeln(' Совпадение с элементом номер которого = ', i)

else writeln(' Совпадений с образцом нет');

Инвертирование массива

Суть алгоритма, состоит в перестановке элементов массива в обратном порядке, т.е. меняет местами первый с последним элементом, второй с предпоследним элементом массива и т.д. Число перестановок равно n div 2, т.к. если менять местами элементы n раз, то все элементы массива встанут на свои места.

Реализация:

for i:=1 to n div 2 do

begin

{ Обменяем i-й и (n-i+1)-й элементы}

temp:=a[i];

a[i]:=a[n-i+1];

a[n-i+1]:=temp

end;

Циклический сдвиг элементов массива вправо (влево) на М позиций

При решении задач, в которых необходимо вставить элемент в массив используется циклический сдвиг элементов. В этом алгоритме сначала запоминаем последний элемент, если сдвиг будем делать вправо (первый элемент, если сдвиг влево). Затем сдвигаем элементы, т.е. на n место ставим n-1 элемент, на n-1 ставим n-2, и т.д. на 2-е место ставим 1-й элемент, тем самым как бы освободив первую позицию. Наконец, на первое место записываем последний элемент, который хранится во вспомогательной переменной. Подобные действия повторяются m раз, т.е. число раз, на которое необходимо осуществить сдвиг. Мы рассмотрели циклический сдвиг на m позиций вправо.

Реализация:

{Циклический сдвиг на m позиций вправо}

writeln(‘ Введите число сдвигов’);

readln(m);

for i:=1 to m do

begin

{Запоминаем последний элемент массива}

temp:=a[n];

{Сдвиг элементов массива на одну позицию вправо}

for j:= n downto 2 do a[j]:=a[j-1];

a[1]:= temp

end;

{Печать измененного массива}

for i:=1 to n do writeln(‘a[‘, i, ‘]= ’, a[i]);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: