Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como paso una matriz a una funcion (https://www.clubdelphi.com/foros/showthread.php?t=1965)

Alejo 04-07-2003 00:16:13

Como paso una matriz a una funcion
 
pues el asunto lo dice todo;
¿Como paso una matriz a una funcion?

intente algo asi como

procedure Funcion(a: array of array of byte)

pero no funciona !!!!

andres1569 04-07-2003 00:32:59

Puedes únicamente pasar un array dinámico de una sola dimensión. Para el caso que planteas, mejor definirte un tipo de array, y pasarle un array de ese tipo:
Código:

type 
  MiLista = array of Byte;

function DevuelveNumero (const v: array of MiLista) : Integer;
var
  i, j : Integer;
begin
  for i:=Low(v) to High(v) do
    for j:=Low(v[i]) to High (v[i]) do
      ...
end;

Otra cosa, es preferible, para ganar eficiencia en la forma en que Delphi pasa los parámetros que son matrices dinámicas, anteponer la palabra reservada const si no vas a modificarlo, o si vas a modificarlo var.

Alejo 04-07-2003 18:57:18

oiga men, pero el dato ke necesito pasar es un array multidimensional (una matriz) no un vector....

como se convierte un array de este tipo en vector???

delphi.com.ar 04-07-2003 19:09:04

Andrés te respondió correctamente a lo que tu preguntaste, vale la pena que veas el código que enviaste en el primer post.
Código:

type
  MiArray = array[0..10, 0..10] of Byte;
...
procedure Procedimiento(AValue : MiArray);
begin
  ...
end;


Alejo 04-07-2003 19:21:17

jeje pues sorry es ke estaba confundido pues yo define el array como esto:

Datos:array [0..255] of array [0..255] of Byte ...

solo por curiosidad... ke fue lo ke defini aki???

andres1569 04-07-2003 21:21:49

Hola Alejo:

Lo que Delphi no admite es pasar arrays dinámicos multidimensionales por eso te puse la opción que puedes ver en mi mensaje anterior, con la que vienes a lograr una matriz bidimensional, basando un array dinámico de una dimensión en un tipo que a su vez es otro array dinámico de una dimensión.

Esa limitación se aplica a arrays dinámicos, si el array es estático, sí que puedes pasarlo como parámetro aunque sea bidimensional, ejemplo:
Código:

type
  TMatriz = array [0..100, 0.. 50] of Byte;

function CalculaElementos (Lista: TMatriz) : Integer;
var
  i, j : Integer;
begin
  result := 0;
  for i:=Low(Lista) to High(Lista) do
    for j:=Low(Lista[i]) to High(Lista[i]) do Inc (result);
end;

La diferencia entre dinámicos y estáticos es que en unos no sabes a priori cuántos elementos tienen y en los otros están definidos sus límites desde la sección type.


La franja horaria es GMT +2. Ahora son las 01:42:30.

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