PDA

Ver la Versión Completa : Inicializar arrays multidimensionales


Wellnic
23-05-2007, 21:37:36
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.


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 (http://www.clubdelphi.com/trucos/index.php?id=378&scroll=0&scrollb=0) y 379 (http://www.clubdelphi.com/trucos/index.php?id=379&scroll=0&scrollb=0).

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:


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


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
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?


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
¿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
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í:


{$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