Foros del Web » Programación para mayores de 30 ;) » C/C++ »

A ver si alguien ve donde me equivoco.

Estas en el tema de A ver si alguien ve donde me equivoco. en el foro de C/C++ en Foros del Web. Estoy desarrollando una clase contenedor-herramientas para vectores que dispone de una función que multiplica un vector escalarmente con otro. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código c++: Ver original ...
  #1 (permalink)  
Antiguo 06/11/2010, 05:46
 
Fecha de Ingreso: noviembre-2010
Mensajes: 3
Antigüedad: 9 años
Puntos: 0
Información A ver si alguien ve donde me equivoco.

Estoy desarrollando una clase contenedor-herramientas para vectores que dispone de una función que multiplica un vector escalarmente con otro.

Código c++:
Ver original
  1. float mult(const ap_vector& data) //multiplica escalarmente con el vector devolviendo el resultado y null si
  2.                                 //tienen distinta dimensión
  3.         {
  4.             float result;
  5.             if (data.dimension != dimension)
  6.             {
  7.                 return 0; //devuelve null si no coinciden las dimensiones
  8.             }
  9.             else
  10.             {
  11.                 int k;
  12.                 for(k=0;k<dimension;k++){result+=elements[k]*data.elements[k];}
  13.                 return result;
  14.             }
  15.         }

la función anterior funciona muy bien y devuelve correctamente el resultado. El problema es el siguiente, deseao crear una nueva función que devuelva la distancia euclidea del propio vector, para ello necesito que se multiplique por si mismo y se realice la raiz cuadrada (libreria correctamente incluida). Aprovechando las características de encapsulación y ahorro de código intenté la expresión autoincluida.

Código c++:
Ver original
  1. float dist(void) //devuelve la distancia euclidea del vector.
  2.         {
  3.  
  4.             return sqrt(mult(*this)); //también intenté con this sólo.
  5.            
  6.         }

y también intenté:

Código c++:
Ver original
  1. float dist(void) //devuelve la distancia euclidea del vector.
  2.         {
  3.             ap_vector *temp;
  4.             temp=new ap_vector(*this);
  5.             return sqrt(mult(temp));
  6.             delete temp;
  7.         }

El problema es con el uso de this y no es el primero que me da problemas. El problema lógicamente tiene solución por otro lado pero la pregunta es un reto para los "freaks" ya que no hay una expresión tan elegante y corta como

return sqrt(mult(this));


y me gustaría saber porqué no funciona (probablemente funcione sin problema en Java).

¡Reto para programadores!

Etiquetas: c++, euclidea, programador, reto, vectores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:03.