Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Ряд Тейлора (http://www.tehnari.ru/f41/t51134/)

Tymvie 01.05.2011 22:36

Ряд Тейлора
 
Вложений: 1
Помогите плиз. Язык - Паскаль

Замечание:
Правила форума, п. 3.6
Цитата:

Каждый участник имеет один аккаунт на форуме. Регистрация дополнительных аккаунтов запрещена.
Поэтому:
1. "Пользователь" VizPark заблокирован.
2. Тема-дубль удалена.
3. Вам делается первое, оно же последнее, предупреждение о недопустимости подобного.
Модератор.

Vladimir_S 02.05.2011 09:22

Так, ну прежде всего, можете сказать, что тот, кто составлял это задание - полный профан в математике, придурок и неуч, поскольку функция ArTh (ареатангенс) определена ТОЛЬКО в диапазоне |x|<1, а приведенный ряд - это разложение функции ArCth (ареакотангенс), действительно определенной только при |x|>1. В программе предусмотрена проверка правильности ввода исходных данных, а также в четвертой колонке для сравнения выводится точное значение функции ареакотангенс. Точность задана в виде константы.
Код:

CONST
 Eps=0.0001;
VAR
 SUM,X,Xbeg,Xfin,dX:REAL;
 N,NX:WORD;
 i:Integer;

FUNCTION ArCth(Xa:Extended):Extended;
BEGIN
    ArCth:=(1/2)*Ln((Xa+1)/(Xa-1));
END;


PROCEDURE SUMS(Xs:REAL; Var S:REAL; Var Ns:WORD);
 VAR
  a:REAL;
 Begin
  a:=1/Xs;
  S:=a;
  Ns:=1;
  Repeat
  a:=a/sqr(Xs)*Ns/(Ns+2);
  S:=S+a;
  Inc(Ns,2);
  Until Abs(a)<Eps;
 End;

Function B:boolean;
begin
 B:=((Xbeg>1) and (Xfin>Xbeg) and (dX>0)) or
    ((Xbeg<-1) and (Xfin<-1) and (Xfin>Xbeg) and (dX>0)) or
    ((Xbeg<-1) and (Xfin<Xbeg) and (dX<0));
end;

BEGIN
 WriteLn('If X range is POSITIVE, then Xbeg must be >1,');
 WriteLn('Xfin must be >Xbeg and dX>0');
 WriteLn('If X range is NEGATIVE, then Xbeg and Xfin must be <-1,');
 WriteLn('in case of dX>0 Abs(Xfin) must be <Abs(Xbeg),');
 WriteLn('whereas for dX<0 Abs(Xfin) must be >Abs(Xbeg)');
 WriteLn;
 Repeat
  Write('Xbeg= ');
  ReadLn(Xbeg);
  Write('Xfin= ');
  ReadLn(Xfin);
  Write('dX= ');
  ReadLn(dX);
  If B=false then
  WriteLn('Incorrect values! Repeat the input.');
 Until B;
 NX:=Round((Xfin-Xbeg)/dX);
 WriteLn('        Results of calculation:');
 WriteLn('    X          SUM          N      ArCth(X)');
 WriteLn;
 For i:=0 to NX do
  begin
  X:=Xbeg+dX*i;
  SUMS(X,SUM,N);
  WriteLn(X:8:5,'    ',SUM:9:6,'    ',N:3,'    ',ArCth(X):9:6);
  end;
 ReadLn;
END.



Часовой пояс GMT +4, время: 19:58.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.