Частина тексту файла (без зображень, графіків і формул):
Міністерство освіти науки молоді та спорту
Національний університет «Львівська політехніка»
Лабораторна робота № 4
З Основ об’єктно-орієнтованого програмування
На тему
Створення власних класів та об’єктів
Мета: засвоїти основні поняття об’єктно-орієнтованого програмування, навчитися створювати свої об’єкти і будувати програми, засновані на об’єктному підході.
Завдання: Описати клас для векторів, що задаються координатами кінців у тривимірному просторі. Забезпечити операції додавання та віднімання векторів з одержанням нового вектора (суми чи різниці), обчислення скалярного добутку двох векторів, довжини вектора, косинуса кута між векторами.
Код програми:
unit MyVec;
interface
uses classes, Sysutils, Math;
type
TVector = class (TObject)
private
public
Fx:Integer;
Fy:Integer;
Fz:Integer;
constructor Create;
function AbsVec():Extended;
procedure Sum(V1:TVector);
procedure Diff(V1:TVector);
function Scal(V1:TVector):Int64;
function Len(V1:TVector):Extended;
function Ang(V1:TVector):Extended;
end;
implementation
constructor TVector.Create;
begin
Fx:=0;
Fy:=0;
Fz:=0;
end;
function TVector.AbsVec():Extended;
begin
Result:=Sqrt(Fx*Fx+Fy*Fy+Fz*Fz);
end;
procedure TVector.Sum(V1:TVector);
begin
Fx:=V1.Fx+Fx;
Fy:=V1.Fy+Fy;
Fz:=V1.Fz+Fz;
end;
procedure TVector.Diff(V1:TVector);
begin
Fx:=Fx-V1.Fx;
Fy:=Fy-V1.Fy;
Fz:=Fz-V1.Fz;
end;
function TVector.Scal(V1:TVector):int64;
begin
Result:=(Fx*V1.Fx+Fy*V1.Fy+Fz*V1.Fz);
end;
function TVector.Len(V1:TVector):Extended;
begin
Result:=Sqrt(Sqr(Fx-V1.Fx)+Sqr(Fy-V1.Fy)+Sqr(Fz-V1.fz));
end;
function TVector.Ang(V1:TVector):Extended;
begin
Result:=(Fx*V1.Fx+Fy*V1.Fy+Fz*V1.Fz)/ (Sqrt(Sqr(Fx)+Sqr(Fy)+Sqr(Fz))* Sqrt(Sqr(V1.Fx)+Sqr(V1.Fy)+Sqr(V1.Fz)));
end;
end.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, MyVec;
type
TForm1 = class(TForm)
lbl1: TLabel;
lbl2: TLabel;
lbl3: TLabel;
edt1: TEdit;
edt2: TEdit;
lbl4: TLabel;
lbl5: TLabel;
lbl6: TLabel;
edt3: TEdit;
edt4: TEdit;
lbl7: TLabel;
lbl8: TLabel;
edt5: TEdit;
edt6: TEdit;
lbl9: TLabel;
edt7: TEdit;
btn1: TButton;
btn2: TButton;
btn3: TButton;
btn4: TButton;
btn5: TButton;
lbl10: TLabel;
lbl11: TLabel;
lbl12: TLabel;
lbl13: TLabel;
edt8: TEdit;
edt9: TEdit;
edt10: TEdit;
//procedure FormCreate(Sender: TObject);
procedure btn1Click(Sender: TObject);
procedure btn2Click(Sender: TObject);
procedure btn3Click(Sender: TObject);
procedure btn5Click(Sender: TObject);
procedure btn4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{
procedure TForm1.btn1Click(Sender: TObject);
var V1,V2:TVector;
begin
V1:= TVector.Create;
V2:= TVector.Create;
V1.Fx:=StrToInt(edt1.Text);
V1.Fy:=StrToInt(edt2.Text);
V1.Fz:=StrToInt(edt5.Text);
V2.Fx:=StrToInt(edt3.Text);
V2.Fy:=StrToInt(edt4.Text);
V2.Fz:=StrToInt(edt6.Text);
edt7.Text:=IntToStr(0);
V1.Sum(V2);
edt8.Text:=IntToStr(V1.Fx);
edt9.Text:=IntToStr(V1.Fy);
edt10.Text:=IntToStr(V1.Fz);
end;
procedure TForm1.btn2Click(Sender: TObject);
var V1,V2:TVector;
begin
V1:= TVector.Create;
V2:= TVector.Create;
V1.Fx:=StrToInt(edt1.Text);
V1.Fy:=StrToInt(edt2.Text);
V1.Fz:=StrToInt(edt5.Text);
V2.Fx:=StrToInt(edt3.Text);
V2.Fy:=StrToInt(edt4.Text);
V2.Fz:=StrToInt(edt6.Text);
edt7.Text:=IntToStr(0);
V1.Diff(V2);
edt8.Text:=IntToStr(V1.Fx);
edt9.Text:=IntToStr(V1.Fy);
edt10.Text:=IntToStr(V1.Fz);
end;
procedure TForm1.btn3Click(Sender: TObject);
var V1,V2:TVector;
begin
V1:= TVector.Create;
V2:= TVector.Create;
V1.Fx:=StrToInt(edt1.Text);
V1.Fy:=StrToInt(edt2.Text);
V1.Fz:=StrToInt(edt5.Text);
V2.Fx:=StrToInt(edt3.Text);
V2.Fy:=StrToInt(edt4.Text);
V2.Fz:=StrToInt(edt6.Text);
edt8.Text:=IntToStr(0);
edt9.Text:=IntToStr(0);
edt10.Text:=IntToStr(0);
edt7.Text:=IntToStr(V1.Scal(V2));
end;
procedure TForm1.btn5Click(Sender: TObject);
var V1,V2:TVector;
begin
V1:= TVector.Create;
V2:= TVector.Create;
V1.Fx:=StrToInt(edt1.Text);
V1.Fy:=StrToInt(edt2.Text);
V1.Fz:=StrToInt(edt5.Text);
V2.Fx:=StrToInt(edt3.Text);
V2.Fy:=StrToInt(edt4.Text);
V2.Fz:=StrToInt(edt6.Text);
edt8.Text:=IntToStr(0);
edt9.Text:=IntToStr(0);
edt10.Text:=IntToStr(0);
edt7.Text:=FloatToStr(V1.Ang(V2));
end;
procedure TForm1.btn4Click(Sender: TObject);
var V1,V2:TVector;
begin
V1:= TVector.Create;
V2:= TVector.Create;
V1.Fx:=StrToInt(edt1.Text);
V1.Fy:=StrToInt(edt2.Text);
V1.Fz:=StrToInt(edt5.Text);
V2.Fx:=StrToInt(edt3.Text);
V2.Fy:=StrToInt(edt4.Text);
V2.Fz:=StrToInt(edt6.Text);
edt8.Text:=IntToStr(0);
edt9.Text:=IntToStr(0);
edt10.Text:=IntToStr(0);
edt7.Text:=FloatToStr(V1.Len(V2));
end;
end.
Результат Роботи:
Висновок: На даній лабораторній роботі я освоїв роботу з класами, та написав програму яка демонструє роботу з трьохвимірними векторами.