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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2010, 21:11   #1
Baburek
Форумчанин
 
Аватар для Baburek
 
Регистрация: 12.12.2010
Сообщений: 205
По умолчанию Нахождение интеграла

Использую метод трапеции. циклится. Помогите пожалуйста разобраться. Прикладываю проект.

integral.rar

Код:
unit zadach2;

interface

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

type
  TForm1 = class(TForm)
    Button3: TButton;
    edt1: TEdit;
    edt2: TEdit;
    edt3: TEdit;
    Label1: TLabel;
    lbl1: TLabel;
    ComboBox: TComboBox;
    mmo1: TMemo;
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button3Click(Sender: TObject);
var
x,k,e,h,a,b,sum,q,Newton,nulx,nulk:real;
N,dvaN,i:integer;

Function F(x:real):real;
begin
F:=sqrt(2*x*x+3);
end;

Function P(k:real):real;
begin
P:=sqrt(2*k*k+3);
end;


begin
a:=StrToFloat(edt1.Text); // пределы
b:=StrToFloat(edt2.Text);
e:=StrToFloat(edt3.Text); // искомая точность
N:=2;
dvaN:=N*2;
Repeat
Inc(N);
sum:=0;
Newton:=0;
h:=(b-a)/N;
For i:=1 to N-1 do begin // вычисление интеграла по N разбиениям
x:=a+h*i;
nulx:=a+h*(i-1);
end;
h:=(b-a)/(2*N);
For i:=1 to dvaN do begin // вычисление интеграла по 2N разбиениям
nulk:=a+h*(i-1);
k:=a+h*i;
end;
sum:=sum+(h*((F(nulx)+F(x))/2));
Newton:=Newton+(h*((P(nulk)+P(k))/2));
q:=Abs(Newton-sum);
mmo1.Lines.Add(FloatToStr(q));

Until Abs(Newton-sum)<e;
Label1.Caption:=FloatToStr(sum);
lbl1.Caption:=FloatToStr(h);
end;
end.
Baburek вне форума Ответить с цитированием
Старый 28.12.2010, 12:15   #2
Greek9000
Форумчанин
 
Регистрация: 01.09.2009
Сообщений: 151
По умолчанию

не совсем понятно, почему у Вас цикл repeat ... until, ведь по указанной точности сразу ясно, на сколько интервалов надо разбить заданный диапазон. Поэтому тут нужен цикл for.
Кстати, рекомендую расчёт площади одного интервала вынести в отдельную функцию. Тогда восприятие алгоритма сильно упростится.
Получится что-то типа...
Код:
s := 0.0; // Текущее значение площади (интеграла)
x := x1; // Начало диапазона
dlt := dlt1; // Точность (шаг приращения ф-ии)
//... рассчитываем кол-во шагов N по длине интервала и точности
for i:=1 no N do begin
  // TrapSquare - функция расчёта площади трапеции
  s := s + TrapSquare(x); 
  x := x+dlt;
end;
Greek9000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расчет интеграла Seferus Общие вопросы C/C++ 2 08.12.2010 17:43
Решение интеграла A_r_r_a_y Помощь студентам 2 09.03.2010 22:02
Функции интеграла max38934 Общие вопросы Delphi 5 26.05.2009 14:55
Взятие интеграла max38934 Общие вопросы Delphi 2 11.05.2009 16:03