Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Met_TP.doc
Скачиваний:
7
Добавлен:
27.11.2019
Размер:
1.55 Mб
Скачать
    1. Задание 3.

Составить с объяснениями блок-схему и программу вычисления суммы элементов ряда с заданной точностью.

Условием окончания цикла считать Sn-Sn-1< , где:

Sn – значение суммы элементов ряда;

Sn-1 – значение суммы n-1 элементов ряда;

=105 – заданная точность вычислений.

Для решения этой задачи необходимо повторить тему «Циклические вычислительные процессы с постусловием. Оператор цикла REPEAT UNTIL» (см. [1], стр. 40, [2], стр. 45-46, [3], стр. 60-61).

В данной задаче сумма элементов ряда вычисляется приближенно и заранее неизвестно, сколько элементов ряда необходимо просуммировать. Условие окончания цикла:

Sn-Sn-1< 

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

Такие циклические вычислительные процессы получили название итерационных, а каждый шаг вычислений – итерацией.

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

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

Очевидно, что формула в условии данной задачи относится к типу в) (см. стр. ******настоящей методики).

Поэтому, полагая Pn=Pn-1*Sin(x+1), а Fn=Fn-1.n, получим значение n-го элемента ряда, Un=Pn/Fn*(x/2) и Sn=S(n-1)+Un.

Блок–схема этой задачи может быть представлена следующим образом:

Пояснения к блок-схеме:

БЛОК 1 – ввод значений х, .

БЛОК 2 – задание начальных значений для организации цикла, (P:=1, F:=1) таких, что при N = 1, Pn=Sin(x+1), а Fn=1!. Очевидно, что нет необходимости повторять вычисление (х/2)3 на каждом шаге цикла. Поэтому можно вычислить его заранее и поместить в переменную А. Так как вычисление суммы идет по стандартному алгоритму Sn=S(n-1)+Un, то начальное значение суммы обнуляется. Чтобы число просчитанных элементов ряда соответствовало значению N, Nтакже принимается равным 0.

БЛОК 3 – образует тело цикла, здесь вычисляются значения P и F, по рекуррентным соотношениям, приведенным выше, значения n-го элемента ряда U и суммы S. Для сохранения предыдущего (n-1) значения суммы использована переменная S1. Переменная DELTA сохраняет значение разности сумм на n-ом и (n-1) шаге.

БЛОК 4 – проверка условия окончания цикла. Если оно истинно, т.е.:

S1-S< ,

то осуществляется переход на блок 5, если ложно – на блок 4 и повторение тела цикла.

БЛОК 5 – печать результатов – S, N, X.

БЛОК 6 – конец программы.

Программа решения задачи 3 на языке Паскаль приведена ниже.

PROGRAM CIKL2;

(*ВЫЧИСЛЕНИЕ СУММЫ ЭЛЕМЕНТОВ РЯДА С ЗАДАННОЙ ТОЧНОСТЬЮ*)

USES(*УКАЗАНИЕ БИБЛИОТЕЧНЫХ МОДУЛЕЙ*)

CRT;

VAR (*РАЗДЕЛ ОПИСАНИЯ ПЕРЕМЕННЫХ*)

X,EPS,P,A,U,S,S1,DELTA:REAL;

F,N:INTEGER;

BEGIN (*НАЧАЛО РАЗДЕЛА ОПЕРАТОРОВ*)

CLRSCR;

WRITELN('ВВЕДИТЕ X');

READLN(X);

WRITELN('ВВЕДИТЕ ТОЧНОСТЬ ВЫЧИСЛЕНИЙ EPS');

READLN(EPS);

A:=EXP(3*LN(X/2));

P:=1;

F:=1;

N:=0;

S:=0;

(*НАЧАЛО ИТЕРАЦИОННОГО ЦИКЛА*)

REPEAT

S1:=S;

N:=N+1;

P:=P*SIN(X+1);

F:=F*N;

U:=P/F*A;

S:=S+U;

DELTA:=ABS(S-S1);

(*ПРОВЕРКА УСЛОВИЯ ОКОНЧЕНИЯ ЦИКЛА*)

UNTIL DELTA<EPS;

(*ВЫВОД РЕЗУЛЬТАТА НА ДИСПЛЕЙ*)

WRITELN('ПРИ X=',X:4:2,' СУММА', N:2,' ЭЛЕМЕНТОВ=',S:7:5);

READLN;

END.

(*КОНЕЦ ПРОГРАММЫ*)

Программа снабжена комментариями и дополнительных объяснений не требует.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]