Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-09-2008
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question Pasar array como parámetro

Buenas, tengo la siguiente definición:

Código Delphi [-]
interface

type
 TDatos = record
   temperatura:double;
   humedad:double;
 end;

procedure proceso(A:array of TDatos);

implementation

//por otro lado...

procedure proceso(A:array of TDatos);
begin
//...
end;

Ahora, hasta aquí todo bien pero resulta que quiero llamar al procedimiento de la siguiente forma y no me deja:

Código Delphi [-]
proceso([(20,78),(18,95),(23,93)]);

Se que de la manera tradicional puede hacerse pero necesitaría que el pasaje fuera de la manera que indico pues evitaría que yo inicializara el array dinámico, que armara uno por uno los registros y todo eso.
Creo que estoy haciendo algo mal por eso no me deja hacer el pasaje de esa manera. Pido que alguien me corrija o brinde alguna sugerencia.

Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #2  
Antiguo 16-09-2008
Avatar de Ana María
Ana María Ana María is offline
Miembro
 
Registrado: ago 2008
Posts: 40
Poder: 0
Ana María Va por buen camino
Ensaya con esto
Código Delphi [-]
interface

type
 TDatos = record
   temperatura:double;
   humedad:double;
 end;

type Miarray = array of TDatos;

procedure proceso(A:MiArray);

implementation

//por otro lado...

procedure proceso(A: MiArray);
begin
//...
end;
Responder Con Cita
  #3  
Antiguo 17-09-2008
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Question Array

Cita:
Empezado por Ana María Ver Mensaje
Ensaya con esto
Código Delphi [-]
interface

type
 TDatos = record
   temperatura:double;
   humedad:double;
 end;

type Miarray = array of TDatos;

procedure proceso(A:MiArray);

implementation

//por otro lado...

procedure proceso(A: MiArray);
begin
//...
end;
He probado con esto pero no funciona, me sigue diciendo que no es una forma adecuada de pasar al array como parámetro.

Para citar un ejemplo aún mas claro, si hago lo siguiente no hay problemas:

Código Delphi [-]

procedure proceso(a:array of integer);
begin
//...
end;


//Ahora hago una llamada

procedure TForm1.buttonClick(sender);
begin
//Esto lo acepta perfectamente, quiero hacer lo mismo pero mandando
//dos valores en la componente en lugar de uno  
  proceso([5,4,3,10]);
end;

Gracias.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.

Última edición por santiago14 fecha: 17-09-2008 a las 02:13:31. Razón: Errores de ortografía
Responder Con Cita
  #4  
Antiguo 17-09-2008
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Smile array

Para ser mas gráfico, estoy ante un problema que se llama "Parámetros de vector abierto (Open Array)"

Espero que alguien tenga una idea de como arreglar la cosa.

Saludos.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
Responder Con Cita
  #5  
Antiguo 17-09-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 santiago14,
La verdad es que no te sabría decir si es posible hacer lo que buscas.
Una posible alternativa es que el procedimiento reciba dos vectores dinámicos.
Se que no es demasiado elegante, pero es una opción.

La otra alternativa que se me ocurre es un tanto mas complicada y tal vez sea demasiado para tus propósitos:
en vez de tener un record, implementar una clase TDatos que tenga los mismos campos.

Después tener un TObjectList que hará de vector. De este modo el procedimiento puede recibir a un objeto TObjectList y recorrer todos los objetos TDatos que estén dentro de éste.

El asunto es que este enfoque obliga a crear cada objeto TDato y llenarlo por separado, y relacionarlo con el TObjectList.

Por esto digo que tal vez esta opción sea más complicada que tener dos vectores.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #6  
Antiguo 17-09-2008
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola Santiago14, creo que así directamente no se puede, la forma que se me ocurre es inicializar como una constante de esta forma:

Código Delphi [-]
 
VarDatos : Array[1..3] of TDatos = ((temperatura : 20; humedad : 78), (temperatura : 20; humedad : 78), (temperatura : 20; humedad : 78));
.......

la otra forma es darle tu los valores correspondientes a cada atributo de tu registro, para luego pasar ese array como parametro.

Código Delphi [-]
var
 varDatos : Array[1..3] of TDatos;
begin
 varDatos[1].temperatura := 20;
 varDatos[1].humedad := 78;
 varDatos[2].temperatura := 20;
 varDatos[2].humedad := 78;
 varDatos[3].temperatura := 20;
 varDatos[3].humedad := 78;

 proceso(varDatos);

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #7  
Antiguo 17-09-2008
Avatar de santiago14
santiago14 santiago14 is offline
Miembro
 
Registrado: sep 2003
Ubicación: Cerrillos, Salta, Argentina
Posts: 583
Poder: 21
santiago14 Va por buen camino
Lightbulb agradecimentos

Quiero agradecerles a todos que a esta hora de la noche se han tomado la molestia de buscar una solución a todo esto.
Hasta ahora no he tenido buenos resultados; espero encontrar la respuesta en el corto plazo.

Agradecido nuevamente les deseo buenas noches.

Por supuesto que voy a considerar todas las respuestas y veo si haciendo un merengue entre todas puedo llegar a algo. Por favor, si tienen nuevas sugerencias no duden en ponerlas.
__________________
Uno es responsable de lo que hace y de lo que omite hacer.
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
Como pasar un parametro? b3nshi Varios 3 18-08-2007 06:54:53
Pasar SQL como parametro veloki Impresión 7 16-04-2007 15:28:37
PLSQL - Pasar un array como parametro. movorack SQL 1 06-03-2007 20:07:59
pasar como parámetro un array bidimensional nsr048 Varios 2 08-11-2005 11:54:20
Pasar como parametro el where en una funcion cso2000 MS SQL Server 2 15-02-2005 02:49:47


La franja horaria es GMT +2. Ahora son las 20:12:40.


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