Rambler's Top100

Скачать программы    Все программы автора

1. 7. 5. Операторы цикла с условием

В Турбо - Паскале применяются два оператора цикла с условием:

 

While "условие" DO "оператор"; - цикл с предусловием: проверка условия перед каждым выполнением "оператора",

Repeat "операторы" Until "условие"; - цикл с постусловием: проверка условия после каждого выполнения "операторов".

Здесь "условие" - выражение логического типа (Boolean).

 

Схема выполнения операторов имеет вид:

 

 

В цикле While. . . "оператор" выполняется если условие верно (True), если условие ложно (False), то цикл заканчивается, т. е. цикл While. . . повторяется пока выполняется условие. Цикл While . . . начинается проверкой условия, поэтому, если начальное условие ложно, то "оператор" не выполняется ни разу. Для включения в тело цикла нескольких операторов применяется составной оператор: Begin "операторы" end.

Цикл Repeat. . . повторяется, если условие ложно (False), и заканчивается, если условие верно (True), т. е. цикл Repeat. . . повторяется до выполнения условия . Цикл Repeat. . . заканчивается проверкой условия, поэтому "операторы" выполняются не менее одного раза. В теле цикла может записываться более одного оператора.

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

Сумма членов бесконечной последовательности a 1 , a 2 , a 3 , . . . , a N , . . . называется бесконечным рядом и записывается в виде:

a 1 + a 2 + a 3 +. . . + a N +. . . .

Здесь a N - общий член ряда. Сумма конечного числа членов ряда называется частичной суммой и обозначается " S N ". Если сумма членов бесконечного ряда имеет конечный
32

предел "S", то ряд называется сходящимся. Для некоторых рядов получены формулы расчета суммы членов ряда. Например, сумма членов числового ряда:

1 + 1/3 2 + 1/5 2 + . . . + 1/(2 * N - 1) 2 + . . . имеет предел S = Pi 2 /8;

и общий член a N = 1/(2 * N - 1) 2 , где N = 1, 2, 3, .. .

Для сходящегося ряда вычисляется последовательность частичных сумм с заданной погрешностью. Абсолютная погрешность расчетов определяется по формуле Eps=abs(S - S N ), либо Eps=abs(a N ), если значение S неизвестно. Относительная погрешность расчетов определяется по формуле Eps_o=abs((S - S N )/S), либо Eps_o=abs(a N /S N ). Частичные суммы вычисляются по формуле: S N = S N -1 + a N ;

Для знакопеременного ряда следует добавить k 1 = - 1, а в цикле: k 1 := - k 1 , a N =k 1 * a N . В некоторых случаях "N" - ый член ряда выражается через "N - 1" - ый, например, для ряда:

1 + 1/2! + 1/4! + 1/6! + . . . + 1/(2 * N)! + . . . ; N = 0, 1, 2, . . . общий член ряда вычисляется по формуле: a N = a N -1 * k;

Параметр k = a N /a N -1; - коэффициент роста вычисляется предварительно (до написания программы). Для данного ряда

a N = 1/(2 * N )! = 1/( 1 * 2 * . . . * (2 * N-2) * (2 * N-1) * 2 * N);

a N-1 = 1/(2 * (N-1))!= 1/((2 * N-2))!= 1/(1 * 2 * . . . * (2 * N-2));

k = a N /a N -1 = 1/((2 * N-1) * 2 * N).

Здесь N! = 1 * 2 * 3 * . . . * N; - вычисление факториала числа "N" , причем 0! = 1 .

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

N:= 0; a:= 1; SN:= 1; e:= 2. 7182828; S:= (e2 + 1)/e;

 

repeat N:= N+1; k:= 1/((2 * N-1) * 2 * N); a:= a * k;

SN:= SN+a;

Writeln(' Частичная сумма Sn=', Sn:-11:6, '_ _ n=', n:2);

until abs(S-Sn) < eps; { eps - допустимая погрешность расчетов }

Writeln('_ _ _ Сумма ряда S =', S :-11:6);

 

Практическое задание N 1. 15

 

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

 

 

Если члены ряда являются функциями аргумента "x", то ряд называется функциональным. Расчет многих функций производится разложением функции в степенной ряд. Приведем пример расчета значения функции y=sin(x) при некотором значении "х" с использованием представления функции в виде ряда:

y 1 = x - x 3 /3! + ... + (-1) (N+1) * x (2 * N+1) /(2 * N+1)! + ...

где a 0 = x, a N = k * a N-1 , k= (-x 2 )/(2 * N * (2 * N+1)), N= 0, 1, 2, ...

Kаждый член ряда а N при N>0 можно получить умножением предыдущего члена ряда a N - 1 на коэффициент k. Приближенное значение функции y=sin(x) находится как частичная сумма "N" членов ряда. Погрешность вычисления значения функции "у" при некотором значении "х" зависит от количества членов ряда и значения "х", поэтому расчет заканчивается при |a N | < eps, где eps - допустимая погрешность расчетов. В программе используем цикл с условием, например:

PROGRAM SIN_R;

Var y,y1,x,eps,a,k: real; n: Word;

Begin

Writeln('Вычисление y=sin(x) с использованием ряда !');

Write('Введите значение аргумента x='); readln(x);

Write('Введите значение погрешности еps='); readln(eps);

Writeln; y:= sin(x);

n:= 0; a:= x; { a - первый член ряда }

y1:= a; { y1 - первая частичная сумма ряда }

While abs(a) > eps do begin

n:= n+1; k:= -x*x/(2*n*(2*n+1)); a:= a*k; y1:= y1+a;

Writeln(' Приближенное значение функции y1=', y1: - 11:8, ' _ _ при n=', n )

end;

Writeln('Контрольное значение функции y=sin(x)= ', y:-11:8);

Writeln(' Нажмите Enter'); readln;

End.

Применение оператора Repeat. . . в данном примере имеет вид:

Repeat " операторы " Until abs(a) < eps;

Операторы цикла с условием могут применяться для анализа правильности вводимых данных. Контроль входных данных обязателен для рядов, сходящихся не во всей области "X", например, |X|<1 при разложении функции arctg(x) в степенной ряд. В этом случае можно использовать "защиту от дурака", например:

Repeat Write('введите значение |х|<1;_ _x='); readln(x)

until abs(x)<1;

 

Практическое задание N 1. 16

 

1. Рассчитать значение функции y=f(x) при некотором значении "х" с использованием представления функции в виде ряда:

 

 

Программа запрашивает ввод величин "х", "еps" и выводит на экран приближенное значение "y1" для каждого "N" и "контрольное" значение "y".

2. Определить число месяцев, через которое начальная сумма вклада в банк увеличится более чем в три раза. Процентная ставка равна 5% в месяц. Программа выводит на экран ежемесячное значение конечной суммы.

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

Вверх

Белорусский рейтинг MyMinsk.com Сайты беларуси Регистр "ЗУБР" Каталог на TIGA.BY, а также  новости, работа, объявления, фото и многое другое Rambler's Top100 Белорусский каталог программ Faststart - рейтинг сайтов, каталог интернет ресурсов, счетчик посещаемос­ти Яндекс.Метрика
Hosted by uCoz