Delphi - eliminar indices en arreglos

 
Vista:

eliminar indices en arreglos

Publicado por iraim (14 intervenciones) el 29/06/2006 01:04:54
hola
mi pregunta es la siguiente tengo tres arreglos A B y C
el A contiene 4 indices el B contiene 3 indices y el C 2
necesito obtener por ejemplo del arreglo A el valor que tenga en el indice 2 luego eliminar el indice 2 para pasar al arreglo B los demas indices que contienes otros datos y asi sucesivamente con el arreglo C
de antemano gracias ...

PD (No es eliminar el valor del indice 2 sino el indice como tal para que los indices 3 y 4 ocupen los nuevos indices 2 y 3)
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:eliminar indices en arreglos

Publicado por Edgar Rodriguez (172 intervenciones) el 01/07/2006 06:43:40
Estás usando arreglos o punteros? Porque con arreglos, no puedes "que yo sepa" con ningún lenguaje eliminar los índices, los arreglos cuando los defines en la zona de tipos, tienen un tamaño definido e inmodificable, si son punteros sí puedes hacerlo. Claro que hay una forma que no es ortodoxa y es definir los arreglos como tamaño [0..0] pero tendrías que analizar mucho el código para implementarlo.

{$R-} {hay que desactivar la revisión de rangos o el compilador aullará}
type
MiRegistro = record
Dato1 : integer;
Dato2 : word;
end;
ArregloMiRegistro = array [0..0] of MiRegistro;
PMiRegistro = ^ArregloMiRegistro;
var
miPuntero : PMiRegistro;
ElEnesimoElemento, cantidad_elementos : Word;
begin
{Aquí puedes especificar en tiempo de ejecución cuantos elementos necesitas}
cantidad_elementos := StrToInt(Edit1.Text);
{Como es un arreglo grande, hay que posicionarlo en la RAM para}
{definir un arreglo dinámico de ArregloMiRegistro[0..cantidad_elementos-1].}
GetMem(miPuntero, cantidad_elementos * SizeOf(MiRegistro));
try
{Para saber el número del elemento}
ElEnesimoElemento := miPuntero^[Variable_indice_de_elemento].Dato1;
{La declaración del arreglo [0..0] hace que esto sea posible }
finally
FreeMem(miPuntero, SizeOf(MiRegistro) * cantidad_elementos);
end;
end;

Como puedes ver, se maneja punteros con esa clase de declaración, pero tendrás que tener mucho cuidado porque todo lo que crees con GetMem, tendrás que destruirlo con FreeMem.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar