Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР8-С++-10-апреля-2012.doc
Скачиваний:
9
Добавлен:
15.09.2019
Размер:
3.09 Mб
Скачать

1.2. Алгоритмы вычисления сумм и произведений в цикле

В практике программирования довольно часто приходится вычислять выражения вида

где – некоторая функция.

Эффективным средством реализации указанных вычислений является использование циклических вычислительных процессов, но при этом сле­дует соблюдать два правила:

Правило накопления суммы: переменной, с помощью которой будет накапливаться сумма в цикле, необходимо при­своить начальное значение 0 (ноль) до входа в цикл.

Правило накопления произведений: переменной, с помощью которой будет накапливаться произведение в цикле, необходимо присвоить начальное значение 1 (единица) до входа в цикл.

Рассмотрим, чем обусловлены эти два правила.

При вычислении сумм вида (8.5) используется принцип накапливания сумм, реализуемый при помощи рекуррентной формулы вида

где – значение суммы, содержащей k-1 слагаемое; – зна­чение суммы, содержащей k слагаемых; – значение k-го слагаемого.

Использование формулы (8.7) заключается в следующем. Примем на­чальное значение суммы равным нулю: S0 (при k = 1). Зададим ин­дексу k начальное значение к = 1. Тогда получим сумму с первым сла­гаемым: S1 = S0 + Y1 = 0 + Y1 = Y1 . Увеличим значение индекса k на единицу: k = k + 1 = 2 и вновь просуммируем со вторым слагаемым по выражению (8.7): S2 = S1 + Y2 = (S0 + Y1 ) + Y2 = (0 + Y1 ) + Y2 = Y1 + Y2. Вновь увеличим значение индекса k на единицу и просуммируем с третьим членом: S3 = S2 + Y3 = (S1 + Y2 ) + Y3 = (S0 + Y1 + Y2 ) + Y3 = (0 + Y1 + Y2 ) + Y3 = Y1 + Y2 + Y3 .

Повторяя эти операции до k = n, мы получим искомую сумму

S = Sn = (0 + Y1 + Y2 + … + Yn-1) + Yn .

Поскольку при вычислениях надобности в запоминании значений всех слагаемых и промежуточных сумм нет, в качестве Sk и Yk нужно ис­пользовать простые без индексов переменные и накапливание вести в цикле по формуле

S = S +Y, (8.8)

где знак = означает присваивание значения.

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

Таким образом, получаем схему, реализующую принцип накапливания суммы. Алгоритм такого принципа включает следующие операции (рис. 8.2,а):

1) присвоение сумме S начального значения: S = 0 (блок 2);

2) присвоение индексу k начального значения: k = 1 (блок 3);

3) вычисление очередного (k-го) слагаемого накапливаемой суммы: (блок 4);

4) накапливание суммы по выражению: S = S + Yk (блок 5);

5) увеличение значения индекса k на единицу: k = k + 1 (блок 6);

6) проверку текущего значения индекса k с его конечным значением n (блок 7). Если k ≤ n, то возвратимся к п. 3 (блок 4). Если нет (k > n), переходим на следующую операцию (п. 7);

7) выводим на печать полученное значение суммы S (блок 8);

8) останавливаем вычисления (блок 9).

По аналогии с накапливанием суммы принцип вычисления произведений вида (8.6), реализуется при помощи рекуррентной формулы вида

где – произведение, содержащее k-1 сомножитель; – произ­ведение, содержащее k сомножителей; – значение k-го со­множителя.

Использование формулы (8.9) заключается в следующем. Примем на­чальное значение произведения равным единице: р0 = 1 (при k =1 ). За­дадим индексу k начальное значение k = 1.

Тогда получим произведение с первым сомножителем: P1 = P0 * Y1 = 1 * Y1 = Y1 .

Увеличим значение индекса k на единицу: k = k + 1 = 2 и вновь произ­ведем умножение со вторым слагаемым по выражению (8.9): P2 = P1 * Y2 = (P0 * Y1 ) * Y2 = (1 * Y1 ) * Y2 = Y1 *Y2. Вновь увеличим значение индекса k на единицу и произведем умножение с третьим членом: P3 = P2 * Y3 = (P1 * Y2 ) * Y3 = (P0 *Y1 * Y2 ) * Y3 = (1 * Y1 * Y2 ) * Y3 = Y1 * Y2 * Y3 .

а)

б)

Рис. 8.2. Блок-схемы алгоритмов вычисления в цикле: