Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Inicializar arrays multidimensionales (https://www.clubdelphi.com/foros/showthread.php?t=43915)

Wellnic 23-05-2007 21:37:36

Inicializar arrays multidimensionales
 
Hola:

¿Se pueden inicializar arrays de varias dimensiones? Es decir:

Si Var unidim: Array[0..5] Of Integer= (5, 6, 97, 928, 45, 8765);

Var mltdim: Array[0..5, 0..7] Of Integer= ?

Delphius 23-05-2007 22:59:01

Para hacer lo que pides, debes declarar arrays dinámicos.

Código Delphi [-]
MiArray = array of Integer;

En la unidad Types cuentas con unos arrays dinámicos ya definidos. Todos tienen como nomeclatura:
DynArray......

Y para darle tamaño tienen la función SetLength(). En la sección de trucos hay dos ejemplos de como usarlos: N° 378 y 379.

La parte de inicializar, te la dejo como tarea. Creo que con el material que te pasé puedes hacerte una idea.

Si tienes dudas, avisa.
Saludos,

Wellnic 24-05-2007 00:48:05

Me temo que en Delphi 3 no se implementan los arrays dinámicos... En fin... tendré que ingeniármelas de otro modo.

Gracias de todas formas. :)

Lepe 24-05-2007 17:20:01

Si, cada fila entre paréntesis también:
Código Delphi [-]

var x: array [0..2,0..4] = 
( (1, 2 , 3),
  (5, 5, 5),
  (1, 2 , 3),
  (1, 2 , 3),
  (1, 2 , 3),
);

La pega es que no se puede declarar dentro de una función, pero si "x" es una variable global (de implementación o de interface de un archivo .pas),entonces, se permite estas cosas (creo recordar vagamente.... uf... es que hoy estoy de un vago.... :D)

Saludos

seoane 24-05-2007 17:27:02

Y el compilador dice .... que Lepe tiene razón, solo que confundió filas con columnas :p :D

Código Delphi [-]
var x: array [0..4,0..2] = 
( (1, 2 , 3),
  (5, 5, 5),
  (1, 2 , 3),
  (1, 2 , 3),
  (1, 2 , 3)
);

Y al menos a mi, me deja declararla como variable global.

Wellnic 25-05-2007 00:49:39

OK, gracias. :) Esa debió de ser la única combinación que no había probado... Teengggo lla ccabecha... ())( :confused: :confused: :confused:)(())

Lepe 25-05-2007 17:42:06

A ver si soy capaz de desliar este desaguisado.

En principio puse que si "x" es una variable global, no se podía inicializar y envié el mensaje al foro. Me quedé pensando y dije... no... Delphi no deja inicializar el array dentro de un procedimiento, lo verifiqué, edité mi mensaje y lo corregí.

(eso de "recordar vagamente" lo dejé como broma)

Obviamente Neftali había respondido al mensaje original y mi edición fue posterior.

Delphi dice: "Cannot initialize local variable", por tanto, debe ser una variable global (de interface o implementation) para poder inicializarla.

El tema de filas y columnas... cierto, estoy con un StringGrid liado y ya no sé ni quien soy yo :D.

Saludos

Delphius 25-05-2007 17:53:29

Cita:

Empezado por Lepe
Obviamente Neftali había respondido al mensaje original y mi edición fue posterior.

¿Ummm?
Lepe, creo que deberías tomarte un pequeño descanso.
No veo que Neftali haya posteado por aquí.:confused:

Saludos,

Robert01 25-05-2007 19:16:12

Una pregunta sobre array multidimensionales y delphi 3:

¿No se puede hacer de la siguiente forma?

Código Delphi [-]
Const nmax = 100;

type Miarray =[1..Nmax,1..Nmax] of integer;

Var a : MiArray;

implementation

procedure X();
  var n : integer;
  begin
    setlength(a,n,n);
    .
    .
    .
  end;

end.

Saludos

Lepe 25-05-2007 19:18:46

Cita:

Empezado por Delphius
¿Ummm?
Lepe, creo que deberías tomarte un pequeño descanso.
No veo que Neftali haya posteado por aquí.:confused:

Saludos,

Tienes toda la razón... vamos toda, que no te falta nada.

Perdón seoane.

roman 25-05-2007 19:44:52

Cita:

Empezado por Lepe
Delphi dice: "Cannot initialize local variable", por tanto, debe ser una variable global (de interface o implementation) para poder inicializarla.

Puede intentarse algo "local" así:

Código Delphi [-]
{$writeableconst on}
procedure Algo;
const
  x: array [0..4,0..2] of Integer=
  ( (1, 2 , 3),
    (5, 5, 5),
    (1, 2 , 3),
    (1, 2 , 3),
    (1, 2 , 3)
  );

begin
  x[0,0] := 84;
end;
{$writeableconst off}

// Saludos


La franja horaria es GMT +2. Ahora son las 03:56:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi