Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Структурированная запись алгоритма 23 .1Содержание книги
Поиск на нашем сайте 1. Sum = 0. 2. n = 1. 3. Eps = 10-5 4. Повторять: 4.1 Вывести сообщение: «Введите значение x (0< x <1)». 4.2 Ввести значение x. Завершить повторение, если 0< x <1. 5. y = x / (x+1). 6. a = y. 7. Повторять, пока | a| ≥ Eps: 7.1. Sum = Sum + a. 7.2. n = n+1. 7.3. a = a * y * (n-1) / n. 8. Вывести сообщение «Сумма ряда:» и значение переменной Sum 9. Вывести сообщение «Количество учтенных членов в сумме ряда:» и значение выражения n–1 Однако данный алгоритм не учитывает возможность ввода пользователем такого x, при котором уже самый первый член ряда будет меньше Eps и в такой ситуации будет выводить в результате «Сумма ряда: 0 Количество учтенных членов в сумме ряда: 0», что неверно, поскольку сумма вообще не определена. Для коррекции такого поведения необходимо действия с 8 по 9 выполнять только после проверки «Если n >1, то», а в альтернативной ветви этого условия выводить сообщение «Сумма ряда не определена – ни один член ряда не удовлетворяет условию». Поскольку в вычислении слагаемого используется как текущее, так и предыдущее значение n, можно сначала вычислять числитель с предыдущим значением n, затем увеличивать n на единицу и только после этого получать окончательное значение очередного слагаемого делением на n. Запишем модифицированную версию алгоритма с учетом всех приведенных рассуждений. Структурированная запись алгоритма 23.2 1. Sum = 0. 2. n = 1. 3. Eps = 10-5 4. Повторять: 4.1 Вывести сообщение: «Введите значение x (0< x <1)». 4.2 Ввести значение x. Завершить повторение, если 0< x <1. 5. y = x / (x+1). 6. a = y. 7. Повторять, пока |a| ≥ Eps: 7.1. Sum:= Sum + a. 7.2. a = a * y * n. 7.3. n = n+1. 7.4. a = a / n. 8. Если n > 1, то: 8.1. Вывести сообщение «Сумма ряда:» и значение переменной Sum 8.2. Вывести сообщение «Количество учтенных членов в сумме ряда:» и значение выражения n –1. Иначе вывести сообщение «Сумма ряда не определена – ни одно слагаемое не удовлетворяет условию» Однако данный алгоритм все еще обладает тем недостатком, что в нем при вычислении каждого слагаемого сначала происходит умножение на n, а затем деление на n +1. Для уменьшения числа трудоемких действий (к которым относится умножение и деление) можно использовать частично-рекуррентные вычисления, когда каждое слагаемое вычисляется как произведение 1/ n на рекуррентно вычисленное значение (x/(x+1))n. Если заменить второе выражение переменной ap, тогда очередное слагаемое an = (1/ n) ∙ apn = apn / n, где apn = apn -1 ∙ (x/(x+1)), а начальное значение a 1 = ap 1 = (x/(x+1)). Воспользовавшись ранее введенной переменной y для обозначения вычисленного сразу после ввода переменной x выражения x/ (x+1), запишем модификацию алгоритма с частично-рекуррентным вычислением слагаемых. Структурированная запись алгоритма 23. 3 1. Sum = 0. 2. n = 1. 3. Eps = 10-5 4. Повторять: 4.1 Вывести сообщение: «Введите значение x (0< x <1)». 4.2 Ввести значение x. Завершить повторение, если 0< x <1. 5. y = x / (x+1). 6. ap = y 7. a = ap. 8. Повторять, пока |a| ≥ Eps: 8.1. Sum = Sum + a. 8.2. n = n+1. 8.3. ap = ap * y 8.4. a = (1 / n)*ap. 9. Если n > 1, то: 9.1. Вывести сообщение «Сумма ряда:» и значение переменной Sum 9.2. Вывести сообщение «Количество учтенных членов в сумме ряда:» и значение выражения n –1. Иначе вывести сообщение «Сумма ряда не определена – ни одно слагаемое не удовлетворяет условию» Схема алгоритма
Программа на языке Си #include <stdio.h> #include <stdlib.h> #include <math.h> #define Eps 1e-5 int main(void) { unsigned int n=1; double x, y, a, ap, Sum = 0; do{ printf("Введите x (0 < x < 1):"); scanf("%lf",&x); }while(!(0<x && x<1)); y = x / (x+1); ap = y; a = ap; while(fabs(a)>= Eps){ Sum = Sum + a; n= n+1; ap = ap*y; a=ap/n; } if(n > 1) { printf("Сумма ряда: %lf\n", Sum); printf("Количество учтенных членов"); printf(" в сумме ряда: %u", n-1); } else { printf("Сумма ряда не определена -- "); printf("ни одно слагаемое "); printf("не удовлетворяет условию\n"); } system("pause"); return 0; } Программа на языке Паскаль program Pr_23_3; const Eps = 1e-5; var Sum, x, y, ap, a: Real; n: Integer; begin Sum:= 0; n:= 1; repeat writeln(' Введите x (0 < x < 1): '); readln(x); until (0 < x) and (x < 1); y:= x / (x+1); ap:= y; a:= ap; while abs(a) >= Eps do begin Sum:= Sum + a; n:= n + 1; ap:= ap * y; a:= ap/n; end; if n > 1 then begin writeln(' Сумма ряда: ', Sum); write(' Количество учтенных членов '); writeln(' в сумме ряда: ', n-1); end else begin write(' Сумма ряда не определена -- '); write(' ни одно слагаемое '); writeln(' не удовлетворяет условию '); end; end. Программа на языке Фортран Program Pr_23_3 Implicit none integer n real Sum,Eps,x,a,ap,y n=1 Sum = 0 Eps=1e-5 x=0 do while (.not.(x>0.and.x<1)) print*,'Введите x (0<x<1):' read*,x enddo y = x / (x+1) ap = y a = ap do while (abs(a)>= Eps) Sum = Sum + a n= n+1 ap = ap*y a=ap/n enddo if(n > 1) then print '(1x,A,F6.4)','Сумма ряда:', Sum print*,'Количество учтенных членов' print '(1x,A,I5)',' в сумме ряда:', n-1 else print*,' Сумма ряда не определена -- ' print*,'ни одно слагаемое ' print*,' не удовлетворяет условию' endif end Программа на языке Python Sum = 0 n = 1 Eps = 1e-5 x = 2 while not 0 < x < 1: print("Введите x (0 < x < 1): ") x = float(input()) y = x / (x + 1) ap = y a = ap while(abs(a) >= 1e-5): Sum = Sum + a n = n + 1 ap = ap * y a = ap / n if n > 1: print("Сумма ряда: ") print(Sum) print("Количество учтенных членов: ") print(n - 1) else: print("Сумма ряда не определена") Программа в системе Матлаб n=1; Sum = 0; Eps=1e-5; x=0; while ~(x>0 && x<1) x=input('Введите x (0<x<1):'); end y = x / (x+1); ap = y; a = ap; while abs(a)>= Eps Sum = Sum + a; n= n+1; ap = ap*y; a=ap/n; end if(n > 1) disp(sprintf('Сумма ряда: %f', Sum)) disp(sprintf('Количество учтенных членов')) disp(sprintf(' в сумме ряда: %d', n-1)) else disp('Сумма ряда не определена -- ') disp('ни одно слагаемое '); disp('не удовлетворяет условию'); end
|
||
|
Последнее изменение этой страницы: 2021-04-12; просмотров: 159; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.198 (0.008 с.) |