Разработка приложения вычисления определенных интегралов по формуле левых прямоугольников
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);
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности