Цитата:
Сообщение от Linka
Владимир, спасибо ) Вы мне очень помогли )
И еще если позволите, два, на сей раз последних, вопроса:
1.Что делает эта строка ?
2.Чтобы в третьем столбце выводился порядковый номер элемента в ряде, надо менять всю структуры программы ? Как я понимаю, функция может только одно какое-то значение возвращать, и n из нее нельзя показать ?
|
1. Эта строка прерывает вычисление: ведь ряд - это бесконечная сумма, значит нужен критерий, по которому можно остановить расчет. Я выбрал такой: вычисление останавливается, когда следующий член ряда (и все остальные, соответственно) оказывается по абсолютной величине меньшим наперед заданного малого числа, в данном случае (с потолка) 1E-7. Конечно, можно и более "научно", но для этого надо вспоминать теорию остаточных членов функциональных рядов, а мне лень.
2. Не очень понятен вопрос. В вычислении функции для каждого значения аргумента участвуют формально ВСЕ члены ряда со ВСЕМИ номерами, от 1 до бесконечности. В данном случае бесконечность заменена на некое максимальное значение
n, которое получается при "срабатывании" условия, описанного в п.1. Вас интересует его вывести?
Если да, то, действительно, придется несколько изменить программу, в частности, заменить функцию процедурой. Как-то так:
Код:
VAR
X,SUM:REAL;
i,Nmax:INTEGER;
Procedure SUM_CALC(Xs:REAL; var S:REAL; var n:INTEGER);
VAR
a:REAL;
Begin
a:=-SQR(2*Xs)/2;
S:=1+0.5*a;
n:=1;
Repeat
Inc(n);
a:=-a*SQR(2*Xs)/(2*n-1)/(2*n);
S:=S+0.5*a;
Until Abs(a)<1E-7;
End;
BEGIN
For i:=0 TO 45 DO
Begin
X:=Pi*i/90;
SUM_CALC(x, SUM, Nmax);
WriteLn(i:2,'*Pi/90', SUM:10:5, SQR(Cos(X)):10:5, Nmax:5);
End;
ReadLn;
END.