Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика. Лекции. 2009. Измайлов.doc
Скачиваний:
9
Добавлен:
26.10.2018
Размер:
4 Mб
Скачать

8.5. Вычисление функции с одновременно изменяющимися несколькими аргументами

Дана: функция F = f(x, y, z), аргументы x, y и z изменяются одновременно: x от хн с шагом hx , y от ун до ук с шагом hy, z от zн с шагом hz.

Вычислить: значения функции.

Из условия задачи видно, что область изменения аргументов дана только для параметра у. Для параметров х и z конечные значения не даны. Это правильно. Если бы для них были бы установлены эти значения, то задачу решить бы было бы невозможно. Такая формулировка была бы неправильной. В самом деле, в каждом из этих параметров могут быть различные начальные значения, различные шаги изменения, различные конечные значения. При этом достичь заданных, в общем – то, различных конечных значений одновременно просто невозможно.

Для решения такого вида задач поступают следующим образом. Используют параметрический цикл и в его заголовок, в качестве параметра цикла, выносят параметр с заданной областью изменения. В приведенном примере – это у. Остальные аргументы (х и z) инициализируют до цикла. В теле цикла предусматривают изменение аргументов, не использованных в качестве параметров цикла (х и z). На рис. 8.5 приведена блок – схема решения этой задачи.

Рис. 8.5. Блок – схема вычисления функции с одновременно

изменяющимися несколькими аргументами.

Очевидно, что этим методом можно решать такие задачи с любым количеством аргументов.

8.6. Итерационные циклы

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

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

Вычислить: сумму , для любых х > 1. Вычисление производить, пока .

Анализ выражения для вычисления суммы показывает, что знаменатель дроби постоянно возрастает, а значение дроби – уменьшается. Таким образом, каждое очередное слагаемое будет все меньше и меньше. Если его значение станет меньше числа 10-5, то изменение суммы будет ничтожно мало, и процесс вычисления можно прекратить.

_

+

Рис.8.6. Блок – схема итерационного цикла с предусловием

В итерационных циклах основанием для завершения их работы является некое условие. Если оно выполняется, то цикл работает, в противном случае цикл прекращает работу. В представленной задаче цикл работает до тех пор, пока условие выполняется. Итерационные циклы могут быть представлены с предусловием или с послеусловием. Циклы с предусловием предусматривают вначале проверку условия выполнения цикла, а затем, если условие выполняется, осуществляется выполнение тела цикла.

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

На рис. 8.6 и 8.7 приведены блок – схемы вычислений с использованием циклов соответственно с предусловием и послеусловием.

i = 0

S = 0

a = 1

S = S + a

i = i + 1

+ –

Рис.8.7. Блок – схема итерационного цикла с послеусловием

Лекция 9

9. Типовые алгоритмы

9

.1. Сортировка ряда чисел

Сортировка – это упорядочение (размещение) чисел по возрастанию или по убыванию их значений.

Существует несколько различных способов решения этой задачи, однако чаще всего используются:

  • метод смежных пар (метод "пузырька"),

  • метод поиска наименьшего (наибольшего) числа ряда.

9.1.1. Метод смежных пар

Алгоритм, реализующий метод смежных пар, основан на сравнении двух соседних чисел с последующей их перестановкой в случае, если они расположены не в требуемой очередности.

На рис.9.1 приведен алгоритм сортировки заданного ряда чисел по возрастанию. Для регулярного сравнения двух соседних чисел предусматривается циклический процесс. В заголовке цикла, в качестве параметра цикла, используется адрес числа с его областью изменения от до k = . Здесь следует обратить внимание на то, что правая граница области изменения параметра цикла i равна не n, а n-1. Это объясняется тем, что при сравнении двух соседних чисел адрес первого числа определяется значением параметра цикла i, а адрес второго числа вычисляется добавлением единицы (i+1). Если бы параметр цикла имел бы свое последнее значение n, а не n-1, то при i = n адрес второго числа определялся бы как i= n+1, а это уже выходит за пределы рассматриваемого ряда, и числа с таким адресом нет. Поэтому, чтобы исключить такую ситуацию, последнее значение параметра цикла принимается на единицу меньше.

В теле цикла происходит сравнение значений двух соседних чисел и , и в случае их неправильного расположения осуществляется их взаимная перестановка с помощью промежуточной переменной . Переменная используется с целью исключения потери значения одного из чисел при перестановке. Факт перестановки фиксируется с помощью переменной , которая играет роль индикатора, путем установки ей значения равной единице. Если же числа расположены в требуемой очередности, то их перестановка не производится. После завершения каждого цикла, на последнее место перемещается самое большое число из чисел, рассматриваемых в этом цикле. Кроме этого, проверяется состояние индикатора . Если его значение равно единице, то это означает, что хотя бы одна перестановка в завершившемся цикле была, и, следовательно, необходимо совершить еще один цикл для сравнения соседних чисел, но без последнего числа, которое и так уже расположено на нужном месте. Исключение последнего числа из рассмотрения, после завершения очередного цикла, осуществляется операцией k = k –1. Это позволяет экономить машинное время, так как нет никакого смысла проверять размещение уже расположенного на нужном месте числа.

После этого все начинается сначала. Индикатор устанавливается в стартовое состояние со значением нуль, и в цикле производится поочередное сравнение двух соседних чисел. Такие циклы будут повторяться до тех пор, пока не обнаружится, что после завершения очередного цикла индикатор не поменял своего начального значения 0 на 1. И это будет означать, что в процессе циклической операции не было ни одной перестановки, а, следовательно, числа расположились в требуемой последовательности, то есть ряд отсортирован. Таким образом, алгоритм позволяет повторять циклические операции столько раз, сколько будет необходимо для завершения процесса сортировки.

+

Рис. 9.1 Блок – схема сортировки чисел по возрастанию

Сортировка ряда чисел по убыванию выполняется аналогично. В этом случае в блок-схеме следует выполнить некоторые изменения. Так в операции сравнения соседних чисел необходимо знак " > " заменить знаком " < ".

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