Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cambiar indice inicial de un Array Dinamico (https://www.clubdelphi.com/foros/showthread.php?t=63446)

jconnor82 14-02-2009 00:17:33

Cambiar indice inicial de un Array Dinamico
 
Hola a todos, tengo una consulta:

He creado un arreglo dinamico:

Código Delphi [-]
     type
     
       MatrixArray = array of array of extended;
     
     ...
     
     var
       Matrix: MatrixArray;
     ...
       // Fijo las dimensiones del arreglo
       SetLength(Matrix, 4, 4);
       // Ingreso valores
       for i:=0 to 3 do
          for j:=0 to 3 do
           Matrix[i, j] := i + j;
   ...

Mi consulta: para acceder al primer elemento del arreglo tengo q hacerlo desde el indice 0, hay alguna forma de cambiar el indice con el q se inicia, por ejemplo uno, esto lo quiero de esa forma, porque, como se habran dado cuenta el arreglo es una matriz y el primer elemento tiene que ser Matriz[1, 1].

O almenos tener un arreglo dinamico de una fila que se pueda acceder de la siguiente forma:

Código Delphi [-]
     var
       Fila: array of Extended;
     ...
       SetLength(Fila, 3);
       
       {Rutina q cambia el indice inicial de 0 a 1}
     
       // Para acceder a la fila se haria de la siguiente forma
       for i:=1 to 3 do
         showmessage(Fila[i]);
     ...

Otra razon por la que tiene que estar de esa forma es porque es parte de un objeto q estoy creando y da como resultado lo q contiene una fila o columna, y esta tiene q empezar desde la fila 1.

Gracias por las respuestas.

PD: No se si es idea mia, pero, esto ya lo habia visto por el foro, lo he buscado, pero, no he encontrado alguna referencia. Ojala y aparezca en Temas Similares :D

Al González 14-02-2009 02:22:15

No encuentro que esto sea muy necesario de hacer, porque basta restar 1 o sumar 1 cuando convenga. Pero si de todas formas quieres hacerlo como dices, te doy una forma de aproximarte:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
Type
  TA = Array [1..1000000] Of Extended;
Var
  Fila :Array of Extended;
  FilaX :^TA Absolute Fila;
  I :Integer;
Begin
  SetLength (Fila, 3);
  Fila [0] := 17;
  Fila [1] := 10;
  Fila [2] := 1974;

  For I := 1 To 3 {Length (Fila)} Do
    Showmessage (FloatToStr (FilaX [i]));
end;

En el ejemplo, he declarado la variable FilaX para que ocupe la misma posición de memoria (Absolute) que la variable Fila. Esto funciona gracias a que un arreglo dinámico es en realidad un puntero al primer valor que contiene. Y como a FilaX le hemos dado declaración de puntero (^), ambas variables apuntarán a la misma región de memoria, pero el compilador tomará las referencias a FilaX con el índice base 1 (ya que así está declarado el tipo auxiliar TA).

Saludos.

Al González. :)

jconnor82 14-02-2009 15:38:35

Hola... tienes razon, al parecer para que se vea mejor y practico tendre q volver privada la propiedad que obtiene una columna o fila, ya q esto lo puedo trabajar de forma oculta... gracias por tu respuesta.


La franja horaria es GMT +2. Ahora son las 06:04:32.

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