Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛАБОРАТОРНА РОБОТА_MODULI_DLL.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
109.06 Кб
Скачать

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.

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

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

Лістинг 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;