Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-11-2013
paquechu paquechu is offline
Miembro
 
Registrado: oct 2008
Posts: 51
Poder: 16
paquechu Va por buen camino
Smile Pasar como argumento solo una dimension de un array bidimensional

Buenos días,
Tengo un problema a la hora de pasar como argumento una dimension de un array bidimensional que no se como solucionar.
Queria ver si me podeis echar una mano con esto.

Tengo una función calcular(numeros: array of byte).

Tengo un array bidimensional declarado de esta forma:

bidimensional: array of array of byte;

La segunda dimension de esta variable coincide en tamaño con el de la variable numeros y contienen el mismo tipo de datos, pero no se, si es que es posible, como pasarlo. He probado varias formas pero siempre obtengo errores en la compilación:

Calcular(bidimensional[1]) -> da error: Incompatible types: Array and dynamic array
Calcular(bidimensional[1,0]) -> da error: Incompatible types array and byte..

Se puede conseguir?
Saludos
Responder Con Cita
  #2  
Antiguo 10-11-2013
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Tal vez puedas hacer algo parecido a esto. Nota que, por claridad, he usado "strings" en lugar de "bytes". Primero declaramos dos tipos de array, de una y de dos dimensiones:

Código Delphi [-]
type
  TOneDimensionalArray = array of string;
  TTwoDimensionalArray = array of array of string;

A continuación nuestro procedimiento "Calculate", que, recibe como argumento un array de una dimensión:

Código Delphi [-]
procedure Calculate( anArray : TOneDimensionalArray );
begin
  ShowMessage( anArray[ 0 ] );
end;

El siguiente es el código en que hacemos uso de lo anterior:

Código Delphi [-]
var
  // Vamos a trabajar con un array de dos dimensiones
  tda : TTwoDimensionalArray;
begin

  // Añadimos un elemento al array de dos dimensiones
  SetLength( tda, 1 );

  // Y el correspondiente elemento en el de una dimensión
  SetLength( tda[ 0 ], 1 );

  // Establecemos el valor del elemento
  tda[ 0 ][ 0 ] := 'Hello world!';

  // Y por último lo pasamos al procedimiento, como ves
  // indicando que lo que pasamos es un array de una dimensión,
  // es decir, tal como el procedimiento "Calculate" espera
  Calculate( TOneDimensionalArray( tda[ 0 ] ) );
end;

Todo el código junto en una unidad/formulario:

Código Delphi [-]
unit UMainForm;

interface

uses
  Forms, Classes, Controls, StdCtrls;

type
  TMainForm = class(TForm)
    SampleButton: TButton;
    procedure SampleButtonClick(Sender: TObject);
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

uses
  Dialogs;

type
  TOneDimensionalArray = array of string;
  TTwoDimensionalArray = array of array of string;

procedure Calculate( anArray : TOneDimensionalArray );
begin
  ShowMessage( anArray[ 0 ] ); // Mostrará "Hello world!"
end;

procedure TMainForm.SampleButtonClick(Sender: TObject);
var
  // Vamos a trabajar con un array de dos dimensiones
  tda : TTwoDimensionalArray;
begin

  // Añadimos un elemento al array de dos dimensiones
  SetLength( tda, 1 );

  // Y el correspondiente elemento en el de una dimensión
  SetLength( tda[ 0 ], 1 );

  // Establecemos el valor del elemento
  tda[ 0 ][ 0 ] := 'Hello world!';

  // Y por último lo pasamos al procedimiento, como ves
  // indicando que lo que pasamos es un array de una dimensión,
  // es decir, tal como el procedimiento "Calculate" espera
  Calculate( TOneDimensionalArray( tda[ 0 ] ) );
end;

end.

Nota que sería bien cambiar el nombre de los tipos de array a unos más descriptivos.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 10-11-2013
paquechu paquechu is offline
Miembro
 
Registrado: oct 2008
Posts: 51
Poder: 16
paquechu Va por buen camino
Muchas gracias.
Muy bien detallado :-)
Un abrazo.
Responder Con Cita
  #4  
Antiguo 10-11-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
paquechu,

Cita:
Empezado por paquechu
...Pasar como argumento solo una dimensión de un array bidimensional...¿Se puede conseguir?...
Revisa este código:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
const
   LimMax = 10;
var
   i,j : Integer;
   A1 : Array[1..LimMax] of Integer;
   A2 : Array[1..LimMax,1..LimMax] of Integer;

   // Muestra los elementos de un arreglo pasado como parámetro
   procedure ShowArray(A3 : Array of Integer);
   var
      i : Integer;
   begin
      for i := Low(A3) to High(A3) do
         ShowMessage(IntToStr(A3[i]));
   end;

begin
   // Inicializa los arreglos A1 y A2 : Coloca un 0 en cada elemento
   FillChar(A1,SizeOf(A1),0);
   FillChar(A2,SizeOf(A2),0);

   // Carga en cada elemento del arreglo A2 el valor de la dimensión
   for i := 1 to LimMax do
      for j := 1 to LimMax do
         A2[i,j] := i;

   // Mueve la dimensión 5 (Quinto elemento de un arreglo de 2 dimensiones) a un arreglo de una sola dimensión
   Move(A2[5],A1,SizeOf(A1));

   // Mueve la dimensión 7 (Séptimo elemento de un arreglo de 2 dimensiones) a un procedimiento como parámetro
   ShowArray(A2[7]);
end;
El código anterior define un arreglo de dos dimensiones y pasa solo la dimensión que desea manipular en un momento dado a un arreglo de una dimensión y a un procedimiento como parámetro del mismo.

Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 10-11-2013 a las 20:00:39.
Responder Con Cita
  #5  
Antiguo 10-11-2013
paquechu paquechu is offline
Miembro
 
Registrado: oct 2008
Posts: 51
Poder: 16
paquechu Va por buen camino
Pues también me vale ;-)
Saludos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Array bidimensional dinámico harpo Varios 3 31-03-2015 15:11:17
Pasar array como parámetro santiago14 Varios 10 17-09-2008 14:31:00
PLSQL - Pasar un array como parametro. movorack SQL 1 06-03-2007 20:07:59
Liberar array bidimensional de botones Raze Varios 2 16-05-2006 13:45:14
pasar como parámetro un array bidimensional nsr048 Varios 2 08-11-2005 11:54:20


La franja horaria es GMT +2. Ahora son las 20:58:54.


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
Copyright 1996-2007 Club Delphi