Добавил:
Studfiles2
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Вычисление суммы ряда с заданной точностью / SIN_SUBR
.PAS { „«п § ¤ ле epsil : (0..1) Ё x ўлзЁб«пҐвбп
S(n;x) = Sum (i:0..n) t(i;x),
Ј¤Ґ t(i;x) = (-)^i* x^(2i+1)/(2i+1)!
Ё n = Min [ k>=0 : Abs(t(k;x)) <= epsil ] }
type Float = Single;
var x, { аЈг¬Ґв }
epsil, {Ї а ¬Ґва в®з®бвЁ }
s : Float;
l, n : Integer;
fout : Text;
Procedure sint( x, eps: Float; var s: Float; var n: Integer);
{ аЈ (in) : x - аЈг¬Ґв дгЄжЁЁ,
eps - Ї а ¬Ґва в®з®бвЁ;
१ (out): s - § 票Ґ дгЄжЁЁ,
n - ®¬Ґа Ї®б«Ґ¤ҐЈ® б« Ј Ґ¬®Ј®,
Ґпў® § ¤ ў Ґ¬л© Є Є
n = Min [ k>=0 : Abs(t(k;x)) <= epsil ]
}
{ „ «ҐҐ ЇаЁ § ЇЁбЁ г⢥তҐЁ© ЁбЇ®«м§®ў л ®Ў®§ 票п:
s(j) = Sum (i:0..j) t(i) ,
t(i) = (-)^i * x^(2i+1)/(2i+1)! .
‚лзЁб«ҐЁп Їа®Ё§ў®¤пвбп Ї® ४гааҐвл¬ б®®в®иҐЁп¬ :
t(i) = t(i-1)*(-x*x)/d(i);
d(i) = 2i(2i+1); d(i) = d(i-1) + dd(i);
dd(i)= 8i-2; dd(i) = dd(i-1) + 8; }
var t, {б« Ј Ґ¬®Ґ}
w : Float;
i,d,dd: Integer;
begin {sint}
i := 0;
dd := -2; d := 0;
t := x; s := x;
w := -x*x;
{s=s(i) & t=t(i) & i=0}
while Abs(t) > eps do
begin { s=s(i) & t=t(i) & d=d(i) & dd=dd(i) & i<n }
i := i + 1;
dd := dd + 8;
d := d + dd;
t := t * w / d;
s := s + t;
{ s=s(i) & t=t(i) & d=d(i) & dd=dd(i) & i<=n }
end {while};
{ s = s(n) & t=t(n) }
n:=i
end{sint};
procedure Input(var eps: Float);
{ § Їа®б Ё ўлзЁб«ҐЁҐ Ї а ¬Ґва в®з®бвЁ eps,
ЇаЁ н⮬ ўў®¤Ёвбп 楫®Ґ p>0, в Є®Ґ, зв® Eps = 10^(-p)}
var p: Byte;
begin {Input}
WriteLn('Epsilon = 10^(-p); ‚ўҐ¤ЁвҐ p (p>0):'); ReadLn(p);
eps := exp(-p*ln(10.0));
end {Input};
begin {Main}
Assign(fout,'sinSngl.dat');
Rewrite(fout); Write(fout,'Single ... ');
Input(epsil); {ўў®¤ Ї а ¬Ґва в®з®бвЁ}
WriteLn(fout,'Epsilon = ',epsil:10);
x := Pi/6;
for l:=1 to 6 do
begin
Write(fout,'x=',x :10:7);
sint(x, epsil, s, n);
WriteLn(fout,' S(x)=',s :16,':: Sin x =',Sin(x) :16,' n=',n:4 );
x := x + 2.*Pi;
end {for};
Close(fout);
end.
S(n;x) = Sum (i:0..n) t(i;x),
Ј¤Ґ t(i;x) = (-)^i* x^(2i+1)/(2i+1)!
Ё n = Min [ k>=0 : Abs(t(k;x)) <= epsil ] }
type Float = Single;
var x, { аЈг¬Ґв }
epsil, {Ї а ¬Ґва в®з®бвЁ }
s : Float;
l, n : Integer;
fout : Text;
Procedure sint( x, eps: Float; var s: Float; var n: Integer);
{ аЈ (in) : x - аЈг¬Ґв дгЄжЁЁ,
eps - Ї а ¬Ґва в®з®бвЁ;
१ (out): s - § 票Ґ дгЄжЁЁ,
n - ®¬Ґа Ї®б«Ґ¤ҐЈ® б« Ј Ґ¬®Ј®,
Ґпў® § ¤ ў Ґ¬л© Є Є
n = Min [ k>=0 : Abs(t(k;x)) <= epsil ]
}
{ „ «ҐҐ ЇаЁ § ЇЁбЁ г⢥তҐЁ© ЁбЇ®«м§®ў л ®Ў®§ 票п:
s(j) = Sum (i:0..j) t(i) ,
t(i) = (-)^i * x^(2i+1)/(2i+1)! .
‚лзЁб«ҐЁп Їа®Ё§ў®¤пвбп Ї® ४гааҐвл¬ б®®в®иҐЁп¬ :
t(i) = t(i-1)*(-x*x)/d(i);
d(i) = 2i(2i+1); d(i) = d(i-1) + dd(i);
dd(i)= 8i-2; dd(i) = dd(i-1) + 8; }
var t, {б« Ј Ґ¬®Ґ}
w : Float;
i,d,dd: Integer;
begin {sint}
i := 0;
dd := -2; d := 0;
t := x; s := x;
w := -x*x;
{s=s(i) & t=t(i) & i=0}
while Abs(t) > eps do
begin { s=s(i) & t=t(i) & d=d(i) & dd=dd(i) & i<n }
i := i + 1;
dd := dd + 8;
d := d + dd;
t := t * w / d;
s := s + t;
{ s=s(i) & t=t(i) & d=d(i) & dd=dd(i) & i<=n }
end {while};
{ s = s(n) & t=t(n) }
n:=i
end{sint};
procedure Input(var eps: Float);
{ § Їа®б Ё ўлзЁб«ҐЁҐ Ї а ¬Ґва в®з®бвЁ eps,
ЇаЁ н⮬ ўў®¤Ёвбп 楫®Ґ p>0, в Є®Ґ, зв® Eps = 10^(-p)}
var p: Byte;
begin {Input}
WriteLn('Epsilon = 10^(-p); ‚ўҐ¤ЁвҐ p (p>0):'); ReadLn(p);
eps := exp(-p*ln(10.0));
end {Input};
begin {Main}
Assign(fout,'sinSngl.dat');
Rewrite(fout); Write(fout,'Single ... ');
Input(epsil); {ўў®¤ Ї а ¬Ґва в®з®бвЁ}
WriteLn(fout,'Epsilon = ',epsil:10);
x := Pi/6;
for l:=1 to 6 do
begin
Write(fout,'x=',x :10:7);
sint(x, epsil, s, n);
WriteLn(fout,' S(x)=',s :16,':: Sin x =',Sin(x) :16,' n=',n:4 );
x := x + 2.*Pi;
end {for};
Close(fout);
end.
Соседние файлы в папке Вычисление суммы ряда с заданной точностью