Помощь - Поиск - Пользователи - Календарь
Полная версия: Найти массив сумм с точностью до e
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Миа
Не могу справиться с задачей, так как не понимаю условия. В методичке был пример решения данной задачи, я попыталась по примеру составить программу, но мало того что выдает ошибку, так еще и понятие "с точностью до е" меня сбивает с толку (я его просто не понимаю).

Найти массив сумм S элементов ряда для каждого значения заданной последовательности Х (с использованием оператора for). Каждую сумму искать с точностью до e.
S=x^3/3-x^5/15+...+((-1)^(n+1))*(x^(2n+1))/(4n^2-1)
x=0.1...1.3, hx=0.3, e=10e-3

Вот текст, который я попыталась составить:
PROGRAM Lab_7_2;
USES
Crt;
CONST
m = 5; {Количество Х}
xn = 0.1; {Начальное знеачение Х}
xk = 1.3; {Конечное значение Х}
hx = 0.3; {Шаг по Х}
eps = 1e-3; {Коэффициент точности}
VAR
s : array [1..m] of real; {Массив сумм}
q : real; {Коэффициент рекурентности}
i : integer; {Счетчик элементов ряда}
x : real; {Текущий Х}
k : integer; {Счетчик Х}
BEGIN
ClrScr;
x:=xn; {Начальный Х}
k:=1;
WHILE x<=xk+eps DO
Begin
i:=0;
REPEAT {Цикл поиска k-ой суммы}
q:=exp((2*i+1)*ln(x))/((4*sqr(i))-1);
if odd(i)=false then q:=-q;
s[k]:=s[k]+q;
i:=i+1;
UNTIL abs(q)<eps; {Условие точности}
Writeln('k = ',k,' x = ',x:3:1,' S = ',s[k]:6:4);
k:=k+1;
x:=x+hx; {Переход на следующий Х}
Readln;
End;
END.


Помогите составить правильную программу...
Lapp
Цитата(Миа @ 28.12.2010 14:30) *
Не могу справиться с задачей, так как не понимаю условия.
...
Помогите составить правильную программу...
Миа, ты все прекрасно поняла и сделала. Твоя программа, мне кажется, работает нормально. Ты только единственное сделала плохо: не задала конкретный вопрос, поэтому пришлось запускать, разбираться и т.п., вместо чтоб сразу сказать все.

Правильно я понимаю, что тебя беспокоит ошибка, вылетающая на пятом (последнем) проходе? Так вот, эта ошибка - не программная, это просто обычное расхождение ряда. Обрати внимание: сначала шли значения x<1 - при них ряд сходится. Потом было одно x=1 - ряд все равно сходится. поскольку в знаменателе стоит О(n2). Но при x>1 у этого ряда нет никакого шанса на сходимость.. Иными словами, модуль суммы стремится к бесконечности. Поэтому программа просто переполняется.

То, что тебя напугало - точность - это совершенно нормальное понятие для ряда. Ты еще не проходила ряды, наверное? Так вот, когда будешь проходить, тогда узнаешь, что точность знакопеременного ряда (а у тебя именно знакопеременный) оценивается последним слагаемым его конечной суммы. Так что все Okay )).

Как быть в таком случае, я точно тебе не скажу (может, про это тоже есть в методичке). Например, можно при вылезании суммы за какое-нить большое число обрывать расчет и выдавать сообщение: "при x=.. ряд расходится"

1. Еще пара советов, если ты не против.. Не нужно тут применять экспоненты и логарифмы - нужно просто домножать каждый раз на x2. А если домножать на -x2, то решится вопрос и со сменой знака.
2. Сними галку в опции "use Tab characters" в опциях своего TP (или BP, что там у тебя)
Успехов тебе ))
Миа
Спасибо
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.