Ver Mensaje Individual
  #4  
Antiguo 08-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Reputación: 0
coso Va por buen camino
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;
Responder Con Cita