Арслан1536
Ученик
- Регистрация
- 29 Окт 2021
- Сообщения
- 1
- Реакции
- 0
- Баллы
- 0
Процедура вычитания векторов
Помогите вставить сюда процедуру вычитания векторов
unit UnitVectors;
interface
uses
Classes, SysUtils;
type
TVector = class
private
FElements:array of real;
function GetCount:integer;
function GetElements(index:integer):real;
function GetNorma:real;// выдает длину ветора (здесь длина это длина)
procedure SetElements(index:integer;AValue:real);
public
constructor Create; overload; //создает нулевой вектор днины=0 (здесь длина это кол-во элементов)
constructor Create(ALen:integer); overload; //создает не заполненный вектор днины=ALen (здесь длина это кол-во элементов)
constructor Create(AValue:TVector); overload;//создает копию вектора AValue
procedure Add(AValue:TVector);// сумма векторов
procedure MulToNumber(value:real);// умножает вектор на число value
function Dotproduct(AValue:TVector): real;// скалярное произведение на вектор AValue
property Elements[index:integer]:real read GetElements write SetElements;
property Count:integer read GetCount;
property Norma:real read GetNorma;
end;
implementation
function TVector.GetCount:integer;
begin
Result:=Length(FElements);
end;
function TVector.GetElements(index:integer):real;
begin
Assert((index >= 0) and (index < Length(FElements)), 'Invalid index');
Result:=FElements[index];
end;
procedure TVector.Add(AValue:TVector);// сумма векторов
var i:integer;
begin
Assert(Count = AValue.Count, 'Invalid vector');
for i:=0 to AValue.Count-1 do
Elements:=Elements+AValue.Elements;
end;
function TVector.GetNorma:real;
var p:real;
i:integer;
begin
p:=0;
for i:=0 to Count-1 do
p:=p+(Elements*Elements);
Result:=sqrt(p);
end;
procedure TVector.SetElements(index:integer;AValue:real);
begin
Assert((index >= 0) and (index < Length(FElements)), 'Invalid index');
FElements[index]:=AValue;
end;
constructor TVector.Create; overload;
begin
inherited Create;
end;
constructor TVector.Create(ALen:integer); overload;
begin
Create;
SetLength(FElements,ALen);
end;
constructor TVector.Create(AValue:TVector); overload;
var i:integer;
begin
Assert(Assigned(AValue), 'Empty vector');
SetLength(FElements,AValue.Count);
for i:=0 to AValue.Count-1 do
Elements:=AValue.Elements;
end;
procedure TVector.MulToNumber(value:real);
var
i:integer;
begin
for i:=0 to Count-1 do
Elements:=Elements*value;
end;
function TVector.Dotproduct(AValue:TVector): real;
var p:real;
i:integer;
begin
Assert(Assigned(AValue), 'Empty vector');
Assert(Count = AValue.Count, 'Invalid vector');
p:=0;
for i:=0 to Count-1 do
p:=p+Elements*AValue.Elements;
Result:=p;
end;
end.
Помогите вставить сюда процедуру вычитания векторов
unit UnitVectors;
interface
uses
Classes, SysUtils;
type
TVector = class
private
FElements:array of real;
function GetCount:integer;
function GetElements(index:integer):real;
function GetNorma:real;// выдает длину ветора (здесь длина это длина)
procedure SetElements(index:integer;AValue:real);
public
constructor Create; overload; //создает нулевой вектор днины=0 (здесь длина это кол-во элементов)
constructor Create(ALen:integer); overload; //создает не заполненный вектор днины=ALen (здесь длина это кол-во элементов)
constructor Create(AValue:TVector); overload;//создает копию вектора AValue
procedure Add(AValue:TVector);// сумма векторов
procedure MulToNumber(value:real);// умножает вектор на число value
function Dotproduct(AValue:TVector): real;// скалярное произведение на вектор AValue
property Elements[index:integer]:real read GetElements write SetElements;
property Count:integer read GetCount;
property Norma:real read GetNorma;
end;
implementation
function TVector.GetCount:integer;
begin
Result:=Length(FElements);
end;
function TVector.GetElements(index:integer):real;
begin
Assert((index >= 0) and (index < Length(FElements)), 'Invalid index');
Result:=FElements[index];
end;
procedure TVector.Add(AValue:TVector);// сумма векторов
var i:integer;
begin
Assert(Count = AValue.Count, 'Invalid vector');
for i:=0 to AValue.Count-1 do
Elements:=Elements+AValue.Elements;
end;
function TVector.GetNorma:real;
var p:real;
i:integer;
begin
p:=0;
for i:=0 to Count-1 do
p:=p+(Elements*Elements);
Result:=sqrt(p);
end;
procedure TVector.SetElements(index:integer;AValue:real);
begin
Assert((index >= 0) and (index < Length(FElements)), 'Invalid index');
FElements[index]:=AValue;
end;
constructor TVector.Create; overload;
begin
inherited Create;
end;
constructor TVector.Create(ALen:integer); overload;
begin
Create;
SetLength(FElements,ALen);
end;
constructor TVector.Create(AValue:TVector); overload;
var i:integer;
begin
Assert(Assigned(AValue), 'Empty vector');
SetLength(FElements,AValue.Count);
for i:=0 to AValue.Count-1 do
Elements:=AValue.Elements;
end;
procedure TVector.MulToNumber(value:real);
var
i:integer;
begin
for i:=0 to Count-1 do
Elements:=Elements*value;
end;
function TVector.Dotproduct(AValue:TVector): real;
var p:real;
i:integer;
begin
Assert(Assigned(AValue), 'Empty vector');
Assert(Count = AValue.Count, 'Invalid vector');
p:=0;
for i:=0 to Count-1 do
p:=p+Elements*AValue.Elements;
Result:=p;
end;
end.