Вычислить сумму и найти число слагаемых, которые вошли в сумму - Free Pascal (960)
Формулировка задачи:
Вычислить сумму и найти число слагаемых, которые вошли в сумму. Процесс вычислений требуется закончить, когда очередное слагаемое по модулю окажется меньше . (((-1)^n)(n^2))/n!, n=1,2,...
p.s. такой способ не подходит:
Надо сделать по следующему примеру:
(-1)^n*(((x^n)*cosn)/(n+1)!) Выводим =*(/(k+1)!). Тогда выводим =... после чего /=-x/(k+1). В итоге z=(-x/(k+1))z.
uses crt;
function fact(b : integer) : longint;
var i,st : longint;
begin
st:=1;
for i:=2 to b do st:=st*i;
fact:=st;
end;
var x,s,e : real;
n,m,k : integer;
begin
clrscr;
repeat
write('Vvedite x: ');
readln(x);
until x<>0;
repeat
write('Vvedite EPSILON: ');
readln(e);
until e>0;
n:=1;
s:=0;
while abs(n*n/fact(n))>=e do
begin
if ((n+1) mod 2=0) then
s:=s-n*n/fact(n) else
s:=s+n*n/fact(n);
n:=n+1;
end;
writeln('Summa ravna: ',s:5:5);
writeln('Kolichestvo chlenov: ',n-1);
readkey;
end.k:=1; S:=0; A:=1, Z:=1; while abs(a)>eps do begin s:=s+a; k:=k+1; z:=-z*x/(k+1); a:=z*cos(k) end;
Решение задачи: «Вычислить сумму и найти число слагаемых, которые вошли в сумму»
textual
Листинг программы
k:=1; S:=0; Z:=-1; while abs(z)>eps do begin s:=s+z; k:=k+1; z:=-z*k/((k-1)*(k-1)); end;
Объяснение кода листинга программы
- Инициализируются три переменные: k=1, S=0, Z=-1.
- Запускается цикл while, который выполняется до тех пор, пока абсолютное значение Z больше заданной точности eps.
- Внутри цикла к сумме S прибавляется значение переменной Z, а затем переменная k увеличивается на единицу.
- Значение переменной Z обновляется в соответствии с формулой Z = -Z k / ((k-1) (k-1)).
- После окончания цикла выводится значение переменной S.