Розробка програми обчислення визначених інтегралів за формулою лівих прямокутників

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

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

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

Міжнародний інститут дистанційної освіти

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

Курсова робота

з дисципліни:

«Конструювання програм і мови програмування»

Розробка програми обчислення визначених інтегралів за формулою лівих прямокутників

Виконав:

ст. гр. 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 .- 6 39 с.

  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 Settings \ Sergh \ Робочий стіл \ Розробка програми обчислення визначених інтегралів за формулою прямокутників (Delphi) \ Source \ Server \ pServer.tlb (1)

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

/ / LCID: 0

/ / Helpfile:

/ / HelpString: pServer Library

/ / DepndLst:

/ / (1) v2.0 stdole, (C: \ WINDOWS \ system32 \ stdole2.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.

Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
129.3кб. | скачати


Схожі роботи:
Обчислення визначених інтегралів Квадратурні формули
Наближене обчислення означених інтегралів формули прямокутників трапецій Сімпсона
Розробка учбового матеріалу для викладання вищої математики на тему Наближені методи обчислення визначених
Розробка програми представлення табличних даних у вигляді діаграми прямокутників
Розробка алгоритму і програми для обчислення коефіцієнта оперативної готовності системи
Обчислення інтегралів методом Монте-Карло
Обчислення меж функцій похідних та інтегралів
Обчислення інтегралів методом Монте Карло
Приблизне обчислення визн інтегралів які не беруться через елементар ф-ї
© Усі права захищені
написати до нас