Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #3  
Antiguo 30-06-2010
TecnoBestia TecnoBestia is offline
Miembro
 
Registrado: jun 2010
Posts: 35
Poder: 0
TecnoBestia Va por buen camino
Aclaración

Hola ecfisa gracias por responder tan pronto.

PadreDominante y PadreRecesivo son de tipo TVector;

donde TVector es un tipo definido por la instrucción:
type
TVector = array of Double;
TMatriz = array of TVector;

Instancias es una matriz de tipo TMatriz, estos tipos son declarados en forma pública en una Unit denominada Declaraciones, en donde se define Pública tambien la matriz Instancias.

Las variables PadreDominante y PadreRecesivo son declaradas privadas dentro de un procedure, estas variables serán filas tomadas aleatoriamente de la matriz Instancias que debo manipular sin modificar las filas originales de la matriz.

El problema que tengo es le siguiente:
PadreDominante:=Instancias[P1];
PadreRecesivo:=Instancias[P2];
(note que solo estoy colocando una corredenada P1 y P2, eso lo indica a Delphi que tome la fila P1 para el padre dominante y la fila P2 para el padre recesivo, es toda la fila no un valor).

Cuando modifico las variables anteriores PadreRecesivo, por ejemplo, este también modifica la fila P2 de la matriz Instancia, y esto es lo que no quiero. Quiero poder modificar PadreRecesivo sin modificar la fila P2 de Instanicas.

Lo que está pasando es que PadreRecesivo apunta al mismo espacio de memoria que tiene la fila P2. Por lo que al modificar una modifico la otra.

Necesito saber si hay alguna forma de evitar esto y hacer una copia independiente de la fila P1 y P2 de forma que al modificar estas copias no se altere las filas originales.

Solucione el problema copiando entrada por entrada (elemento por elemento) las filas de la matriz con la siguiente funición:

function Copiar(V:TVector):TVector;
var
VV:TVector;
Len,i:Integer;
begin
Len:=Length(V);
SetLength(VV,Len);
for i:=0 to Len-1 do begin
VV[i]:=V[i];
end;
Result:=VV;
end;

Sin embargo, esto no es óptimo, el programa que estoy haciendo debe poder trabajar con matriz muy grandes 18000 filas aproximadamente y el proceso que realizará durará varias horas, incloso podría durar días, es por esto que requiero hacer las cosas con la mejor implementación posible, utilizando punteros en los casos que se puedan. En este caso requiero hacer una copia.

Espero haber sido lo suficiente explícito.

Gracias por su preciado tiempo y disculpe cualquier molestia.

Última edición por TecnoBestia fecha: 30-06-2010 a las 15:49:03.
Responder Con Cita
 



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
Problemas con duplicacion de datos mentor Conexión con bases de datos 3 22-12-2009 13:07:07
Ayuda con Consulta, Declarar Variables look Firebird e Interbase 3 02-12-2008 15:18:19
Duplicación en MSDE. Delphiboy MS SQL Server 0 30-05-2006 01:57:08
Problema en consulta SQL con variables y format ilichhernandez SQL 6 14-11-2005 20:08:54
Duplicación Cabanyaler MS SQL Server 1 20-10-2003 11:32:10


La franja horaria es GMT +2. Ahora son las 15:38:54.


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