Учебная работа. Курсовая работа: Разработка приложения вычисления определенных интегралов по формуле левых прямоугольников
Белорусский государственный технический институт
Интернациональный институт дистанционного образования
Кафедра программного обеспечения вычислительной техники и автоматических систем
КУРСОВАЯ РАБОТА
по дисциплине:
«Конструирование программ и языки программирования»
Разработка приложения вычисления определенных интегралов по формуле левых прямоугольников
Выполнил:
ст. гр. 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.
Данную операцию можно совершить или выбрав в основном меню
или нажав на клавишу на главной форме.
5. Вызов справки.
Для вывода справочной инфы
или нажав на клавишу на главной форме.
Наружный вид окна справки:
6. Вызов About.
Для вывода инфы о программке
или нажав на клавишу на главной форме.
Наружный вид окна представлен в ч.3.
7 Окончание приложения.
Для выхода из программки нужно выполнить одно из последующих действий:
Избрать в основном меню
Надавить на клавишу на главной форме.
Или щёлкнуть на крестике в правом верхнем углу формы
5. методика испытаний
Целью проведения испытаний являлась проверка работоспособности программки при разных начальных данных.
1. Начальные данные:
точность вычисления: 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 = class(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.
]]>