Me he entretenido bastante para responder este post. Dejo aqui el resultado (en delphi)
Código Delphi
[-]
unit vect;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type Vector = array of Extended;
type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function StringToVector(s : string) : Vector;
var
ss : TStrings;
i : integer;
begin
ss := TStringList.create;
s := stringreplace(s,'(','',[]);
s := stringreplace(s,')','',[]);
ss.CommaText := s;
setlength(result,ss.Count);
for i := 0 to ss.Count - 1 do
try
result[i] := strtofloat(ss[i]);
except
ShowMessage('Error de formato en ' + s[i]);
end;
end;
function ProductoEscalar(v1,v2 : Vector): extended;
var
i : integer;
begin
if length(v1) <> length(v2) then
begin
MessageDLG('Vectores de entrada de diferente dimension',mtError,[mbOK],0);
exit;
end;
result := 0;
for i := 0 to length(v1) - 1 do
result := result + v1[i]*v2[i];
end;
function VectorToString(v : vector): string;
var
i : integer;
begin
result := '(';
for i := 0 to Length(v) - 1 do
result := result + ' ' + formatfloat('0.000',v[i]);
result := result + ')';
end;
function ProductoVectorial(u,v : Vector) : vector;
begin
if length(u) <> length(v) then
begin
MessageDLG('Vectores de entrada de diferente dimension',mtError,[mbOK],0);
exit;
end;
if length(u) <> 3 then
begin
MessageDLG('Producto vectorial limitado a vectores en R³',mtError,[mbOk],0);
exit;
end;
setlength(result,3);
result[0] := u[1]*v[2] - u[2]*v[1];
result[1] := u[0]*v[2] - u[2]*v[0];
result[2] := u[0]*v[1] - u[1]*v[0];
end;
procedure TForm1.Button1Click(Sender: TObject);
var
v1,v2 : Vector;
begin
v1 := StringToVector(Edit1.Text);
v2 := stringToVector(Edit2.Text);
Label1.Caption := floattostr(ProductoEscalar(v1,v2));
Label2.Caption := VectorToString(ProductoVectorial(v1,v2));
end;