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

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

Министерство образования и науки Республики Беларусь


Белорусский национальный технический университет


Международный институт дистанционного образования


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



КУРСОВАЯ РАБОТА


по дисциплине:


«Конструирование программ и языки программирования»


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


Выполнил:


ст. гр. 417313 Я


Принял:


доц. Гурский Н.Н.



Минск 2005


Введение


Delphi – это современный программный продукт, позволяющий создавать широкий спектр приложений. Он объединяет в себе высокопроизводительный компилятор с языка ObjectPascal, являющийся объектно‑ориентированным расширением структурного языка третьего поколения Pascal, средств наглядного (визуального) создания программ и масштабируемую технологию управления БД. Основное назначение Delphi – служить средством для быстрого создания широкого класса Windows‑приложений, включая приложения, отвечающие технологии распределенной обработки данных, называемой технологией клиент‑сервер.


Для разработки Windows‑приложений Delphi имеет следующие средства:


-высокопроизводительный компилятор


Имеющийся в составе Delphi компилятор с языка ObjectPascal, являющийся одним из самых производительным в мире, позволяющий компилировать приложения со скоростью до 120000 строк в минуту. Среда Delphi включает в себя встроенный компилятор. При необходимости можно воспользоваться и пакетным компилятором DCC.EXE.


-объектно‑ориентированная модель компонентов


Основным назначением применения в Delphi модели компонентов является обеспечение возможности многократного использования компонентов и создания новых. Для создания Delphi использовались те же компоненты, что входят в состав поставки. Тем не менее, внесенные в объектную модель изменения, в первую очередь, были вызваны необходимостью поддержки технологии визуального программирования. При этом язык остался совместимым с языком Pascal, поддерживаемым компилятором BorlandPascal 7.0


-быстрая среда разработки (RAD)


Среда Delphi содержит полный набор визуальных средств для быстрой разработки приложений, поддерживающих как создание пользовательских интерфейсов, так и обработку корпоративных данных (с использованием соответствующих средств). Использование библиотеки визуальных компонентов (VCL) и визуальных объектов для работы с данными позволяет создавать приложения с минимальными затратами на непосредственное кодирование. При этом компоненты, включенные в состав Delphi, максимально инкапсулируют вызовы функций Windows API, тем самым облегчая процесс создания программ.


-расширяемость


Delphi является системой с открытой архитектурой, что позволяет дополнять ее новыми средствами и переносить на различные платформы.


-средства для построения БД


Delphi поддерживает практически все форматы существующих реляционных таблиц. Delphi включает в себя локальный сервер InterBase, для того, чтобы можно было разрабатывать расширяемые на любые внешние SQL‑серверы приложения в онлайновом режиме.


Итак, Delphi – это новый продукт, позволяющий создавать широкий спектр приложений для Windows. Среда Delphi включает в себя полный набор визуальных средств для быстрой разработки приложений, поддерживающих как создание пользовательских интерфейсов, так и таблиц базы данных. Библиотека классов, входящих в Delphi, содержит большое количество классов, инкапсулирующих различные группы функций Windows API. Delphi является системой с открытой архитектурой, что позволяет дополнять ее новыми средствами, и переносить на различные платформы.


1. Математическая формулировка задачи


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



Начальные данные:



Формула левых прямоугольников имеет вид:



Вычислить значение интеграла. Подынтегральную функцию представить в графическом виде, показать геометрическое значение интеграла в виде заштрихованной площади.



2. Описание программы


Программа включает 4 формы:


1. Главную, на которой располагаются элементы управления:


2. Форму, отображающую заставку:


3. Форму для About:


4. Форму для COM-сервера.


Структурная схема программы.





В программе используется конвертация данных расчета в приложение Microsoft Office Excel. Создана справочная система программы.




4. Руководство пользователя


Для запуска программы необходимо запустить файл “Pintegral.exe”.


Внешний вид главной формы представлен в ч.3.


1. Ввод данных.


Для правильной работы программы необходимо загрузить в неё данные посредством ввода их в поля TЕdit:



2. Вычисление значения интеграла.


Для вычисления значения интеграла есть возможность воспользоваться пунктом Данные->Применитьла
из главного меню



или кнопкой Применить
, расположенной на форме:



После вычисления результат отобразится на форме, будет построен график подинтегральной функции и создана таблица результатов расчета.


3. Конвертация данных расчета в приложение Microsoft Office Excel.


Данную операцию можно совершить либо выбрав в главном меню Файл->Экспорт в
Excel
либо нажав на кнопку на главной форме.


5. Вызов справки.


Для вывода справочной информации ?->Справка
либо нажав на кнопку на главной форме.


Внешний вид окна справки:



6. Вызов About.


Для вывода информации о программе ?->
About
либо нажав на кнопку на главной форме.


Внешний вид окна представлен в ч.3.


7 Завершение приложения.


Для выхода из программы необходимо выполнить одно из следующих действий:


Выбрать в главном меню Файл->Выход


Нажать на кнопку на главной форме.


Либо щёлкнуть на крестике в правом верхнем углу формы


5. Методика испытаний


Целью проведения испытаний являлась проверка работоспособности программы при различных исходных данных.


1. Исходные данные:


значение левого предела интегрирования: 1,6;


значение правого предела интегрирования: 2,7;


точность вычисления: 95;


После нажатия кнопки Применить
был получен результат вычислений, построен график функции и составлена таблица с результатами расчета. Программа успешно экспортировала данные в приложение Microsoft Office, показала информацию о программе и файл помощи.


Заключение


В ходе тестирования не было выявлено ошибок и сбоев в работе приложения: процессы вычисления значений интегралов, вывода графиков функций и геометрических смыслов интегралов происходили по мере запросов без ошибок.


Доступ к методам класса, а также методам COM-сервера и динамической библиотеки “ pServer.dll” осуществлялся без ошибок.


Возможно использования приложения как вспомогательного средства при изучении интегрального исчисления.


Список использованных источников



1. Фаронов В.В. Delphi. Программирование на языке высокого уровня. - СПб: Издательство «Питер», 2000.- 639 с.


2. Марко Кэнту. Delphi 5 для профессионалов.-СПб.: Питер. 2001. – 944 с.


3. А.Я.Архангельский. Delphi 7. Учебное пособие. - СПб: Издательство «Питер», 2004.- 1087 с.


4. Электронные учебники


Приложение 1. Листинг программы



Сервер
:


unit pServer_TLB;


// ****************************************************** //


// WARNING


// -------


// The types declared in this file were generated from data read from a


// Type Library. If this type library is explicitly or indirectly (via


// another type library referring to this type library) re-imported, or the


// 'Refresh' command of the Type Library Editor activated while editing the


// Type Library, the contents of this file will be regenerated and all


// manual modifications will be lost.


// ********************************************************** //


// PASTLWTR : 1.2


// File generated on 15.11.2005 22:46:27 from Type Library described below.


// ************************************************* //


// Type Lib: C:Documents and SettingsSerghРабочий столРазработка приложения вычисления определенных интегралов по формуле левых прямоугольников (Delphi)SourceServerpServer.tlb (1)


// LIBID: {73AF5EFB-ABD6-4565-91C3-0E7C137DA989}


// LCID: 0


// Helpfile:


// HelpString: pServer Library


// DepndLst:


// (1) v2.0 stdole, (C:WINDOWSsystem32stdole2.tlb)


// ********************************************************* //


{$TYPEDADDRESS OFF} // Unit must be compiled without type-checked pointers.


{$WARN SYMBOL_PLATFORM OFF}


{$WRITEABLECONST ON}


{$VARPROPSETTER ON}


interface


uses Windows, ActiveX, Classes, Graphics, StdVCL, Variants;


// ****************************************************//


// GUIDS declared in the TypeLibrary. Following prefixes are used:


// Type Libraries : LIBID_xxxx


// CoClasses : CLASS_xxxx


// DISPInterfaces : DIID_xxxx


// Non-DISP interfaces: IID_xxxx


// ********************************************************//


const


// TypeLibrary Major and minor versions


pServerMajorVersion = 1;


pServerMinorVersion = 0;


LIBID_pServer: TGUID = '{73AF5EFB-ABD6-4565-91C3-0E7C137DA989}';


IID_IIntegral: TGUID = '{2877719B-94E7-45FB-82BE-7F9CD8A6017C}';


CLASS_Integral: TGUID = '{3AD7BD31-8C15-49ED-A0B5-436060913721}';


type


// ***************************************************//


// Forward declaration of types defined in TypeLibrary


// *******************************************************//


IIntegral = interface;


// *******************************************************//


// Declaration of CoClasses defined in Type Library


// (NOTE: Here we map each CoClass to its Default Interface)


// *********************************************************//


Integral = IIntegral;


// *******************************************************//


// Interface: IIntegral


// Flags: (0)


// GUID: {2877719B-94E7-45FB-82BE-7F9CD8A6017C}


// *****************************************************//


IIntegral = interface(IUnknown)


['{2877719B-94E7-45FB-82BE-7F9CD8A6017C}']


function Func(x: Double): Double; stdcall;


end;


// **********************************************************//


// The Class CoIntegral provides a Create and CreateRemote method to


// create instances of the default interface IIntegral exposed by


// the CoClass Integral. The functions are intended to be used by


// clients wishing to automate the CoClass objects exposed by the


// server of this typelibrary.


// ***********************************************************//


CoIntegral = class


class function Create: IIntegral;


class function CreateRemote(const MachineName: string): IIntegral;


end;


implementation


uses ComObj;


class function CoIntegral.Create: IIntegral;


begin


Result := CreateComObject(CLASS_Integral) as IIntegral;


end;


class function CoIntegral.CreateRemote(const MachineName: string): IIntegral;


begin


Result := CreateRemoteComObject(MachineName, CLASS_Integral) as IIntegral;


end;


end.


unit uFunc;


{$WARN SYMBOL_PLATFORM OFF}


interface


uses


Windows, ActiveX, Classes, ComObj, pServer_TLB, StdVcl;


type


TIntegral = class(TTypedComObject, IIntegral)


protected


function Func(x: Double): Double; stdcall;


end;


implementation


uses ComServ;


// Вычисление значения уравнения


function TIntegral.Func(x: Double): Double;


begin


Result := (x + 0.8) / sqrt (x * x + 1.2);


end;


initialization


TTypedComObjectFactory.Create(ComServer, TIntegral, Class_Integral,


ciMultiInstance, tmApartment);


end.


Клиент
:


unit uMain;


interface


uses


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


Dialogs, StdCtrls, Buttons, ExtCtrls, TeEngine, Series, TeeProcs, Chart,


Grids, Menus, ToolWin, ComCtrls, ImgList;


type


TfrmMain = c

lass(TForm)


GroupBox1: TGroupBox;


edtA: TEdit;


Label1: TLabel;


edtB: TEdit;


Label2: TLabel;


edtN: TEdit;


Label3: TLabel;


btnApply: TBitBtn;


pnlRes: TPanel;


Chart1: TChart;


Series1: TAreaSeries;


grdAll: TStringGrid;


MainMenu1: TMainMenu;


N1: TMenuItem;


Excel: TMenuItem;


N2: TMenuItem;


nExit: TMenuItem;


N3: TMenuItem;


NApply: TMenuItem;


N5: TMenuItem;


NSave: TMenuItem;


NLoad: TMenuItem;


OpenDialog: TOpenDialog;


SaveDialog: TSaveDialog;


ToolBar1: TToolBar;


ToolButton1: TToolButton;


ToolButton2: TToolButton;


ToolButton3: TToolButton;


ToolButton4: TToolButton;


ToolButton5: TToolButton;


ToolButton6: TToolButton;


ToolButton7: TToolButton;


ToolButton8: TToolButton;


ToolButton9: TToolButton;


N4: TMenuItem;


nAbout: TMenuItem;


ToolButton10: TToolButton;


NHelp: TMenuItem;


N6: TMenuItem;


ImageList1: TImageList;


procedure FormCreate(Sender: TObject);


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


procedure nExitClick(Sender: TObject);


procedure ExcelClick(Sender: TObject);


procedure NApplyClick(Sender: TObject);


procedure NLoadClick(Sender: TObject);


procedure NSaveClick(Sender: TObject);


procedure nAboutClick(Sender: TObject);


procedure NHelpClick(Sender: TObject);


private


{ Private declarations }


public


{ Public declarations }


end;


var


frmMain: TfrmMain;


implementation


uses uLogo, uIntegral, uAbout;


var


Integral: TIntegral;


{$R *.dfm}


// Создание формы


procedure TfrmMain.FormCreate(Sender: TObject);


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.FillTable(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);


Stg.Cells[1,i+1] := FloatToStr(_A + tmp);


Stg.Cells[2,i+1] := FloatToStr(h*Func.Func(_A + tmp));


end;


Func._Release;


end;


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


procedure TIntegral.LoadFromFile(fName: string);


var


f: file of real;


fa, fb, fn: real;


res: boolean;


begin


{$I-}


{Открываем файл}


AssignFile(f, fName);


Reset(f);


{Читаем данные из файла}


Read(f, fa);


Read(f, fb);


Read(f, fn);


{Закрываем файл}


CloseFile(f);


{$I+}


{Проверяем на ошибку}


res := (IOResult = 0) and (fName <> '');


if (res = false) then


ShowMessage('Неправильное чтение из файла')


else begin {Записываем данные в класс}


_A := fa;


_B := fb;


_N := Round(fn);


end;


end;


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


procedure TIntegral.SaveToFile(fName: string);


var


f: file of real;


fn: real;


res: boolean;


begin


{$I-}


{Открываем файл или создаем}


AssignFile(f, fName);


Rewrite(f);


{$I+}


{Проверяем на ошибку}


res := (IOResult = 0) and (fName <> '');


if (res = false) then


ShowMessage('Неправильное чтение')


else begin {Записываем данные в файл}


{Пишем данные в файл}


Write(f, _A);


Write(f, _B);


fn := _N;


Write(f, fn);


end;


{Закрываем файл}


CloseFile(f);


end;


// Описание методов записи для property-значений


procedure TIntegral.SetA(const Value: real);


begin


_A := Value;


end;


procedure TIntegral.SetB(const Value: real);


begin


_B := Value;


end;


procedure TIntegral.SetN(const Value: integer);


begin


_N := Value;


end;


end.


unit uAbout;


interface


uses


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


Dialogs, StdCtrls;


type


TfrmAbout = class(TForm)


Label1: TLabel;


Label2: TLabel;


Label3: TLabel;


Button1: TButton;


procedure Button1Click(Sender: TObject);


private


{ Private declarations }


public


{ Public declarations }


end;


var


frmAbout: TfrmAbout;


implementation


{$R *.dfm}


procedure TfrmAbout.Button1Click(Sender: TObject);


begin


Close;


end;


end.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

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

Слов:2485
Символов:29174
Размер:56.98 Кб.