Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 215
Poder: 14
compuin Va por buen camino
Devolver 3 valores con la misma funcion

Hola foro,

Tengo una funcion que me calcula desde 3 matrices diferentes y necesito devolver el valor de cada matriz dentro de la misma funcion.

Lo estoy haciendo de esta manera pero solo puedo devolver 1

Código Delphi [-]
function LBR_For_Venus(At_JDE:extended):extended;
var
  L, B, R, T : Extended;
begin
  //Compute T as Julian millennia since J2000.0
  T := (At_JDE - 2451545) / 365250;
       
  //Compute heliocentric, ecliptical Longitude L in radians
  L := Venus_L01(T) + Venus_L11(T) + Venus_L21(T) + Venus_L31(T) +
       Venus_L41(T) + Venus_L51(T);

  //Compute heliocentric, ecliptical Latitude B in radians
  B := Venus_B01(T) + Venus_B11(T) + Venus_B21(T) + Venus_B31(T) +
       Venus_B41(T) + Venus_B51(T);
       
  //Compute heliocentric distance R in AU
  R := Venus_R01(T) + Venus_R11(T) + Venus_R21(T) + Venus_R31(T) +
       Venus_R41(T) + Venus_R51(T);
  
  //Convert longitude and latitude from radians into degrees.
  L := L * 45 / Arctan(1);
  If Abs(L) >= 360 Then L := L - 360 * Int(L / 360);
  If L < 0 Then L := L + 360;
  
  B := B * 45 / Arctan(1);

  //Return the L,B,R values in a data vector string
  LBR_For_Venus := L;
  LBR_For_Venus := B;
  LBR_For_Venus := R;

end;


Solo puedo devolver 1 valor a la vez, pero requiero devolver el resultado de cada uno (L, B y R)

Gracias de antemano
Responder Con Cita
  #2  
Antiguo 24-04-2020
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 291
Poder: 21
elrayo76 Va por buen camino
Buenas,

Lo que yo aría es primero convertir la función "function LBR_For_Venus(At_JDE:extended):extended;" en un procedure. Deesta forma ya no devuelves los valores como resultados. Luego puedes hacer algo como lo siguiente para devolver los tres valores.

Código Delphi [-]
procedure LBR_For_Venus(At_JDE:extended; out L: extended; out B: extended; out R: extended);
begin
  .....

end;

Con lo anterior luego declaras las 3 variables que resiviran los datos del procedure se la pasas en los parámetros y las mismas tendrán los valores que necesitas.

Por otro lado en lugar de que el resultado sea un Extended puedes hacer que sea un record con los 3 valores.

Fijate cual te conviene mas para lo que necesitas.

Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #3  
Antiguo 24-04-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 215
Poder: 14
compuin Va por buen camino
Gracias,

Voy a probar lo que me dices
Responder Con Cita
  #4  
Antiguo 24-04-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 215
Poder: 14
compuin Va por buen camino
Me da estos mensajes de errores cuando lo paso como una procedure



Código Delphi [-]
[Error] ConstVenus.pas(65): There is no overloaded version of 'LBR_For_Venus' that can be called with these arguments

[Error] ConstVenus.pas(38): Previous declaration of 'LBR_For_Venus' was not marked with the 'overload' directive
Responder Con Cita
  #5  
Antiguo 24-04-2020
elrayo76 elrayo76 is offline
Miembro
 
Registrado: ene 2004
Ubicación: En la tierra, por eso mis archivos en la tierra y no en la nuebe...
Posts: 291
Poder: 21
elrayo76 Va por buen camino
Buenas,

Fijate que los errores que te da es porque existe otro procedure/function con el mismo nombre. Para que puedas tener mas de uno con el mismo nombre pero diferentes parametros tienes que marcar a todos como "overload".

Esta directiva se agrega detras de todo cuando declaras la function/procedure. En este enlace tienes un ejemplo de como se usa http://www.delphibasics.co.uk/RTL.asp?Name=Overload. No importa el ambito de la misma, es decir si una es privada y la otra pública o si las dos son públicas, solo el nombre.

Cualquier cosa avisas.

Saludos,
El Rayo
__________________
Si tienes una función o procedimiento con diez parámetros, probablemente hayas olvidado uno
Responder Con Cita
  #6  
Antiguo 25-04-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 215
Poder: 14
compuin Va por buen camino
Ahora me arroja esto

Código Delphi [-]
[Error] ConstSaturn.pas(8): Unsatisfied forward or external declaration: 'LBR_For_Venus'
Responder Con Cita
  #7  
Antiguo 26-04-2020
compuin compuin is offline
Miembro
 
Registrado: oct 2010
Posts: 215
Poder: 14
compuin Va por buen camino
Cita:
Empezado por elrayo76 Ver Mensaje
Buenas,

Lo que yo aría es primero convertir la función "function LBR_For_Venus(At_JDE:extended):extended;" en un procedure. Deesta forma ya no devuelves los valores como resultados. Luego puedes hacer algo como lo siguiente para devolver los tres valores.

Código Delphi [-]
procedure LBR_For_Venus(At_JDE:extended; out L: extended; out B: extended; out R: extended);
begin
  .....

end;

Con lo anterior luego declaras las 3 variables que resiviran los datos del procedure se la pasas en los parámetros y las mismas tendrán los valores que necesitas.

Por otro lado en lugar de que el resultado sea un Extended puedes hacer que sea un record con los 3 valores.

Fijate cual te conviene mas para lo que necesitas.

Saludos,
El Rayo
Hola, como puedo hacer el record con 3 valores??
Responder Con Cita
  #8  
Antiguo 27-04-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.339
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por compuin Ver Mensaje
Hola, como puedo hacer el record con 3 valores??

Primero defines cómo quieres el record:
http://docwiki.embarcadero.com/RADSt...traditional.29

Código Delphi [-]
type
  MyRecord = record
    elem1: extended;
    elem2: string;
    elem3: boolean

  end;


Y luego lo usas en tu funtion/procedure:
http://docwiki.embarcadero.com/RADStudio/Rio/en/Parameters_(Delphi)#Out_Parameters


Código Delphi [-]
  procedure MyProcedure(var rec:MyRecord);
  begin
    ...
    rec.elem1 := ...
    rec.elem2 := ...
    ....
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
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
Devolver valores en SP GustavoCruz MS SQL Server 2 08-01-2013 03:10:52
Devolver varios valores en una función c++ LuisMiguel C++ Builder 4 23-09-2012 04:23:47
devolver valores al form que lo llamo djanp Conexión con bases de datos 9 20-12-2007 13:36:12
función date para devolver Nº dia de la semana lucasarts_18 PHP 2 27-03-2007 14:27:03
problema para devolver 2 valores en una funcion tiagor64 OOP 4 06-05-2005 15:38:59


La franja horaria es GMT +2. Ahora son las 07:54:04.


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