- •Введение
- •Способы записи алгоритма
- •Типы алгоритмов
- •Линейные алгоритмы
- •Разветвляющийся алгоритм
- •5. Циклические алгоритмы
- •5.1. Организация циклов с предусловием и постусловием
- •5.2. Табуляция функции одной переменной
- •5.3. Применение циклов в алгоритмах обработки массивов
- •5.3.1. Ввод-вывод одномерных массивов
- •5.3.2.Алгоритм нахождения суммы элементов одномерного массива
- •5.3.3. Алгоритм нахождения минимального или максимального элемента массива и его порядкового номера
- •5.3.4. Алгоритм перестановки
- •5.3.4. Алгоритм формирования нового массива из элементов имеющегося
- •5.3.5. Поиск в упорядоченном массиве.
- •6. Алгоритмы обработки двумерных массивов
- •6.1. Ввод-вывод двумерных массивов
- •Литература
5.3.2.Алгоритм нахождения суммы элементов одномерного массива
Пусть требуется найти сумму всех элементов одномерного массива X, состоящего из N элементов. Математическая запись этой задачи выглядит следующим образом:
, а если раскрыть смысл значка суммы, то получим следующее:
. Исходя из этого, для решения задачи воспользуемся следующим циклическим алгоритмом:
-
Зададим S=0.
-
Организуем цикл по i=1,2,...,N на каждом шаге которого будем выполнять следующее действие:.
Оформим указанные действия в виде графической схемы (рис.5.5(а))
а) б)
Рис.5.5. Графическая схема алгоритма вычисления суммы (а) и произведения (б)
Замечание1. Вычисление произведения элементов одномерного массива производится по аналогичному алгоритму.
Пусть нужно вычислить
.
Тогда:
-
Зададим P=1.
-
Организуем цикл по i=1,2,...,N на каждом шаге которого будем выполнять следующее действие:
.
Графическая схема такого алгоритма представлена на рис.5.5(б).
Замечание 2. Если нужно суммировать или перемножать не все элементы массива, а только лишь те, для которых выполняется заданное условие, то перед суммированием (умножением) необходимо проверять это условие, и выполнять суммирование (умножение) только тогда, когда условие выполняется. Такой случай рассмотрен в примере 5.2.
Замечение 3. Определение количества элементов массива, значения которых удовлетворяют некоторому условию (например, xi>0) осуществляется по алгоритму, во многом схожему на алгоритм вычисления суммы. Обозначим количество через K.
Тогда:
-
Зададим K=0.
-
Организуем цикл по i=1,2, …, N на каждом шаге которого будем проверять выполнение условия для i-элемента массива. В случае, если условие выполняется производим действие K=K+1.
Пример 5.2. Найти среднее арифметическое положительных чисел среди элементов массива, стоящих на нечетных местах и произведение чисел массива, меньших заданного С.
Решение. Особенностью данной задачи является то, что она состоит из 2-х подзадач, осуществляющих обработку элементов одного и того же массива:
-
Вычисление среднего арифметического положительных чисел. Для ее решения понадобиться цикл по i=1,3,5,…,N, т.е. с шагом изменения =2. Среднее арифметическое можно вычислить по формуле , где S – сумма положительных чисел, стоящих на нечетных местах, а K-их количество. Перед его вычислением нужна проверка условия K≠0, т.к. в противном случае (когда таких чисел нет) расчет m невозможен.
-
Вычисление произведения чисел, меньших заданного С. Для ее решения нужен цикл по i=1,2,…,N. А чтобы убедиться, что числа < C в массиве были, введем в схему дополнительную величину t. Перед началом вычисления произведения установим для нее значение =0, а как только будет найдено значение элемента массива < C, установим t=1. Таким образом, t играет роль сигнала о наличии в массиве чисел < C. Схема алгоритма приведена на рис.5.6.
Рис.5.6. Схема алгоритма примера 5.2
5.3.3. Алгоритм нахождения минимального или максимального элемента массива и его порядкового номера
Пусть в одномерном массиве x из N числовых элементов нужно найти минимальное (наименьшее) значение и его порядковый номер, например, в следующем массиве
х1 |
х2 |
х3 |
х4 |
х5 |
х0 |
-3 |
12 |
-5 |
-7 |
20 |
101 |
наименьшее значение =-7, а порядковый номер этого элемента =4.
Обозначим наименьшее значение величиной min, а его порядковый номер величиной n_min. Тогда для их поиска воспользуемся следующим алгоритмом:
-
Зададим min=x1 и n_min=1
(тем самым как бы предполагая, что минимальный элемент – это первый).
-
Организуем цикл по i=2,3,…,N внутри которого будем проверять условие xi<min.
В случае выполнения этого условия делаем замену
min=x1
n_min=i
(Таким образом, при выполнении п.2 мы значения всех остальных элементов сравним с min и в случае нахождения меньшего значения, делаем замену).
Замечание. Подобным образом работает и алгоритм нахождения максимального (наибольшего) значения – max и его порядкового номера – n_max. Но в этом случае проверяемое в п.2 условие нужно записать так:
xi>max.