Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.09.2009, 22:24   #1
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию Delphi ряды

Дорогие форумчанины нужна ваша помощь...)))
Мне дали задание: необходимо вывести на экран таблицу значений функции Y(x) и ее разложения в ряд S(x). Сами формулы не могу записать, поэтому их прикрепила в файлик... Проблема в том, что различаются данные ряда и функции, причем очень сильно.... Я ее тестила при тех зачениях, которые там даны.
Помогите мне выяснить: это на самом деле погрешность или я где то ошиблась.... заранее спасибо
Вложения
Тип файла: doc В заданиях с.doc (21.5 Кб, 27 просмотров)
tanek вне форума Ответить с цитированием
Старый 26.09.2009, 22:29   #2
tanek
Форумчанин
 
Регистрация: 07.03.2009
Сообщений: 209
По умолчанию

вот исходный код и вложенный проект:
Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
end;

function factorial(N:integer):int64;
var
  i:integer;
  temp:int64;
begin
  temp:=1;
  for i := 1 to N do
    temp:=2*temp*i;
  factorial:=temp;
end;
function RaisingInExtent(N:integer):integer;
var
  temp:integer;
begin
  temp:=N mod 2;
  if temp=0 then
    RaisingInExtent:=1
  else
    RaisingInExtent:=-1;

end;
procedure TForm3.Button2Click(Sender: TObject);
 var Xn,Xk,h,Sx,Yx:extended;
     N,i,c:integer;
begin
  Xn:=StrToFloat(Edit1.Text);
  Memo1.Lines.Add(' Xn='+Edit1.Text);
  Xk:=StrToFloat(Edit2.Text);
  Memo1.Lines.Add(' Xk='+Edit2.Text);
  N:=StrToInt(Edit3.Text);
  Memo1.Lines.Add(' N='+Edit3.Text);

  h:=(Xn-Xk)/10;
  repeat
     Sx:=1;
     for i := 1 to N do
       Sx:=Sx+((RaisingInExtent(i)*(2*sqr(i)+1)*Exp(2*i*Ln(Xn)))/factorial(i));
     Yx:= (1-sqr(Xn)/2)*cos(Xn)-Xn/2*sin(Xn);
     Memo1.Lines.Add('при x='+FloatToStrF(xn,ffFixed,6,2)+'   S(x) ='
                                   +FloatToStrF(Sx,ffFixed,20,18)+
                                   '     Y(x)='+FloatToStrF(Yx,ffFixed,20,18));
         Xn:=Xn-h;
  until xn>xk;

end;


end.
Вложения
Тип файла: rar программа.rar (178.9 Кб, 21 просмотров)
tanek вне форума Ответить с цитированием
Старый 27.09.2009, 04:38   #3
megachuhancer
Форумчанин
 
Регистрация: 16.04.2009
Сообщений: 247
По умолчанию

Нашел ошибку. С чего вы взяли, что 2(n!) и (2n)! - это одно и то же?!

Пускай функция factorial честно считает именно факториал, а не факториал * 2. А вызывайте её с параметром 2 * i. Вот так.

Код:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm3 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Memo1: TMemo;
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}
procedure TForm3.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
end;

function factorial(N:integer):int64;
var
  i:integer;
  temp:int64;
begin
  temp:=1;
  for i := 1 to N do
    temp:=temp*i; //вместо temp:=2 * temp * i;
  factorial:=temp;
end;
function RaisingInExtent(N:integer):integer;
var
  temp:integer;
begin
  temp:=N mod 2;
  if temp=0 then
    RaisingInExtent:=1
  else
    RaisingInExtent:=-1;

end;
procedure TForm3.Button2Click(Sender: TObject);
 var Xn,Xk,h,Sx,Yx:extended;
     N,i,c:integer;
begin
  Xn:=StrToFloat(Edit1.Text);
  Memo1.Lines.Add(' Xn='+Edit1.Text);
  Xk:=StrToFloat(Edit2.Text);
  Memo1.Lines.Add(' Xk='+Edit2.Text);
  N:=StrToInt(Edit3.Text);
  Memo1.Lines.Add(' N='+Edit3.Text);

  h:=(Xn-Xk)/10;
  repeat
     Sx:=1;

     for i := 1 to N do
       Sx:=Sx+((RaisingInExtent(i)*(2*sqr(i)+1)*Exp(2*i*Ln(Xn)))/factorial(2 * i));

       Yx:= (1-sqr(Xn)/2)*cos(Xn)-Xn/2*sin(Xn);

       Memo1.Lines.Add('при x='+FloatToStrF(xn,ffFixed,6,2)+'   S(x) ='
                                   +FloatToStrF(Sx,ffFixed,20,18)+
                                   '     Y(x)='+FloatToStrF(Yx,ffFixed,20,18));
       Xn := Xn - h;

  until Xn > Xk;

end;


end.

Последний раз редактировалось megachuhancer; 27.09.2009 в 13:03.
megachuhancer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ряды в диаграмме maxic Microsoft Office Excel 5 26.05.2009 14:44
Ряды тейлора STS_1991 Помощь студентам 2 12.05.2009 15:52
pascal ряды world12_tk Помощь студентам 1 03.05.2009 11:48
Работа по Паскалю, Ряды Тэйлора. Dexterello Помощь студентам 4 28.11.2008 05:53
Задача на ряды Till Паскаль, Turbo Pascal, PascalABC.NET 6 24.06.2008 09:21