Ver Mensaje Individual
  #9  
Antiguo 10-10-2007
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Reputación: 22
Mick Va por buen camino
Aunque se pudiese realizar una asignacion directa, seria algo ineficiente porque el programa tendria igualmente que copiar los datos de una variable a otra .
La ventaja de usar directamente los datos de los arrays es que es muy rapido no se necesita nunca copiar esos arrrays de un lado a otro ya estan en memoria en su sitio una vez cargado el ejecutable.

Si necesitas la maxima eficiencia, tendrias que trabajar con punteros, aunque se puede ocultar la complejidad de usar punteros definiendo y utilizando una clase que facilite el acceso a los datos.

Todo depende de si esos arrays cambian el numero de columnas y/o filas. Si esos arrays tienen el mismo numero de columnas y filas, lo mas rapido y eficiente es usar un puntero a un array para devolver los datos, ejemplo:

Código Delphi [-]

type
  // Definimos mas filas de las que realmente pudiera tener cualquier array que inicialicemos, como accederemos despues a traves de un puntero
  // no importa que ALineas tenga muchas mas filas que los datos reales.
  ALineas= array [0..1023,0..4] of double;
  PLineas= ^ALineas;

function  proc_L_72_F_32(ns:integer; CC:String): PLineas
begin
   if (nS = 1) AND (cC = '1V') then
      Result := @L_72_F_32_1_1V
   else if (nS = 1) AND (cC = '2V') then
      Result := @L_72_F_32_1_2V
   else if (nS = 1) AND (cC = '3V') then
      Result := @L_72_F_32_1_3V
   end if
end;

function test;
va
 Ptr: PLineas;
begin

 Ptr:=  proc_L_72_F_32( ... );

 // Y Accederiamos a los datos de la siguiente manera
 Ptr^[0,3]; 
 Ptr^[1,2]; 
 Ptr^[2,3]; 
end;

Si los arrays tienen numero de filas variables, el problema es que en un array estatico no se sabe a posteriori cuantas filas tiene asi que o se usa alguna otra constate que nos lo diga (usando un tipo record por ejemplo que almacena tanto el array como el numero de filas) o se crea una ultima fila "en blanco" con algun valor numerico que nunca pueda salir en los datos reales y que marque el final.

Código Delphi [-]

 L_72_F_32_1_3V: array [0..3,0..4] of double =
   (
      ( 1,2,3,4,1 ),
      ( 2,3,4,5,3 ),
      ( 2,3,3,4,8 ),
      ( 2,2,3,4,9 ),
      ( 0,0,0,0,0 )   // cuando recorremos el array al llegar a esta fila sabemos que no hay mas
   );

Si el numero de filas y columnas varía luego es un pelin mas complejo, si realmente necesitas un sistema con todo variable (filas y columnas) , indicalo e intentare poner un ejemplo.

Saludos

Última edición por Mick fecha: 10-10-2007 a las 12:04:34.
Responder Con Cita