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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2011, 13:02   #1
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию ДИФФЕРЕНЦИРОВАНИЕ И ИНТЕГРИРОВАНИЕ

Доброго времени суток!
В институте задали написать программу, которая:
1.Численно посчитать первую и вторую производную функции, заданной таблично.
2. Вычислить с помощью формулы прямоугольников определенный интеграл, полагая n = 4.
3. Вычислить с помощью формулы трапеций определенный интеграл.

Написала код:
Код:
unit Unit1;

interface

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

type
 ta=array of real;
  TForm1 = class(TForm)
    LabeledEdit1: TLabeledEdit;
    LabeledEdit2: TLabeledEdit;
    LabeledEdit3: TLabeledEdit;
    Button1: TButton;
    StringGrid1: TStringGrid;
    LabeledEdit4: TLabeledEdit;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure LabeledEdit3Change(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  New2:real;
  a,b,xn:real;
  n:integer;
  x,y:ta;
implementation

{$R *.dfm}

function f(x:real):real;
begin
result:=(sqr(x)+0.5)/sqrt(sqr(x)+1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var h:real; i,j:integer;
begin
 a:=StrTofloat(labelededit1.Text);
 b:=StrTofloat(labelededit2.Text);
x[0]:=a;
x[n]:=b;
y[0]:=f(x[0]);
h:=(b-a)/(n-1);
for i:=1 to n do
 x[i]:=x[i-1]+h;
for i:=0 to n do
begin
 y[i]:=f(x[i]);
 stringgrid1.Cells[i,0]:=floattostrf(x[i],fffixed,10,2);
 stringgrid1.Cells[i,1]:=floattostrf(y[i],fffixed,10,2);
end;
end;

procedure TForm1.LabeledEdit3Change(Sender: TObject);
begin
n:=StrToInt(labelededit3.Text);
SetLength(x,n+1);
SetLength(y,n+1);
WITH StringGrid1 DO
begin
RowCount:=(2);
ColCount:=(n);
end;
end;

function NEW1 ({key:integer;} X,Y: ta;n:integer;h:real;Xn:REAL):REAL;
VAR I,J,k,key: INTEGER;
BEGIN
	I := 2;
  while i<= 5 do
  begin
    if xn<x[i] then
    begin
    k:=i;
    i:=6;
    end
     else i:=i+1;
  end;
  if xn<(x[k-1]+h/4)then
  begin
  j:= k-1;
  key:=1;
  if j=1 then key:=4;
  end
   else
    if xn>(x[k-1]+3*h/4) then
    begin
    j:= k;
    key:=1;
    if j=5 then key:=5 ;
    end
     else
    begin
    j:=k-1;
    key:=3;
    end;

 CASE KEY OF
  1: NEW1 := (1/(2*h))*(y[j+1]-y[j-1]);//Стерлинг
  3: New1 := (1/h*(y[j+1]-y[j]));//бессель
  4: NEW1 := (1/(2*h))*(-3*y[j]+4*y[j+1]-y[j+2]);//Ньютон1
  5: NEW1 := (1/(2*h))*(3*y[j]-4*y[j-1]+y[j-2]);//Ньютон2
	END;
  NEW2 := (1/(h*h))*(y[j+1]-2*y[j]+y[j-1]);// 2я производная
  END;

procedure TForm1.Button2Click(Sender: TObject);
var a,b,dx,x,y: real;
    n,i: integer;
    XX,YY:ta;
    h,xn:real;
begin
  try
 a:=StrTofloat(labelededit1.Text);
 b:=StrTofloat(labelededit2.Text);
 xn:= StrToFloat(labelededit4.Text);
 except
  ShowMessage('Неверные данные');
  exit;
  end;
  dx := (b-a)/n;
 //Площадь по формуле левых прямоугольников:
 y := 0; x := a;      {x = a = X0}
 For i:=1 to n do {x < Xn}
  begin
  y := y + f(x);
  x := x + dx;        {x = X0, X1, X2 ... Xn-1}
 end;
 y := y * dx;
  Form1.Edit1.Text := FloatToStrF(y,ffFixed,10,3);

 //Площадь по формуле правых прямоугольников:
 y := 0; x := a + dx;  {x = X1}
 For i:=1 to n do {x <= Xn}
 begin
  y := y + f(x);
  x := x + dx;         {x = X1, X2, X3 ... Xn}
 end;
 y := y * dx;
 Form1.Edit2.Text := FloatToStrF(y,ffFixed,10,3);

  //Площадь по формуле середенных прямоугольников:
 y := 0; x := a + dx/2;  {x = X1}
 For i:=1 to n do
 begin
  y := y + f(x);
  x := x + dx;         {x = X1, X2, X3 ... Xn}
 end;
 y := y * dx;
 Form1.Edit3.Text := FloatToStrF(y,ffFixed,10,3);

 //Площадь по формуле трапеций:
 y := 0; x := a + dx;  {x = X1}
 while x < b do begin  {x < Xn}
{ For i:=1 to n do
 begin}
  y := y + f(x);
  x := x + dx;         {x = X1, X2, X3 ... Xn-1}
 end;
 y := (y + (f(a)+f(b))/2) * dx;
 Form1.Edit4.Text := FloatToStrF(y,ffFixed,10,3);

For i:=1 to 5 do
  begin
  xx[i]:=a+h*(i-1);
  yy[i]:= f(xx[i]);
  end;

  Form1.Edit5.Text := FloatToStrF(new1(XX,YY,n,h,xn),ffFixed,7,3);
 //Вторая производная
 Form1.Edit6.Text := FloatToStrF(new2,ffFixed,7,3);
  end;

end.
Ошибок нет. Только предупреждения. Но программа валится, вообще отказываясь что либо считать.
Помогите, пожалуйста. Очень нужно!!!
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Старый 10.12.2011, 21:53   #2
Lisёноk
Пользователь
 
Регистрация: 08.03.2010
Сообщений: 75
По умолчанию

Неужели никто не может мне помочь? Мне очень надо!! Я проболела долго, а сроки сдачи уже поджимают! Помогите, пожалуйста!!
Я самый порочный ангел и самый безгрешный демон...
Lisёноk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дифференцирование многочлена Лагранжа(Pascal) Shurei Помощь студентам 3 05.12.2011 14:49
Численное дифференцирование ($$$) FrankZane Фриланс 1 22.08.2011 09:28
дифференцирование Falkone Помощь студентам 0 01.06.2010 13:50
класс Символьное дифференцирование patriarch Помощь студентам 1 23.11.2009 11:06