Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст лекций.doc
Скачиваний:
3
Добавлен:
01.04.2025
Размер:
1.59 Mб
Скачать

А7. Выбор элементов по условию

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

Frame104

А8. Проверка выполнения некоторого условия

В приведенном ниже фрагменте производится проверка факта существования в заданном массиве хотя бы одного элемента, удовлетворяющего некоторому условию.

Просмотр элементов в алгоритме производится с использованием конструкции «цикл-пока». Это объясняется тем, что просмотр надо выполнить не менее одного раза и можно прекращать сразу после того, как будет найден элемент, удовлетворяющий условию. Однако поскольку возможна ситуация, что в массиве вообще нет элементов, удовлетворяющих условию, цикл надо закончить либо когда найден первый элемент, удовлетворяющий условию, либо когда просмотрены все элементы массива, но в массиве нет ни одного элемента, удовлетворяющего условию. Для того чтобы своевременно закончить просмотр элементов и, после выхода из цикла установить, найден или нет требуемый элемент, в программе введена переменная булевского типа FlagFound, выполняющая функцию признака «найден/нет».

Frame105

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

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

Для решения данной задачи можно воспользоваться алгоритмом A8, вернув результат в переменной j, выполняющей функцию счетчика цикла и индекса элемента массива одновременно, и связав факт того, найден элемент или нет, со значением переменной FlagFound.

А10. Вставить элемент Z в позицию j массива чисел

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

Frame106

А11. Удалить из массива элемент, занимающий позицию j

Чтобы решить данную задачу, надо сдвинуть влево (скопировать) все элементы, располагающиеся справа от удаляемого элемента, начиная с элемента с номером j+1.

Frame107

Примеры использования типовых алгоритмов

Пример 1. Сформировать массив ”С”, включив в него четные элементы массива ”А”, которые присутствуют в массиве ”В”.

Вначале запишем укрупненный алгоритм:

Frame108

Анализируя этот алгоритм мы видим, что ”ввод-массивов-А-и-В” можно реализовать, применив дважды алгоритм А1 (поменяв при этом имена переменных и скорректировав тексты сообщений на экран), а ”вывод-массива-С” несложно обеспечить, воспользовавшись алгоритмом А2. Нам остается только разработать алгоритм ”формирование-массива-С”.

Приведем план решения этой задачи:

Frame109

Теперь нужно раскрыть планы действий ”искать-A[i]-в-массиве-В ” и ”добавить-A[i]-в-массив-C”.

Первый план – это модификация алгоритма А8:

Frame110

Второй план (аналог телу цикла в алгоритме А7):

Frame111

И, наконец, выражение (A[i] четное) можно реализовать, проверив остаток от целочисленного деления числа A[i] на 2:

Frame112

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