Разработка приложения вычисления определенных интегралов по формуле левых прямоугольников

var

// Объявляем объект формы логотипа

logo: TfrmLogo;

begin

// Создаем форму

logo := TfrmLogo.Create(self);

// Отображаем форму

logo.ShowModal;

// Создаем объект Integral

Integral := TIntegral.Create(1.6, 2.7, 95);

pnlRes.Caption := 'Результат = ' + FloatToStr(Integral.Calculate);

Integral.Draw(Series1);

Chart1.ZoomPercent(90);

Integral.FillT

able(grdAll);

end;

procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);

begin

// Очищаем память

Integral.Destroy;

end;

procedure TfrmMain.nExitClick(Sender: TObject);

begin

Close;

end;

procedure TfrmMain.ExcelClick(Sender: TObject);

begin

Integral.ExcelExport(grdAll);

end;

procedure TfrmMain.NApplyClick(Sender: TObject);

begin

Integral.A := StrToFloat(edtA.Text);

Integral.B := StrToFloat(edtB.Text);

Integral.N := StrToInt(edtN.Text);

pnlRes.Caption := 'Результат = ' + FloatToStr(Integral.Calculate);

Integral.Draw(Series1);

Integral.FillTable(grdAll);

end;

procedure TfrmMain.NLoadClick(Sender: TObject);

begin

if (OpenDialog.Execute) then begin

Integral.LoadFromFile(OpenDialog.FileName);

edtA.Text := FloatToStr(Integral.A);

edtB.Text := FloatToStr(Integral.B);

edtN.Text := IntToStr(Integral.N);

pnlRes.Caption := 'Результат = ' + FloatToStr(Integral.Calculate);

Integral.Draw(Series1);

Integral.FillTable(grdAll);

end;

end;

procedure TfrmMain.NSaveClick(Sender: TObject);

begin

if (SaveDialog.Execute) then begin

Integral.SaveToFile(SaveDialog.FileName);

end;

end;

procedure TfrmMain.nAboutClick(Sender: TObject);

begin

frmAbout.ShowModal;

end;

procedure TfrmMain.NHelpClick(Sender: TObject);

begin

Application.HelpCommand(0,0);

end;

end.

unit uLogo;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls;

type

TfrmLogo = class(TForm)

Panel1: TPanel;

Label1: TLabel;

Label3: TLabel;

Label2: TLabel;

Image1: TImage;

Timer1: TTimer;

procedure Panel1Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure Timer1Timer(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

frmLogo: TfrmLogo;

implementation

{$R *.dfm}

// Нажатие мышкой где-либо

procedure TfrmLogo.Panel1Click(Sender: TObject);

begin

// Закрываем форму

Close;

end;

procedure TfrmLogo.FormClose(Sender: TObject; var Action: TCloseAction);

begin

// Очистить память

Action := caFree;

end;

// Кода таймер сработает

procedure TfrmLogo.Timer1Timer(Sender: TObject);

begin

// Закрыть форму

Close;

end;

end.

unit uIntegral;

interface

uses pServer_TLB, Series, Chart, SysUtils, grids,

ComObj, ActiveX, Windows, StdCtrls;

{Класс TIntegral}

type

TIntegral = class

private

_A, _B: real;

_N: integer;

// Методы записи для property-значений

procedure SetA(const Value: real);

procedure SetB(const Value: real);

procedure SetN(const Value: integer);

public

// Конструктор (принимает все необходимые для вычислений значения)

constructor Create(ANew, BNew: real; NNew: integer);

// Необходимые property

property A: real read _A write SetA; // начало интегрирования

property B: real read _B write SetB; // конец интенрирования

property N: integer read _N write SetN; // кол-во разбиений

// Вычисление интеграла (возвращаем интегральную сумму)

function Calculate: real;

// Загрузка данных из файла

procedure LoadFromFile(fName: string);

// Сохранение данных в файл

procedure SaveToFile(fName: string);

// Рисование графика

procedure Draw(Series: TAreaSeries);

// Процедура заполнения таблицы

procedure FillTable(Stg: TStringGrid);

// Экспорт в Excel

procedure ExcelExport (Stg: TStringGrid);

end;

implementation

uses Dialogs;

// Вычисление интеграла (возвращаем интегральную сумму)

function TIntegral.Calculate: real;

var

i: Integer;

tmp, h, s: real;

{Объявляем объект интерфейса}

Func: IIntegral;

begin

s := 0;

{Создаем объект интерфейса}

Func := CoIntegral.Create;

h := (_B - _A)/_N; // Вычисляем шаг

for i := 0 to _N do

begin

tmp := i * h;

s := s + h * Func.Func(_A + tmp); // релизация метода

end;

Result := s; // возвращаем результат

Func._Release;

end;

// Конструктор (принимает все необходимые для вычислений значения)

constructor TIntegral.Create(ANew, BNew: real; NNew: integer);

begin

_A := ANew;

_B := BNew;

_N := NNew;

end;

// Рисование графика

procedure TIntegral.Draw(Series: TAreaSeries);

var

i: Integer;

tmp, h: real;

{Объявляем объект интерфейса}

Func: IIntegral;

begin

Series.Clear;

{Создаем объект интерфейса}

Func := CoIntegral.Create;

h := (_B - _A)/_N; // Вычисляем шаг

for i := 0 to _N do

begin

tmp := i * h;

{добавляем в график}

Series.AddXY(_A + tmp, h*Func.Func(_A + tmp));

end;

Func._Release;

end;

// Экспорт в Excel

procedure TIntegral.ExcelExport (Stg: TStringGrid);

var

j : Integer;

Unknown : IUnknown;

Result : HResult;

AppProgID : String;

App, Ch : Variant;

begin

// Указать программный идентификатор приложения-сервера

AppProgID := 'Excel.Application';

Result := GetActiveObject(ProgIDToClassID(AppProgID),nil,Unknown);

if (Result = MK_E_UNAVAILABLE) then

// Создать один экземпляр сервера

App := CreateOleObject(AppProgID)

else

// Соединиться с уже запущенной копией сервера

App := GetActiveOleObject(AppProgID);

//------------------------------------------------------

App.Workbooks.Add();

j:=App.Workbooks.Count;

App.Workbooks[j].Activate;

//Обращение к страницам

App.ActiveWorkbook.WorkSheets[1].Name := 'Результат';

//Подготовка данных для построения графика

For j:=1 to _N-1 do

begin

App.ActiveWorkbook.WorkSheets[1].Cells[j,1].Value :=StrToFloat(Stg.Cells[1,j+1]);

App.ActiveWorkbook.WorkSheets[1].Cells[j,2].Value := StrToFloat(Stg.Cells[2,j+1]);

end;

App.DisplayAlerts:=False;

// показать окно приложения на экране

App.Visible := True;

end;

procedure TIntegral.FillTable(Stg: TStringGrid);

var

i: Integer;

tmp, h: real;

{Объявляем объект интерфейса}

Func: IIntegral;

begin

{Создаем объект интерфейса}

Func := CoIntegral.Create;

Stg.RowCount := _N + 1;

Stg.Cells[0,0] := 'N';

Stg.Cells[1,0] := 'X';

Stg.Cells[2,0] := 'Y';

h := (_B - _A)/_N; // Вычисляем шаг

for i := 0 to _N-1 do

begin

tmp := i * h;

{добавляем в таблицу}

Stg.Cells[0,i+1] := IntToStr(i+1);

Страница:  1  2  3  4 


Другие рефераты на тему «Программирование, компьютеры и кибернетика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы