double arrow

Поиск минимального (максимального) элемента


Данный алгоритм заключается в следующем: вначале запоминаем номер первого элемента массива, принимая его за минимальный (максимальный) элемент. Далее, начиная со второго, все элементы сравниваются с предполагаемым минимумом (максимумом) и если какой-нибудь из них меньше (больше) предполагаемого минимума (максимума), то запоминается номер этого элемента. Эти действия повторяются до тех пор, пока не закончатся элементы массива. Ниже написан фрагмент программы для поиска минимального элемента:

nEl:=1; // первый элемент принят за минимальный

for i:=2 to n do //для каждого элемента со 2-го до послденего (n)

if a[i]<a[nEl] then // i-й элемент меньше, чем элемент с номером nEl

nEl:=i; // тогда минимальным стал элемент с номером i

Формирование нового массива из элементов исходного массива

Для формирования нового массива из элементов исходного необходимо использовать переменную nEl: integer, которая будет указывать номер элемента в новом массиве, и увеличивать значение номера элемента после того, как очередной элемент помещен в новый массив.

Рассмотрим алгоритм формирование нового массива из элементов исходного массива, удовлетворяющих заданному условию (< key):

WriteLn(’Введите ключ’);

ReadLn( key);

// алгоритм формирование нового массива по ключу

nEl:=0; // номер элемента в новом массиве

for i:=1 to n do // для каждого элемента в массиве A

if A[i] < key then begin// элемент A[i] удовлетворяет ключу

nEl:=nEl+1; // в массиве B на один элемент стало больше

B[nEl]:=A[i] // записали элемент A[i] в элемент nEl массива B

end;

// Печать сформированного массива

for i:=1 to nEl do // для каждого элемента массива B от первого до nEl

WriteLn(’B[’, i, ’]= ’, B[i]);

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

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

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

// ввод исходных данных (значение ключа для поиска)

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

ReadLn(key);

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

nEl:=-1; // номер искомого элемента -1, т. е. совпадение не найдено

i:=1;

Repeat

if a[i] = key then

nEl:=i // i-й элемент совпадает с образцом

Else

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

until (i>n)or// окончание цикла, если проверены все элементы массива или

(nEl<>-1); //произошло совпадение с образцом

// вывод результатов поиска

if nEl<>-1 then

WriteLn(’Совпадение с элементом номер которого = ’, nEl)

Else

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

Примечание: В данном алгоритме можно воспользоваться и циклом с параметром, т. к. известно начальное и конечное значение счетчика цикла. Для досрочного завершения цикла используется команда break (прервать). Алгоритм будет иметь следующий вид:

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

nEl:=-1; // номер искомого элемента -1, т. е. совпадение не найдено

for i:=1to n do

if a[i] = key then begin

nEl:=i // i-й элемент совпадает с образцом

break // прервать цикл

End


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