Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal] Программа суммы ряда


Автор: Oriander 16.12.2009, 22:23
Уважаемые знатоки, помогите написать 2 программы 
нахождения суммы ряда с указанной точностью.
1-я программа - с передусловием, а 2-я - с послеусловием.

(сигма)Е от n=1 до бесконечности =
= exp(ln(0.5)*n)*cos(2*n)

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



Автор: mr.Anderson 17.12.2009, 00:30
Раз знаешь, как искать сумму ряда на интервале, то все должно быть нормально. Верхней границей интервала теперь будет твоя точность. Только ты будешь не до нее производить суммирование, а до того момента, пока текущий член ряда не станет меньше этой самой точности. Как только он станет меньше - добавляешь его в сумму и заканчиваешь вычисление.

Добавлено через 3 минуты и 57 секунд
ЗЫ с пред- и постусловием программа реализуется практически одинаково.

Автор: Oriander 17.12.2009, 17:59
Спасибо. Посмотрите что у меня получилось.
Ответы разные. В передусловии 0 выходит,
а в послеусловии -2.5

Код

program ss;
uses crt;
const E=0.01;
var s,tek:real; n:integer;
begin
     clrscr;
     s:=0; n:=1;
     while tek>E do
     begin
                tek:=exp(ln(0.5)*n)*cos(2*n);
                s:=s+tek;
                n:=n+1;
     end;
     writeln('s=',s:8:5);
     writeln('kilkist dodankiv=',n);
     readln
end.


Код

program ss;
uses crt;
const E=0.01;
var s,tek:real; n:integer;
begin
     clrscr;
     s:=0; n:=0;
     repeat
                n:=n+1;
                tek:=exp(ln(0.5)*n)*cos(2*n);
                s:=s+tek;

     until E<tek;
     writeln('s=',s:8:5);
     writeln('kilkist dodankiv=',n);
     readln
end.

Автор: mr.Anderson 17.12.2009, 19:03
Во втором коде постусловие неправильное.
Код
until E<tek;

Заменить на
Код
until tek < E;

А так на первый взгляд все вроде бы правильно.

Автор: Oriander 17.12.2009, 19:17
- 0.2 выходит во второй после советуемых вами корректировок,
а это не совпадает с ответом 
первой программы, где ответ = 0.

Уже об стену бьюсь ничего понять не могу...

Автор: mr.Anderson 17.12.2009, 20:48
Дай точный код обеих программ (подправленных) и попробуй уменьшить точность до 0.001... Не вижу ошибки в коде.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)