Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-11-2008
yuNesko yuNesko is offline
Registrado
 
Registrado: oct 2006
Posts: 2
Poder: 0
yuNesko Va por buen camino
programa C++ que solicite 2 vectores desde el teclado


Hola : pueden ayudarme un poco en la construccion de un programa
, que solicite 2 vectores desde el teclado y calcule su
producto escalar y su producto vectorial en Rn.

no se como pasarlo a la estructura que me enseñaron ; como por ej :

EditNormA->Text=FloatToStr(NormaEuclidiana(va)); Es con interfaz grafica.


Responder Con Cita
  #2  
Antiguo 08-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, nos tendrias que poner como es la estructura que quieres llenar. Para pasar un texto a un vector podrias usar algo como esto:

Código:
// formato de vector : (1 2 1 3.4 2)
double *StringToVector(unsigned char *s)
{
    TStrings *ss;
    double *res;
    
    ss = TStringList->Create;

    s = StringReplace(s,"(","",[]);
    s = StringReplace(s,")","",[]);
    
    ss->CommaText = s;
    SetLength(res,ss->Count); // no se si existe en c++. si no fuera asi, se deberia usar getmem(ss,ss->Count*sizeof(double));

    for (int i=0;i<ss->Count;i++)
          res[i] = StrToFloat(ss[i]);

    ss->Free;

    return(res);
}
llamando a la funcion asi

Código:
{
     double *v;

     v = StringToVector("(1 2 1 3)");
     v = StringToVector(Edit1->Text);
     ...
     SetLength(v,0); // o bien freemem(v);
}
Para pasar de vector a string, seria algo asi

Código:
unsigned char *VectorToString(double *v)
{
     unsigned char *s;
     getmem(s,Length(v)*sizeof(unsigned char));

     for(int i=0;i<Length(v);i++)
     s[i] = char(FloatToStr(v[i]));

    return(s);
}
y llamarla con

Código:
{
      unsigned char *s;
      double *v;

      SetLength(v,3);

      v[0] = 1;
      v[1] = 4;
      v[2] = 3;

      s = VectorToString(v); 
      ShowMessage(s);

      freemem(s);
      SetLength(v,0);
}
PD : mi C esta bastante oxidado, por lo que seguro que te saltan bastantes errores de compilacion, aparte que se podran usar classes para los vectores y las cadenas.
Responder Con Cita
  #3  
Antiguo 08-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Por otra banda, para calcular el producto vectorial en Rn tendras que usar determinantes y, por consiguiente, matrices. Te recomiendo que si no las tienes, te prepares unas clases con los metodos concretos poco a poco (vector, matriznporm, matrizcuadrada, matrizcuadrada->determinante) etc...
Responder Con Cita
  #4  
Antiguo 08-11-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 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
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Controlar el teclado desde una aplicación delphi richy08 Varios 8 05-11-2008 23:19:13
vectores... mauriciofox Gráficos 0 25-02-2005 05:28:17
Lanzar programa desde mi programa Pablo Carlos API de Windows 32 09-09-2004 13:56:26
Ejecutar un programa externo desde un programa de Delphi Roger_Fernandez Varios 3 02-09-2004 18:05:36
Vectores,Asscii jorgito PHP 1 26-07-2004 20:00:08


La franja horaria es GMT +2. Ahora son las 05:04:24.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi