Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-03-2008
Avatar de NeoAnderson
NeoAnderson NeoAnderson is offline
Miembro
 
Registrado: feb 2008
Posts: 17
Poder: 0
NeoAnderson Va por buen camino
Question Cómo paso por parametro una matriz??

Hola nuevamente a toda la comunidad, agradeciendo de antemano la ayuda que siembre me brindan, y la que espero puedan darme una vez mas para un problema que creo es cosa de niños, pero pues aun no he dado con la solucion.

Pues es eso, cómo paso por parametro una funcion en un procedimiento

intente cosas como
prodedure miProc(var mat:array[0..x,0..x] of integer)
prodedure miProc(var mat:array of integer), etc, pero pues no doy con la respuesta correcta, espero puedan hecharme una mano, ah, y aprovechando la oportunidad, tambien quisiera saber cómo puedo regresar una matriz con una funcion.

Gracias nuevamente.
Responder Con Cita
  #2  
Antiguo 11-03-2008
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,

Tienes que hacer algo así:

Código Delphi [-]
type
  TMyArray: array of integer;

{...}

function Foo(pArray: TMyArray): TMyArray;
begin
  {...}
end;
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 11-03-2008
Avatar de NeoAnderson
NeoAnderson NeoAnderson is offline
Miembro
 
Registrado: feb 2008
Posts: 17
Poder: 0
NeoAnderson Va por buen camino
Gracias dec por la respuesta, si, seguro que debe ser asi como lo planteas, es solo que aun soy muy novato y tuve problemas al declarar el tipo, es decir, lo hice de la siguiente manera

Código Delphi [-]
unit Main
interface
uses
{........}

type
TMyArray: array of integer; {.....}
{....}

pero de esta manera me marca el error: Expected an identifier but Array found, y si lo hago de la siguiente manera

Código Delphi [-]
unit Main
interface
uses
{........}
type
TMyArray= array of integer; {.....}
Marca: Expected ":" but "=" found

Si lo declaro de la ultima manera en la parte de implementation, entonces si funciona, pero si los "procedure" o "function" de la parte de type ocupan este nuevo tipo entonces marca el error Undeclared identifier "TMyArray"

y pues yo me imagino que lo estoy declarando en el lugar equivocado, espero puedas indicarme el lugar correcto para declarar un tipo predefinido, ademas, pienso pasarle esa matriz como parametro a un procedimiento que está en otro form, por ello creo que no serviría declarar el tipo en la parte de implementation. Espero puedas aclararme esta duda

Gracias nuevamente por la ayuda.
Responder Con Cita
  #4  
Antiguo 11-03-2008
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,

Creo que el problema estriba en que hay que declarar el tipo en cuestión dentro de la cláusula "interface" (para que esté disponible en otras unidades que añaden aquella donde se declare el tipo) o en la cláusula "implementation". Y, según tú mismo sabes, no puede declararse en otro lugar. Así pues:

Código Delphi [-]
unit Main;

interface

uses
  {........}

type
  TMyArray: array of integer; {.....}

{....}

La declaración de "TMyArray" está fuera de "interface", pero, pareciera que también queda fuera de "implementation". Debería quedar algo como esto:

Código Delphi [-]
unit Main;

interface

type
  TMyArray: array of integer; {.....}

uses
  {........}

{....}

O bien:

Código Delphi [-]
unit Main;

interface

uses
  {........}

implementation

type
  TMyArray: array of integer; {.....}

{....}
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 12-03-2008
Avatar de NeoAnderson
NeoAnderson NeoAnderson is offline
Miembro
 
Registrado: feb 2008
Posts: 17
Poder: 0
NeoAnderson Va por buen camino
gracias nuevamente por tu respuesta dec, sin embargo tampoco resultó de la manera que me indicaste, que fue la siguiente

Código Delphi [-]
unit Main;

interface

type
  TMyArray = array of integer; {.....}

uses
  {........}
porque me marca el error "Declaration expected but USES found"

y en implementation si puedo declarar el tipo, pero tampoco me sirve, pues mi programa tiene la siguiente estructura.

Código Delphi [-]
unit Main

interface

uses {.....}

type
    {......}
    procedure RecibeMatriz(var mat:TMyArray); //aqui marca error

    private
    { Private declarations }

    public
    { Public declarations }
    end;

var
  FMain: TFMain;

implementation
{$R *.dfm}
type TMyArray= array[0..2,0..2] of integer;
{......}

y como dije, de esa manera si puedo declarar el tipo, pero en la linea que comenté en el codigo me marca "Undeclared identifier TMyArray" por lo que imagino que si debe ser en un nivel mas arriba la declaracion, solo que no funcionó dentro de interface. Ya probe declararlo en varias partes, pero sigo sin obtener resultados.

He hecho algo mal sobre tu sugerencia?? Gracias nuevamente

Última edición por NeoAnderson fecha: 12-03-2008 a las 01:16:57.
Responder Con Cita
  #6  
Antiguo 12-03-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola,
No deberías tener problemas...

No se a que se deba el error del uses, pero mi primera sospecha se deba a que tienes un uses "vacio", es decir que no haces uso de ninguna unidad.
Si no vas a usar ninguna, borra la sección uses. Te debería quedar algo asi:

Código Delphi [-]
unit Main;

interface

uses
   Listado de units;

type
     // Primero viene el tipo
    TMyArray = array of [0..2,0..2] of integer;

    TFmain = class(TForm);
    private
    { Private declarations }

    public
    { Public declarations }
      // este procedimiento debe pertener a la form? o debe ser "global"?
      procedure RecibeMatriz(var mat:TMyArray);
    end;

var
  FMain: TFMain;

implementation
{$R *.dfm}

procedure TFmain.RecibeMatriz(var mat:TMyArray);
begin
  // lo que venga...
end;

end;

De la segunda manera (el tipo en implementation) no vas a poder "comunicarte" en forma externa cuando desees suministrar los parámetros debido a que el tipo no es dado a conocer a los demás.

Algo que no me queda claro en tus códigos es que si se trata de una Unit asociada a un Form, o es una unidad limpia (sin form asociado).

¿Podrías exponer el código completo? De esta manera podremos saber realmente que es lo que estás haciendo... en ocasiones esos "puntos suspensivos" pueden decirnos más de lo que crees.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
Respuesta



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
Problema Paso parametro funcion NEG1414 C++ Builder 1 13-12-2007 22:58:22
Pasar Matriz como parametro a un procedimiento Caro Varios 2 28-07-2006 17:20:12
Como paso un parametro a un formulario FNADALO OOP 4 22-11-2003 19:52:02
Como paso una matriz a una funcion Alejo Varios 5 04-07-2003 21:21:49
Como paso un la intancia Tstrings de un TComboBox (ComboBox.items) por parametro? orfeo OOP 1 05-05-2003 07:58:52


La franja horaria es GMT +2. Ahora son las 05:24:35.


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