программа высчитывает скалярное произв векторов, а как можно осуществить код для сложения и умножения векторов, помогите пожалуйста на делфи сделать
Код:
type
TVecArray = array of Double;
TForm1 = class(TForm)
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
LabeledEdit4: TLabeledEdit;
LabeledEdit5: TLabeledEdit;
LabeledEdit6: TLabeledEdit;
LabeledEdit7: TLabeledEdit;
LabeledEdit8: TLabeledEdit;
LabeledEdit9: TLabeledEdit;
LabeledEdit10: TLabeledEdit;
LabeledEdit11: TLabeledEdit;
LabeledEdit12: TLabeledEdit;
Button1: TButton;
LabeledEdit13: TLabeledEdit;
LabeledEdit14: TLabeledEdit;
Label7: TLabel;
procedure Button1Click(Sender: TObject);
private
function Summ(A, B: TVecArray): Double;
{ Private declarations }
public
{ Public declarations }
end;
// Подсчет скалярного произведения
function DotProduct(A, B: TVecArray): Double;
// Среднее арифметическое
function ArithmeticMean(A: TVecArray):Double;
// Среднее геометрическое ПОЛОЖИТЕЛЬНЫХ элементов массива
// (если их нет возвращается -1)
function GeometricMean(A: TVecArray): Double;
var
Form1: TForm1;
x, y, z, p: TVecArray;
xy, zp: Double;
implementation
{$R *.dfm}
// Подсчет скалярного произведения
function DotProduct(A, B: TVecArray): Double;
var
i: integer;
begin
Result := 0;
for i := Low(A) to High(A) do
Result := Result + A[i]*B[i];
end;
// Среднее арифметическое
function ArithmeticMean(A: TVecArray):Double;
var
i: Integer;
sum: Double;
begin
sum := 0;
for i := Low(A) to High(A) do
sum := A[i] + sum;
Result := sum/Length(A);
end;
// Среднее геометрическое ПОЛОЖИТЕЛЬНЫХ элементов массива
// (если их нет возвращается -1)
function GeometricMean(A: TVecArray): Double;
var
i, n: Integer;
mult: Double;
begin
mult := 1;
n := 0;
for i := Low(A) to High(A) do
if A[i] > 0 then
begin
mult := A[i]*mult; // Произведение положительных элементов
inc(n);
end;
if n > 0 then Result := exp( (1/n) * Ln(mult)) // Нахождение корня n-й степени из произведения
else Result := -1;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
SetLength(x, 3);
// Заполняем вектор x
x[0] := StrToFloat(LabeledEdit1.Text);
x[1] := StrToFloat(LabeledEdit2.Text);
x[2] := StrToFloat(LabeledEdit3.Text);
SetLength(y, 3);
// Заполняем вектор y
y[0] := StrToFloat(LabeledEdit4.Text);
y[1] := StrToFloat(LabeledEdit5.Text);
y[2] := StrToFloat(LabeledEdit6.Text);
SetLength(z, 4);
// Заполняем вектор z
z[0] := StrToFloat(LabeledEdit7.Text);
z[1] := StrToFloat(LabeledEdit8.Text);
z[2] := StrToFloat(LabeledEdit9.Text);
z[3] := StrToFloat(LabeledEdit10.Text);
SetLength(p, 4);
// Заполняем вектор p
p[0] := StrToFloat(LabeledEdit11.Text);
p[1] := StrToFloat(LabeledEdit12.Text);
p[2] := StrToFloat(LabeledEdit13.Text);
p[3] := StrToFloat(LabeledEdit14.Text);
// Расчет произведений
xy := DotProduct(x, y);
zp := DotProduct(z, p);
Label5.Caption := Format('(X, Y) = %.3f', [xy]);
Label6.Caption := Format('(Z, P) = %.3f', [zp]);
end;