Пример 13.1.
Создать вызывающую программу, использующую модуль комплексной арифметики Complex, содержащий 4 функции: сложение, вычитание, умножение и деление. Вызывающая программа должна выполнить функцию по варианту задания функцию сложения с комплексными операндами Comp1=6 + i*8 и Comp2=7 + i*11.
- Из главного окна ИСР командой Файл=>Создать модуль генерируем пустой модуль Unit (модуль без формы). Получаем в окне Редактора кода страницу шаблона модуля с именем Unit1.
- В редакторе кода заносим код модуля.
- Сохраним модуль с именем Complex.Pas.
- Компилируем проект.
- Командой Файл=>Создать… создаем проект вызывающей программы.
Приложение перед закрытием программы:
Форма содержит:
- Метки Label1…Label4 для отображения поясняющих надписей имен вводимых переменных.
- Однострочные редакторы Edit1…Edit4 для ввода значений переменных a, b, c, d.
- Многострочный редактор Memo1 для вывода результатов.
- Кнопка Button1 (Ввод значений) принимает значения введенных в редакторы переменных.
- Кнопка BitBtn1 (Выполнить операцию) осуществляет вычисления и выводит результаты в блок Memo1.
- Кнопка BitBtn2 (Очистить Memo1) удаляет содержимое поля результатов, защищая его от переполнения.
- Кнопка BitBtn3 (Закрыть) завершает работу программы (дублирует стандартную кнопку закрытия окна Windows).
- В коде модуля формы вызывающей программы добавляем:
- В строку uses ссылку на модуль Complex.
- В раздел var переменные a,b,c,d типа real и Comp1, Comp2, Comp3 типа TComplex.
- Создаем обработчики событий нажатия кнопок.
- Сохраняем проект: модуль формы под именем Prg_13_1_ и проект под именем Prg_13_1.
Листинг модуля Complex
unit Complex; // Комплексная арифметика
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils;
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;
function SubC(x,y: TComplex):TComplex;
begin
Result.Re:=x.Re – y.Re;
Result.Im:=x.Im – y.Im;
end;
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;
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;
end.
Листинг модуля формы вызывающей программы
unit Prg_13_1_;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics,
Dialogs, StdCtrls, Buttons, Complex;
type
TForm1 = class(TForm)
BitBtn1: TBitBtn; // Кнопка «Закрыть»
BitBtn2: TBitBtn; // Кнопка «Очистить Memo»
BitBtn3: TBitBtn; // Кнопка «Выполнить операцию»
Button1:TButton; // Кнопка «Ввод значений»
Edit1: TEdit; // для a
Edit2: TEdit; // для b
Edit3: TEdit; // для c
Edit4: TEdit; // для d
Label1: TLabel; // a =
Label2: TLabel; // b =
Label3: TLabel; // c =
Label4: TLabel; // d =
Memo1: TMemo;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a,b,c,d: real;
Comp1, Comp2, Comp3:TComplex;
implementation
{ TForm1 }
procedure TForm1.BitBtn3Click(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.Button1Click(Sender: TObject);
begin
a:=StrToFloat(Edit1.Text);
b:=StrToFloat(Edit2.Text);
c:=StrToFloat(Edit3.Text);
d:=StrToFloat(Edit4.Text);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
memo1.Clear;
end;
initialization
{$I prg_13_1_.lrs}
end.
Приложение перед закрытием программы: