Методы поиска элементов, удовлетворяющих условию

1. Поиск в одномерном массиве элементов, удовлетворяющих условию

При необходимости проверить в массиве наличие элементов, удовлетворяющих некоторому условию, невозможно просто использовать условный блок, т.к. в выражение нельзя запихнуть обработку всех элементов массива, которая делается в цикле. Что же можно сделать? В условном выражении можно использовать логическую переменную, значение которой и должно быть сформировано в цикле, обрабатывающем массив. Будет называть эту переменную целевой.

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

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

2. Проверка, все ли элементы одномерного массива удовлетворяют условию

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

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

3. Досрочный выход из цикла

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

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

  1. не найден элемент, удовлетворяющий условию;
  2. не достигнут конец массива.

Первую часть условия можно проверить с помощью целевой переменной. Вторая часть проверятся стандартным условием достижения конца массива i <= n. Цикл должен продолжать при соблюдении обоих условий, а при нарушении хотя бы одного – завершаться, поэтому между частями условия ставится логическая операция и.

Такое сложное условие продолжения цикла невозможно использовать в параметрическом цикле, поэтому придётся использовать цикл «пока» и явным образом менять счётчик цикла.

// Без досрочного выхода из цикла flag := true; for i := 1 to n do if ... then flag := false; // С досрочным выходом из цикла flag := true; i := 1; while (i <= n) and flag do begin if ... then flag := false; i := i + 1; end;

Задание. Разработать алгоритм проверки наличия в массиве элементов, равных нулю, и элементов, больших заданного числа (в одном цикле).

Задание. Разработать алгоритм поиска в массиве номера последнего элемента, кратного заданному числу.