- •Методические указания
- •Содержание
- •1. Организация работы программ на паскале
- •1.1. Организация работы программ линейной структуры
- •1.2. Организация работы программ циклической структуры
- •1.2.1. Оператор цикла с предусловием while ... Do
- •1.2.2. Оператор цикла repeat ... Until
- •1.2.3. Оператор цикла с параметром (со счетчиком) for... Do
- •1.2.4. Вложенные циклы
- •1.3. Организация итерационных циклов в программе
- •2. Задание на лабораторную работу Вариант 1
- •Вариант 2
- •Вариант 3
- •Вариант 4
- •Вариант 5
- •Вариант 6
- •Вариант 7
- •Вариант 8
- •3. Контрольные вопросы к лабораторной работе
- •Библиографический список
- •Методические указания
- •394026 Воронеж, Московский просп., 14
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) + f2(х0) + ... + 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 и последний член ряда в формате с плавающей запятой.