Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 70040.doc
Скачиваний:
5
Добавлен:
01.05.2022
Размер:
253.95 Кб
Скачать

1.2.4. Вложенные циклы

В циклических вычислительных процессах часто встречаются так назы­ваемые вложенные (сложные) циклы, содержащие внутри себя один или не­сколько других циклов. Таким образом, одни циклы оказываются вложенны­ми, включенными в другие. Циклы, охватывающие другие циклы, называют внешними, а входящие во внешние циклы - вложенными, или внутренними. Важно понимать, что для каждого значения управляющей переменной внеш­него цикла выполняется оператор, описывающий внутренний цикл. При этом параметр внутреннего цикла принимает все значения, заданные списком это­го цикла.

Наглядный пример - заполнение таблицы умножения с помощью двух вложенных циклов:

for i: =1 to 9 do

for j : = 1 to 9 do

WriteLn(i,'x',j,' = ',i*j);

Для каждого из девяти значений параметра внешнего цикла i (множимо­го) исполнится внутренний цикл, в котором его параметр j (множитель) меня­ется от 1 до 9.

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

Структура вложенных циклов представляется следующим образом:

НАЧАЛО ЦИКЛА I;

НАЧАЛО ЦИКЛА J;

Начало цикла М

Конец цикла М

КОНЕЦ ЦИКЛА J;

КОНЕЦ ЦИКЛА I;

Например, вычислить значение функции Y = 2К + I. При этом I меняется от едини­цы до трех с шагом, равным единице, а К меняется от трех до девяти с ша­гом, равным двум. Program znach;

Uses Crt;

Var I, K, Y: integer;

BEGIN

For N = 1 to 3 Do

Begin

K: = 3;

While К < = 9 Do

Begin

Y : = 2 * К + I;

WriteLn (1: 4, К : 4, Y : 4);

K:=K + 2;

End;

End;

END.

1.3. Организация итерационных циклов в программе

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

Итерация [iteration] - это процесс вычислений, основанный на повторе­нии последовательности операций, при котором на каждом шаге повторения используется результат предыдущего шага.

Пусть каждому натуральному числу поставлено в соответствие определен­ное действительное число: 1→а1, 2 →а2, ..., n→аn, тогда имеем а1, а2, ...,аn и говорим, что задана числовая последовательность.

Имеем следующие способы задания последовательности:

- аналитический способ - задается формулой n-го члена ряда, напри­мер: . Получаем последовательность: .

- рекуррентный способ - это такой способ задания последовательно­сти, когда любой член последовательности, начиная с некоторого, выражает­ся через предыдущие члены. При этом способе задания последовательности указывают ее первый член (или несколько начальных членов) и формулу, позволяющую определить лю­бой член последовательности по известным предшествующим членам. Например, арифметическая прогрессия . При а1 = 2, d = 0,5 получим ряд: -2,-1,5,-1,-0,5, 0, 0,5....

В математике суммы вида а1,+ а2+ ...+аn+…+ак где ак - заданная чи­словая последовательность (к принадлежит N), называются числовыми рядами. Конечные суммы S1 = а1, S2 = а1 + а2, ..., Sn = а1 + а2, ..., аn называются частичными суммами ряда. Если существует конечный предел последовательности частичных сумм S, то ряд называется сходящимся, а число S - суммой ряда. В противном случае ряд называется расходящимся и суммы не имеет.

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

.

Например,

Придавая х какое-либо значение х0 из области определения функций an(х), получим числовой ряд: f1(x0) + f20) + ... + fn(x0) + ..., который может сходиться или расходиться.

Важным частным случаем функциональных рядов являются степенные ряды. Степенным рядом называется ряд вида , где а и коэффициенты ряда - постоянные. В частности, при а=0 степенной ряд имеет вид:

Суммирование рядов имеет учебную и практическую ценность. Различают два основных вида суммирования:

- вычисление суммы первых n членов ряда;

- вычисление суммы ряда с наперед заданной точностью.

Вычисление конечной суммы сводится к нахождению суммы заданного количества слагаемых. Вычисление суммы организуется в виде циклического алгоритма, когда при каждом прохождении цикла номер слагаемого i увеличивается на едини­цу, а сумма изменяется на величину i-ro слагаемого, т. е. , где и - соответственно суммы слагаемых. Цикл будет повторяться до тех пор, пока не будут вычислены все n сла­гаемых. Начальное значение суммы должно быть обнулено (S = 0). Вывод ре­зультата осуществляется по окончании цикла.

Например, вычислить сумму десяти членов ряда, в котором , т. е. мы должны вычислить сумму .

PROGRAM summa;

Uses Crt;

VAR n: Integer;

S : Real;

BEGIN

S: = 0;

For n: = l To 10 DO

S : = S + l/exp(4*ln(n));

WRITELN(‘Cумма =', S);

END.

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

Например, пусть требуется найти сумму ряда с точностью е = 10-4. Общий член ря­да вычисляется по формуле . При рекуррентном способе задания последователь­ности указывают ее первый член (или несколько начальных членов) и форму­лу, позволяющую определить любой член последовательности по известным предшествующим членам.

Для получения рекуррентной формулы вычислим отношение следующе­го члена ряда к текущему:

, откуда .

При составлении программы будем считать, что точность вычислений будет достигнута при .

PROGRAM summa;

Uses Crt;

Const Eps = 0.1E-3;

VAR

N: Integer;

AN, SUMMA: Real;

BEGIN

SUMMA: = 0;

N: = l;

AN: = 1/3;

While AN > Eps DO

Begin

SUMMA: = SUMMA + AN;

N: = N+1;

AN : = AN * (N + l)/(2 * (2 * N + 1));

End;

WriteLn(‘Сумма=',SUMMA);

WriteLn('Последний член ряда = ', AN);

END.

Результат работы программы: сумма ряда = 4,72743922744030Е - 0001; последний член ряда = 4,11353352529620Е - 0005. Цикл организован с помощью оператора while. Цикл будет выполняться до тех пор, пока не получим очередной член ряда, который будет меньше заданной точности вычислений е. По выходе из цикла печатаем сумму ряда S и последний член ряда. Перед входом в цикл задаются начальные значения переменных S = 0. Здесь накапливается сумма, и AN = 1/3 - это первый член ряда, вычисленный нами. Выводится сумма ряда S и последний член ряда в формате с плавающей запятой.