Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 104; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.152.146 (0.006 с.) |