Помогите, пожалуйста, не первый день уже воюю. Мое задание: Вывести на экран таблицу значений функции y(x) и ее разложения в ряд s(x) для x изменяю-щихся от xn до xk с заданным количеством шагов M ( h = (Xn -Xk)/M) и точностью e (близость значе-ний S(x) и Y(x) во всем диапазоне значений x указывает на правильность вычисления S(x) и Y(x)). При выполнении задания S(x) и Y(x) поместить в функции. В местах возможного возникновения ошибок использовать конструкции для обработки исключительных ситуаций.  Непонимаю зачем тут точность(е) и куда ее пихать. Мне бы только код где считается эта таблица. Вот что я напилил: | Код | unit Unit1;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Math;
type TmainForm = class(TForm) edit_m: TEdit; label_Xn: TLabel; label_Xk: TLabel; label_m: TLabel; label_e: TLabel; Memo_Result: TMemo; runButton: TButton; buttonExit: TButton; procedure FormCreate(Sender: TObject); procedure runButtonClick(Sender: TObject); procedure buttonExitClick(Sender: TObject);
private { Private declarations } end; var mainForm: TmainForm; const Xmin : extended = 0.1; //Поменять для др. вар. Xmax : extended = 0.7; //Поменять для др. вар. e : extended = 0.001; //Поменять для др. вар. implementation {$R *.dfm}
procedure TmainForm.FormCreate(Sender: TObject); begin label_Xn.Caption := 'Xn = ' + FloatToStr(Xmin); label_Xk.Caption := 'Xk = ' + FloatToStr(Xmax); edit_m.Text := ''; // label_e.Caption := 'e = ' + FloatToStr(e); end;
procedure drawTableHeader(); begin mainForm.Memo_Result.Clear; mainForm.Memo_Result.Lines.Add('------------------------------------'); mainForm.Memo_Result.Lines.Add('| x | Y(x) | S(x) |'); mainForm.Memo_Result.Lines.Add('------------------------------------'); end;
function getStep(Xn, Xk: extended; m: integer): Extended; var step: Extended; begin step := (Xk - Xn) / m; result := step; end;
function factorial(n: integer):Integer; begin result := n; while n > 0 do begin result := result * n; Dec(n); //декремент end; end;
function calculateY(x: Extended): Extended; begin result := (1 + (2*sqr(x))) * exp(sqr(x)); //Поменять для др. вар. // result := exp(x/2); end;
function calculateS(x: extended; n: integer): Extended; var p: extended; begin result := (((2*n + 1)) * (Power(x, 2*n)))/factorial(n); //Поменять для др. вар. //result := Power(2*x, n) / factorial(n); end;
function getString(Xn, Y, S: extended):String; begin result := '| ' + FloatToStr(Xn) + '|' + FloatToStr(Y) + '|' + FloatToStr(S) + '|'; end;
procedure run(); var m, counter: integer; var resultY, resultS, p, y, Sum: extended; var Xn:extended; var Xk:extended; begin Xn:= Xmin; Xk:= Xmax; m := StrToInt(mainForm.edit_m.Text); drawTableHeader(); while Xn <= Xk+getStep(Xmin, Xmax, m)/2 do begin Sum := 1; counter:=1; while counter <= m do begin; Sum := Sum + calculateS(Xn, counter); Inc(counter); end; mainForm.Memo_Result.Lines.Add(getString(Xn, calculateY(Xn), Sum)); Xn := Xn + getStep(Xmin, Xmax, m); end; end;
procedure TmainForm.runButtonClick(Sender: TObject); begin run(); end;
procedure TmainForm.buttonExitClick(Sender: TObject); begin close; end;
end.
|
Это сообщение отредактировал(а) Yaroma11 - 28.1.2014, 23:15
Присоединённый файл ( Кол-во скачиваний: 4 )
Снимок.JPG 17,22 Kb
|