Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Задача на сумму ряда

Автор: sintanial 15.12.2007 0:41

Помогите плиз разобраться. Короче пытаюсь сдать задачу учителю по программированию, но он не как не принимает. Говорит что что то не правельно но тоно не говорит что именно =).
Вот задачка
При заданном значении x и eps вычислить s(x,e), прекратив вычисления кода очередной член суммы по абсолютной елечине станет меньше e. При том же значении x вычеслить функцию y(x). Близость значений s(x,e) и y(x) указывает на правельность вычислений (ЭТО ЗАДАНИЕ ИЗ МЕТОДИЧКИ)

Вот сами функции и ряд

s(x,e)=x-x^2/2+x^3/3-x^4/4+x^5/5-...; y(x)=ln(1+x); [-1<x<=1]

Я программу написал, она была простенька, но после этого преподаватель попросил что бы я написал программу во первых с помощью функции во вторых, нужно вычислять сумму ряда при трех разных значениях e+ каждое значение е нужно вводить самому. Дальше еще сделать так что бы на экран выводилось количество итераций, и выводить достигнута ли точность или нет.+ еще конечное количество итераций задавать самому.
Вот код, что тута не правельно =) ?

 
const eps=1e-7;
var x,c,y,e:real;
i,l,j:integer;
fl:boolean;
procedure summa(x,e:real; l:integer;var s:real;var f:boolean; var n:integer);
var a:real;
begin
n:=1;
a:=x; {первый член}
s:=a;
while (abs(a)>e) and (n<l) do
begin
n:=n+1;
a:=a*(-1)*n/(n+1); {рекурентная формула}
s:=s+a;
end;
s:=s*2;
if abs(a)<e then
f:=true
else
f:=false;
end;

begin
writeln('vvedite x,l');
readln(x,l);
y:=ln(x+1);
for i:=1 to 3 do
begin
writeln ('vvedite e');
readln(e);
summa(x,e,l,c,fl,j);
if fl then
writeln('tochno')
else
writeln ('ne tochno');
writeln('s=',c,' y=',y,' iteracii=',j);
end;
end.



Добавлено через 12 мин.
И еще помогите с еще одной проблемкой. У меня задание
Нужно найти предел последовательности an=(1-cos(2/n))/1/n*sin(1/n) при n->бесконечность.(предел этой последовательность заранее дан он равен "2" . Дан он для того что бы сравнить примерное значение вычисляемого на паскале последовательности и 2)

Я предел вычислил через вот такой код

var an,an1,eps,x,y,z,c:real;
i,n:integer;
begin
readln(eps);
an1:=(1-cos(2))/sin(1);
i:=0;
n:=1;
repeat
n:=n+1;
an:=an1;
x:=1/n;
y:=1/n+x;
an1:=(1-cos(y))/(1/n*sin(x));
i:=i+1;
until abs(an1-an)<eps;
writeln(an1);
writeln(i);
end.



А как вычислить предел вот такой последовательности ? an= 1/(n+1)+1/(n+2)+...+1/2*n n->бесконечность. (Lim (an)= ln2 тоже дан заранее для сравнения)

Подскажите пожалуйста

Добавлено через 10 мин.
Подскажите пожааааалуйста =) ммммплииииз

Автор: Client 15.12.2007 1:21

Цитата
А как вычислить предел вот такой последовательности ? an= 1/(n+1)+1/(n+2)+...+1/2*n

Делаешь цикл с параметром, значение которого прибавляешь к N вот здесь
1/(n+i)

Автор: sintanial 15.12.2007 1:34

Цитата(Client @ 14.12.2007 21:21) *

Делаешь цикл с параметром, значение которого прибавляешь к N вот здесь
1/(n+i)



Кхм кхм чуток не понял. =) Можно по точнее =)

Автор: Client 15.12.2007 1:37

. . . 
For i:=1 to n do
s:=s+1/(n+i);
. . .