
- •12.Списки
- •Interface
- •Implementation
- •13.Модули
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •14.Таблицы
- •Interface
- •Implementation
- •15.Графика, отображение графиков функций
- •Interface
- •Implementation
- •Initialization
- •16.Графика, примитивы
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Initialization
- •17.Графика, растровые изображения и анимация
- •Interface
- •Implementation
- •Initialization
- •Interface
- •Implementation
- •18.Тестирование и отладка
- •19.Квадратное уравнение
- •Interface
- •20.Класс tThread
- •Interface
- •Implementation
- •Interface
- •Implementation
- •Interface
- •Implementation
- •21.Класс tStream
- •Interface
- •Implementation
- •Initialization
- •Interface
- •Implementation
- •Initialization
- •22.Создание в Delphi кроссплатформенного приложения
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. Проект – приложение.
Командой Файл => Создать => Еще вызываем окно архива и выбираем в нем DLL. Получаем в окне Редактора кода страницу шаблона DLL с именем Project1.
В редакторе кода заносим в нее код DLL. Подпрограммы те же, что в модуле Complex задания 1. Секция begin…end – пустая.
Сохраним DLL с именем Complex2.Pas.
Компилируем DLL. Итог Complex2.dll.
Так как DLL не экспортирует типов, то создаем вспомогательный модуль Complex1, содержащий только интерфейсную часть с описанием типа TComplex и имен вызываемых подпрограмм DLL. Сохраняем его под именем Complex1.
Командой Файл => Создать => Приложение создаем проект вызывающей программы. Форму делаем аналогичной заданию 1.
В коде модуля формы вызывающей программы добавляем:
В строку uses ссылку на модуль Complex1.
В раздел var переменные a, b, c, d типа real, Comp1, Comp2, Comp3 типа TComplex.
Создаем обработчики нажатия кнопок.
Сохраняем проект под именем 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;