29.10.2021, 21:28 | #1 (permalink) |
Новичок
Регистрация: 29.10.2021
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Процедура вычитания векторов
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[i]:=Elements[i]+AValue.Elements[i]; end; function TVector.GetNorma:real; var p:real; i:integer; begin p:=0; for i:=0 to Count-1 do p:=p+(Elements[i]*Elements[i]); 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[i]:=AValue.Elements[i]; end; procedure TVector.MulToNumber(value:real); var i:integer; begin for i:=0 to Count-1 do Elements[i]:=Elements[i]*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[i]*AValue.Elements[i]; Result:=p; end; end. |
29.10.2021, 21:28 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Прочитайте похожие темы, это не сложно Списки точек и векторов Pascal процедура Процедура, Паскаль Процедура |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|