Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LR_Delphi_2.doc
Скачиваний:
12
Добавлен:
18.09.2019
Размер:
1.91 Mб
Скачать

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. Сохраняем проект под именем Prg_11_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;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]