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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.05.2017, 10:38   #1
xnnrzn
 
Регистрация: 15.05.2017
Сообщений: 8
По умолчанию Интегрирование методом трапеций

Здравствуйте. Помогите пожалуйста грамотно составить метод трапеций с заданным количеством точек интегрирования для определенного интеграла. Нужно еще построить график (как понял - после подсчета). Почти все действия подписаны. В мемо должны выводиться промежуточные вычисления (походу не то выводит). Вот что у меня получилось. Интеграл считает естественно не правильно. Первая форма содержит метод и по мелочи. Вторая содержит график.
Код:
unit Unit2;

interface

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

type
   TIntFunc = function(X: Double): Double;
  TForm2 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Image1: TImage;
    Edit3: TEdit;
    Edit4: TEdit;
    Edit5: TEdit;
    Edit6: TEdit;
    Edit7: TEdit;
    Edit8: TEdit;
    Edit10: TEdit;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label6: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Edit9: TEdit;
    Label17: TLabel;
    Label18: TLabel;
    Panel1: TPanel;
    Edit11: TEdit;
    Edit12: TEdit;
    N6: TMenuItem;
    SaveDialog1: TSaveDialog;
    Memo1: TMemo;
    Edit13: TEdit;
    Label19: TLabel;
    N7: TMenuItem;
    OpenDialog1: TOpenDialog;
    procedure N4Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N3Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;
  buttonexit:integer;
  i,eps,a1,a2,a3,a0,b1,b2,b3,b4,b5,b0,x,int1,int2:real;
implementation

uses Unit4;

{$R *.dfm}
function Fx(x:real):real;//функция
begin
  Fx:=(a3*x*x*x*x*x+a2*x*x*x+a1*x*x+a0)/( b3*x*x*x*x*x*x*x*x+b2*x*x*x*x*x*x*x+b3*x*x*x*x*x*x+b2*x*x*x*x+b1*x+b0);
end;
procedure Metod_Trapeciy;//метод
var
x1,x2,x3:real;
c:longint;
begin
  i:=0;
  for c:=1 to round(abs(int2-int1)/eps) do
    begin
      x1:=Fx(int1+c*eps);
      x2:=Fx(int1+c*eps+eps);
      if x2>x1 then begin x3:=x1 end else begin x3:=x2;
      i:=i+abs(x2-x1)*eps+abs(x3)*eps;
      Form2.Memo1.lines.add(floattostr(i));
      end;
    end;
end;
procedure TForm2.N2Click(Sender: TObject); //перевод
begin
a1:=strtofloat(Edit1.Text);
a2:=strtofloat(Edit2.Text);
a3:=strtofloat(Edit3.Text);
a0:=strtofloat(Edit4.Text);
b1:=strtofloat(Edit5.Text);
b2:=strtofloat(Edit6.Text);
b3:=strtofloat(Edit7.Text);
b4:=strtofloat(Edit8.Text);
b5:=strtofloat(Edit9.Text);
b0:=strtofloat(Edit10.Text);
int1:=strtofloat(Edit11.Text);
int2:=strtofloat(Edit12.Text);
eps:=StrToFloat(Edit13.Text);
Metod_Trapeciy;
Label4.Caption:=FloatToStr(i);
end;
procedure TForm2.N3Click(Sender: TObject);
begin
Form4.Show;
end;

procedure TForm2.N4Click(Sender: TObject);//новый расчет
begin
Form2.Repaint;
//Form2.Close;
end;
procedure TForm2.N5Click(Sender: TObject);//выход
begin
buttonexit := MessageDlg('Выйти без сохранения?',MtConfirmation, mbYesNo, 0);
  if buttonexit = mrYes then begin
  Form2.close;
  end;
end;

procedure TForm2.N6Click(Sender: TObject);//сохранение
var
  f:textFile;      //текстовый файл
begin
  savedialog1.InitialDir:='d:\';  //начальная директория
  savedialog1.Filter:='Текстовые файлы |*.txt'; //фильтр типов файлов
  if savedialog1.Execute then  //вызов диалога
  begin
    assignFile(f,savedialog1.FileName);  //создание файла
    rewrite(f);
      //Добавление строк в файл
    writeln(f,'Результаты:');
    writeln(f,'');
    writeln(f,'Исходные данные:');
    writeln(f,'a1=',Edit1.Text);
    writeln(f,'a2=',Edit2.Text);
    writeln(f,'a3=',Edit3.Text);
    writeln(f,'a0=',Edit4.Text);
    writeln(f,'b1=',Edit5.Text);
    writeln(f,'b2=',Edit6.Text);
    writeln(f,'b3=',Edit7.Text);
    writeln(f,'b4=',Edit8.Text);
    writeln(f,'b5=',Edit9.Text);
     writeln(f,'b0=',Edit10.Text);
    writeln(f,'Нижний предел интегрирования:',Edit2.Text);
    writeln(f,'Верхний предел интегрирования:',Edit1.Text);
    writeln(f,'eps=',Edit13.Text);
    writeln(f,'');
    writeln(f,'РЕЗУЛЬТАТ:');
    writeln(f,'Интеграл равен ',Label4.Caption);
    closeFile(f);   //закрытие файла
    memo1.Lines.add('');
     memo1.Lines.add('Данные вычислений записаны в файл '+savedialog1.FileName);
  end;
end;
procedure TForm2.N7Click(Sender: TObject);//загрузка
var
f:File;
s:string;
SaveList:TStrings;
cl:integer;
 function LoadMemo(Inp: TMemo; _c: integer): integer;
  var
    i, LinesCount: integer;
  begin
    inp.Clear;
    LinesCount := strtoint(SaveList[_c]) - 1;
    for i := _c to _c + LinesCount do
      Inp.Lines.Add(SaveList[i + 1]);
      result:=Inp.Lines.Count+1;
  end;
begin
  if OpenDialog1.Execute then   begin
  s:=OpenDialog1.FileName;
  Assignfile(f,s);
  Reset(f,1);
  SaveList := TStringList.Create;
  SaveList.LoadFromFile('FileName');
  cl:=LoadMemo(memo1, 0);
  LoadMemo(memo1, cl);
  SaveList.Free;
  CloseFile(f);
  Label4.Caption:='Результат';
    end;
end;
end.
График
Код:
unit Unit4;

interface

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

type
  TForm4 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}
procedure TForm4.Button1Click(Sender: TObject);//график 
begin
Form4.Canvas.pen.style:=pssolid;;
Form4.Canvas.font.color:=clblack;
Form4.Canvas.pen.color:=clblack;
Form4.Canvas.brush.color:=clblack;
Form4.Canvas.moveto(240,176);
Form4.Canvas.lineto(0,176);
Form4.Canvas.moveto(240,176);
Form4.Canvas.lineto(472,176);
Form4.Canvas.moveto(240,176);
Form4.Canvas.lineto(240,0);
Form4.Canvas.moveto(240,176);
Form4.Canvas.lineto(240,344);




end;
procedure TForm4.Button2Click(Sender: TObject);//закрытие формы
begin
Form4.Close;
end;

end.
Нашёл в интернете такой способ реализации. Выглядит куда лучше. Может лучше с ним попробовать?
Код:
{Вычисление определенного интеграла по формуле трапеций}
Function Integral (a,b:real; {Пределы интегрирования}
n : integer; {Число шагов}
f : mpd_func): real; {Имя функции, вычисляющей
подынтегральное выражение}
var
x, h, sum : real; i : integer;
begin
h := (b-a)/n;
sum := 0.0;
for i := 1 to n-1 do begin
x := a+i*h;
sum := sum + f(x);
end;
integral := h*((f(a)+f(b))/2+sum);
end {Integral};
xnnrzn вне форума Ответить с цитированием
Старый 15.05.2017, 10:39   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Дык попробуй и сравни. В чем проблема ?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 16.05.2017, 23:07   #3
xnnrzn
 
Регистрация: 15.05.2017
Сообщений: 8
По умолчанию

Попробовал переделать под свое задание - не получилось т.к. не знаю, что толком нужно убрать. Много функий (function), которые не понимаю что выполнят. Стрингэдит заменил на эдит. По заданию метод трапеций должен работать для 1 функции. Подскажите пожалуйста как исправить программу и какая процедура и function за что отвечают.
Вложения
Тип файла: rar metodTrapecij.rar (212.8 Кб, 7 просмотров)

Последний раз редактировалось xnnrzn; 16.05.2017 в 23:21.
xnnrzn вне форума Ответить с цитированием
Старый 21.05.2017, 12:47   #4
xnnrzn
 
Регистрация: 15.05.2017
Сообщений: 8
По умолчанию

Исправил программу - https://yadi.sk/d/meefoDFH3JMCeE
Может все-таки кто нибудь подскажет как построить график и исправить подсчет самим методом?
xnnrzn вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление интегралов методом трапеций irsen22 Паскаль, Turbo Pascal, PascalABC.NET 4 15.05.2013 00:36
Решить интеграл методом трапеций. Gy9vin Паскаль, Turbo Pascal, PascalABC.NET 1 23.01.2013 12:34
интеграл методом трапеций _SatanA_ Общие вопросы Delphi 2 24.02.2012 13:21
Вычисление интеграла методом трапеций Rikus Помощь студентам 2 11.11.2011 00:43
Решение интеграла методом трапеций GOODMAN Паскаль, Turbo Pascal, PascalABC.NET 2 12.04.2010 22:09