Здавалка
Главная | Обратная связь

Тема: Робота з модулями в середовищі Delphi

ЛАБОРАТОРНА РОБОТА №5

Мета роботи: ознайомлення з використання модулів і DLL (Dynamic Linked Library = бібліотека, що динамічно зв'язується)

Завдання:розробити алгоритми розв'язку завдань та скласти програму розв'язку завдань.

Короткі теоретичні відомості

 

 

Хід виконання лабораторної роботи

1. Створити програму, що використовує модуль комплексної арифметики Complex, який містить 4 функції: додавання, віднімання, множення й розподіл. Програма повинна виконати функцію 1 з комплексними операндами Comp1=a + i*b і Comp2=c + i*d b і функцію розподілу Comp1 на нуль. Варіанти завдань у Табл. 5.1. Проект – додаток.

2. Повторити завдання 1, модуль у вигляді DLL Complex2. Проект – додаток.

Таблиця 5.1. Варіанти завдань

a b c d Функція 1
Додавання
Віднімання
Множення
Додавання
Віднімання
Множення
Додавання
Віднімання
Множення
Додавання
Віднімання
Множення
Додавання
Віднімання
Множення

 

Приклад виконання лабораторної роботи

Завдання 1

Створити програму, що використовує модуль комплексної арифметики Complex, що містить 4 функції: додавання, віднімання, множення й розподіл. Програма повинна виконати функцію додавання з комплексними операндами Comp1=6 + i*8 і Comp2=7 + i*11 функцію розподілу Op1 на нуль.

1. Командою File=>New викликаємо вікно архіву й вибираємо в ньому Unit (модуль без форми). Одержуємо у вікні Редактора коду сторінку шаблону модуля з іменем Unit1.

2. У редакторі коду перетягуєм код модуля. Секції Initialization і Finalization не використовуємо.

3. Збережемо модуль із іменем Complex.Pas.

4. Компілюємо модуль.

5. Командою Файл => Створити => Додаток створюємо проект програми. Форма додатка наведена на рис. 5.1.

Рисунок 5.1. Форма програми

Форма містить:

  • Мітки Label1…Label6 для відображення написів, що пояснюють.
  • Однорядкові редактори Edit1…Edit4 для введення значень змінних a, b, c, d.
  • Багаторядковий редактор Memo1 для висновку результатів.
  • Кнопки Bitbtn1…Bitbtn4 з іменами Введення, Виконати, Очистити, Закрити. Кнопка Введення підтверджує значення введених змінних, бутон Виконати здійснює обчислення й виводить результати. Бутон Очистити видаляє вміст поля результатів, Кнопка Закрити завершує роботу програми (дублює стандартну кнопку закриття вікна Windows).

6. У коді модуля форми програми додаємо:

§ У рядок uses посилання на модуль Complex.

§ У розділ var змінні a,b,c,d типу real і Comp1, Comp2, Comp3 типу Tcomplex.

7. Створюємо оброблювачі натискання кнопок.

8. Зберігаємо проект під унікальним іменем.

Лістинг модуля Complex:

unit Complex; // Комплексна арифметика

Interface

Type

Tcomplex = record // Тип комплексного числа

Re, Im: Real

end;

 

function Addc(x,y: Tcomplex):Tcomplex; // Комплексне додавання

function Subc(x,y: Tcomplex):Tcomplex; // Комплексне віднімання

function Multc(x,y: Tcomplex):Tcomplex; // Комплексне множення

function Divc(x,y: Tcomplex):Tcomplex; // Комплексний розподіл

Implementation

 

function Addc(x,y: Tcomplex):Tcomplex;

Begin

Result.Re:=x.Re + y.Re;

Result.Im:=x.Im + y.Im;

end; // Addc

 

function Subc(x,y: Tcomplex):Tcomplex;

Begin

Result.Re:=x.Re - y.Re;

Result.Im:=x.Im - y.Im;

end; // Subc

 

function Multc(x,y: Tcomplex):Tcomplex;

Begin

Result.Re:=x.Re*y.Re - x.Im*y.Im;

Result.Im:=x.Re*y.Im + x.Im*y.Re;

end; {Multc}

function Divc(x,y: Tcomplex):Tcomplex;

var z: Real;

Begin

z:=sqr(y.Re)+sqr(y.Im);

try // Захист при розподілі на 0

Result.Re:=(x.Re*y.Re + x.Im*y.Im)/z;

Result.Im:=(x.Re*y.Im - x.Im*y.Re)/z;

except // Якщо дільник 0, те

Result.Re:=1.1e309;

Result.Im:=1.1e309

end;

end; {Divc}

 

end.

Лістинг модуля форми зухвалої програми

unit Prg_13_1_;

 

Interface

 

Uses

Windows, Messages, Sysutils, Classes, Graphics, Controls, Forms, Dialogs, Stdctrls, Buttons,

Extctrls, Complex;

Type

Tform1 = class(Tform)

bbrun: Tbitbtn; // Кнопка Виконати

bbclose: Tbitbtn; // Кнопка Закрити

bbvvod: Tbitbtn; // Кнопка Введення

bbclear: Tbitbtn; // Кнопка Очистити

Edit1: Tedit; // для a

Edit2: Tedit; // для b

Edit3: Tedit; // для c

Edit4: Tedit; // для d

Label1: Tlabel; // Уведіть значення змінних

Label2: Tlabel; // a =

Label3: Tlabel; // b =

Label4: Tlabel; // c =

Label5: Tlabel; // d =

Label6: Tlabel; // Результати

Memo1: Tmemo;

procedure bbrunclick(Sender: Tobject);

procedure bbvvodclick(Sender: Tobject);

procedure bbclearclick(Sender: Tobject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

Var

Form1: Tform1;

a,b,c,d: real;

Comp1, Comp2, Comp3:Tcomplex;

Implementation

 

{$R *.DFM}

 

procedure Tform1.bbrunclick(Sender: Tobject);

Begin

Comp1.Re:=a;

Comp1.Im:=b;

Comp2.Re:=c;

Comp2.Im:=d;

Comp3:=Addc(Comp1,Comp2);

memo1.Lines.Add('Вихідні дані');

memo1.Lines.Add('Comp1='+Floattostr(Comp1.Re)+’+i*'+Floattostr(Comp1.Im));

memo1.Lines.Add('Comp2='+Floattostr(Comp2.Re)+'+i*'+Floattostr(Comp2.Im));

memo1.Lines.Add('');

memo1.Lines.Add('Результат комплексної операції’);

memo1.Lines.Add('Comp3='+Floattostr(Comp3.Re)+'+i*'+Floattostr(Comp3.Im));

end;

 

procedure Tform1.bbvvodclick(Sender: Tobject);

Begin

a:=Strtofloat(Edit1.Text);

b:=Strtofloat(Edit2.Text);

c:=Strtofloat(Edit3.Text);

d:=Strtofloat(Edit4.Text);

end;

 

procedure Tform1.bbclearclick(Sender: Tobject);

Begin

memo1.Clear;

end;

 

end.

Завдання 2

Повторити завдання 1, реалізувавши модуль у вигляді DLL Complex2. Проект – додаток.

1. Командою Файл => Створити => Викликаємо вікно архіву й вибираємо в ньому DLL. Одержуємо у вікні Редактора коду сторінку шаблону DLL з іменем Project1.

2. У редакторі коду заносимо в неї код DLL. Підпрограми ті ж, що в модулі Complex завдання 1. Секція begin…end – порожня.

3. Збережемо DLL з іменем Complex2.Pas.

4. Компілюємо DLL. Підсумок Complex2.dll.

5. Тому що DLL не експортує типів, то створюємо допоміжний модуль Complex1, що містить тільки інтерфейсову частину з описом типу Tcomplex і імен викликуваних підпрограм DLL. Зберігаємо його під іменем Complex1.

6. Командою Файл => Створити => Додаток створюємо проект програми. Форму робимо аналогічної завданню 1.

7. У коді модуля форми програми додаємо:

§ У рядок uses посилання на модуль Complex1.

§ У розділ var змінні a, b, c, d типу real, Comp1, Comp2, Comp3 типу Tcomplex.

8. Створюємо оброблювачі натискання кнопок.

9. Зберігаємо проект під унікальним іменем.

Лістинг DLL Complex2

library Complex2; // Комплексна арифметика

uses Sysutils, Classes;

 

{$R *.RES}

 

Type

Tcomplex = record// Тип комплексного числа

Re, Im: real

end;

function Cadd(x,y:Tcomplex):Tcomplex; export; // Комплексне додавання

Begin

Result.Re:=x.Re + y.Re;

Result.Im:=x.Im + y.Im;

end; // Cadd

 

function Csub(x,y:Tcomplex):Tcomplex; export; // Комплексне віднімання

Begin

Result.Re:=x.Re - y.Re;

Result.Im:=x.Im - y.Im;

end; // Csub

 

function Cmult(x,y:Tcomplex):Tcomplex; Export; // Комплексне множення

Begin

Result.Re:=x.Re*y.Re - x.Im*y.Im;

Result.Im:=x.Re*y.Im + x.Im*y.Re;

end; // Cmult

 

function Cdiv(x,y:Tcomplex):Tcomplex; Export; // Комплексний розподіл

var z: real;

Begin

z:=sqr(y.Re)+sqr(y.Im);

try// Захист при розподілі на 0

Result.Re:=(x.Re*y.Re + x.Im*y.Im)/z;

Result.Im:=(x.Re*y.Im - x.Im*y.Re)/z;

except// Результат, якщо дільник 0

Result.Re:=1.1e309;

Result.Im:=1.1e309

end;

end; // СDiv

 

exports// Список експорту

Cadd Index 1 Name 'Addc' Resident,

Csub Index 2 Name 'Subc',

Cmult Index 3 Name 'Multc',

Cdiv Index 4 Name ‘Divc’;

Begin

end.

 

Лістинг модуля Complex1

unit Complex1;

 

Interface

 

Type

Tcomplex=record// Тип комплексного числа

Re, Im: real

end;

// Викликувані функції

function Addc(x,y:Tcomplex):Tcomplex; External 'Complex2' Index 1;

function Subc(x,y:Tcomplex):Tcomplex; External 'Complex2' Index 2;

function Multc(x,y:Tcomplex):Tcomplex; External 'Complex2' Index 3;

function Divc(x,y:Tcomplex):Tcomplex; External 'Complex2' Index 4;

Implementation

end.

Лістинг модуля форми програми такий же, як у завданні 1, тільки в рядку uses додане посилання на модуль Complex1. У цьому модулі встановлюється зв'язок з DLL.

Висновки

1. Для роботи з програмами які часто використовуються застосовують модулі й DLL

2. Модуль або DLL - це набір готових підпрограм, що зберігаються в компільованому виді.

3. Модуль зв'язується із головною програмою при компонуванні.

4. DLL зв'язується із головною програмою динамічно: DLL завантажується на час звертання до її підпрограм.

5. Та сама DLL може використовуватися декількома паралельно працюючими програмами.

 

Контрольні питання

1. Що таке модуль? Його призначення й створення.

2. Структура модуля.

3. Призначення й зміст секцій Interface, Implementation, Initialization, Finalization.

4. Зв'язування модуля із головною програмою.

5. Що таке DLL? Її призначення й створення.

6. Структура DLL.

7. Експортовані й внутрішні підпрограми DLL.

8. Призначення й зміст списку Exports.

9. Зв'язування DLL із зухвалою програмою.

10. Способи виклику підпрограм з DLL.





©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.