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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.02.2010, 19:13   #1
Arzamaks
Пользователь
 
Регистрация: 23.11.2009
Сообщений: 17
Восклицание Вычисление определенного интеграла с заданной точностью

Задача: Составить программу измерения определенного интеграла от a до b,f(x) = x^5*e^-x^2 .
Задачу решаю с помощью формулы трапеций, но у меня упорно не получается исправить ошибки...

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Edit4: TEdit;
    Label5: TLabel;
    Label6: TLabel;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit9: TEdit;
    Label7: TLabel;
    Label4: TLabel;
    Label8: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
 { i: integer;
  s,j: real; }

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
a,b: real;
J1, J2, eps, del : double;
n: integer;
Function f(x:real):double;
begin f:= exp(5*ln(x)) * exp((-(x*x))*ln(x));
end;
function J(a,b:double; n:integer):real;
var h,s:double;
i: integer;
begin
h:= (b-a)/n; s:=0;
for i:= 1 to n-1 do
s:= 2*s + f(a) + f(b);
s:= (h/2) * s;
end;
begin
a:= strtofloat(Edit1.text);
b:= strtofloat(Edit2.text);
eps:= strtofloat(Edit5.text);
n:= strtoint(Edit4.text);
repeat
J1 := J(a,b,n);
J2 := J(a,b,2*n);
del:= abs((J1-J2)/J2);
n:=2*n;
until (del<eps) ;
Edit6.text:=floattostr(s);
Edit7.text:=floattostr(J2);
Edit8.text:=inttostr(n div 2);
Edit9.text:=floattostr(del);
end;
end.
Arzamaks вне форума Ответить с цитированием
Старый 19.02.2010, 08:43   #2
Arzamaks
Пользователь
 
Регистрация: 23.11.2009
Сообщений: 17
По умолчанию

Я понимаю что на форуме рассматривалось уже куча примеров с вычислением определенных интегралов, но ошибку я всё равно не могу найти!
Arzamaks вне форума Ответить с цитированием
Старый 19.02.2010, 09:03   #3
Google2010
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 316
По умолчанию

функция вычисления определенного интеграла методом трапеций
Код:
function Trap( x1,x2,e:real):real;//
var
  xx1,xx2,xx3,i:real;
  c:longint;
begin
  i:=0;
  for c:=1 to round(abs(x2-x1)/e) do begin
    xx1:=F(x1+c*e);
    xx2:=F(x1+c*e+e);
    if xx2>xx1 then xx3:=xx1 else xx3:=xx2;
    i:=i+abs(xx2-xx1)*e+abs(xx3)*e;
  end;
 result:=i;
end;
ну и ваша функция
Код:
Function f(x:real):double;
begin 
f:=sqr(sqr(x))*x*exp(-sqr(x));
end;

Последний раз редактировалось Google2010; 19.02.2010 в 09:42.
Google2010 вне форума Ответить с цитированием
Старый 19.02.2010, 09:09   #4
Arzamaks
Пользователь
 
Регистрация: 23.11.2009
Сообщений: 17
По умолчанию

эм.. А xx1,xx2,xx3 - это что? просто переменные?
function Trap() - вообще не знаю что такое трап..)
Конечно спасибо, сейчас посижу подумаю, но желательно увидеть предложения по исправлению моего кода)
Arzamaks вне форума Ответить с цитированием
Старый 19.02.2010, 09:11   #5
Google2010
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 316
По умолчанию

Цитата:
Trap
это просто название вместо вашей J
xx1,xx2,xx3 - это просто переменные
x1,x2- это промежуток [a,b] соответственно;
e-точность
Google2010 вне форума Ответить с цитированием
Старый 19.02.2010, 09:34   #6
Arzamaks
Пользователь
 
Регистрация: 23.11.2009
Сообщений: 17
По умолчанию

Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Function f(x:real):double;
begin 
f:=sqr(sqr(x))*x*exp(-sqr(x));
end;
x1:= strtofloat(Edit1.text);
x2:= strtofloat(Edit2.text);
e:= strtofloat(Edit3.text);
function Trap(var x1,x2,e:real):real;
var
  xx1,xx2,xx3,i:real;
  c:longint;
begin
  i:=0;
  for c:=1 to round(abs(x2-x1)/e) do begin
    xx1:=F(x1+c*e);
    xx2:=F(x1+c*e+e);
    if xx2>xx1 then xx3:=xx1 else xx3:=xx2;
    i:=i+abs(xx2-xx1)*e+abs(xx3)*e;
  end;
 result:=i;
 Edit4.text:=floattostr(result);
end;
end;
end.
Я так понял должно выгладить примерно так?? Но выдает ошибку:Declaration expected but indentifier 'x1' found
Arzamaks вне форума Ответить с цитированием
Старый 19.02.2010, 09:46   #7
Google2010
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 316
По умолчанию

извините, а вы код из поста #1 сами писали?
если да-то чего тупим то?
Код:
Function f(x:real):double;
begin 
f:=sqr(sqr(x))*x*exp(-sqr(x));
end;
function Trap( x1,x2,e:real):real;//
var
  xx1,xx2,xx3,i:real;
  c:longint;
begin
  i:=0;
  for c:=1 to round(abs(x2-x1)/e) do begin
    xx1:=F(x1+c*e);
    xx2:=F(x1+c*e+e);
    if xx2>xx1 then xx3:=xx1 else xx3:=xx2;
    i:=i+abs(xx2-xx1)*e+abs(xx3)*e;
  end;
 result:=i;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,eps: real;
begin
a:= strtofloat(Edit1.text);
b:= strtofloat(Edit2.text);
eps:= strtofloat(Edit5.text);
Edit4.text:=floattostr(trap(a,b,eps));
end;
Google2010 вне форума Ответить с цитированием
Старый 19.02.2010, 09:54   #8
Arzamaks
Пользователь
 
Регистрация: 23.11.2009
Сообщений: 17
По умолчанию

Ну с горем пополам сам с тетрадкой! Ну то что мои знания в Delphi не блестят - это не спорю!
и всё равно не дает скомпилировать - Declaration expected but end of file found
Arzamaks вне форума Ответить с цитированием
Старый 19.02.2010, 10:00   #9
Google2010
Форумчанин
 
Регистрация: 16.02.2010
Сообщений: 316
По умолчанию

у меня все работает))
вот полный код юнита
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    edt1: TEdit;
    edt2: TEdit;
    edt3: TEdit;
    edt4: TEdit;
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Function f(x:real):double;
begin 
f:=sqr(sqr(x))*x*exp(-sqr(x));
end;
function Trap( x1,x2,e:real):real;//
var
  xx1,xx2,xx3,i:real;
  c:longint;
begin
  i:=0;
  for c:=1 to round(abs(x2-x1)/e) do begin
    xx1:=F(x1+c*e);
    xx2:=F(x1+c*e+e);
    if xx2>xx1 then xx3:=xx1 else xx3:=xx2;
    i:=i+abs(xx2-xx1)*e+abs(xx3)*e;
  end;
 result:=i;
end;
procedure TForm1.Btn1Click(Sender: TObject);
var
a,b,eps: real;
begin
a:= strtofloat(Edt1.text);
b:= strtofloat(Edt2.text);
eps:= strtofloat(Edt3.text);
Edt4.text:=floattostr(trap(a,b,eps));
end;

end.
Google2010 вне форума Ответить с цитированием
Старый 19.02.2010, 10:09   #10
Arzamaks
Пользователь
 
Регистрация: 23.11.2009
Сообщений: 17
По умолчанию

Эт у меня видно чего то с делфи, потому что через кучу ошибок, через пень колоду, получилось, посчитал всё прально!)
Спасибо Вам огромное!))
Arzamaks вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление определенного интеграла методом трапеций Alexander886 Помощь студентам 0 06.12.2009 20:43
Блок-схема алгоритма вычисления определенного интеграла kbreyz Общие вопросы C/C++ 1 16.06.2009 22:14
Вычисление функции с заданной точностью. Absent Помощь студентам 1 21.11.2008 13:30
Составить алгоритм и программу вычисления определенного интеграла triston Помощь студентам 3 18.11.2008 18:35