Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Migrar desde VB6 a Delphi (https://www.clubdelphi.com/foros/showthread.php?t=94607)

compuin 25-04-2020 18:32:00

Migrar desde VB6 a Delphi
 
Hola amigos,

Alguien que haya migrado algun programa desde VB6 a Delphi me podria indicar como se traduce esta instruccion a Delphi ?

Obl = 84381.448 - 4680.93 * T: P = T * T


Sobre todo, la parte de P = T * T

Gracias de antemano

ecfisa 25-04-2020 22:38:20

Hola.

Por lo que acabo de ver, los dos puntos ":" en VB se usan para separar una línea de código de otra (para poner mas de una línea de código por renglón).
Es decir que traducido a Delphi sería algo así:
Código Delphi [-]
...
var
  Obl,P,T: Double;
begin
  T   := {un valor} ;
  Obl := 84381.448 - 4680.93 * T; 
  P   := T * T;
...

Saludos :)

compuin 25-04-2020 22:40:03

Muchas gracias amigo!!!!

compuin 26-04-2020 02:43:41

Y esta linea de codigo como se pudiese migrar teniendo en cuent que las variables con Double (T,L,B,R)

'Return the L,B,R values in a data vector string
LBR_For_Venus = L & "|" & B & "|" & R


Gracias de antemano

ecfisa 26-04-2020 21:09:14

Hola.

Nuevamente en google:
Cita:

El operador & tiene interés para concatenar cadenas. Por ejemplo "Hoy puede" & "ser un gran día" equivale a "Hoy puede ser un gran día”.
...
Entonces aquí,
Código:

LBR_For_Venus = L & "|" & B & "|" & R
esta concatenando L, B y R con los caracteres "|", algo así como:
Código Delphi [-]
  ... FloatToStr(L) + '|' + FloatToStr(B) + '|' + FloatToStr(R);
Pero, ¿ que es LBR_For_Venus ? Vi que en otra publicación tuya figura como una función...

Saludos :)

compuin 26-04-2020 21:16:46

Hola y gracias

LBR_For_Venus es una funcion que lee coeficientes de unas matrices y los devuelve en una cadena de 3 resultados diferentes

Estoy tratando de migrar eso desde VB6 a Delphi 7

ecfisa 26-04-2020 21:20:59

Hola.

No conozco VB y tal vez lo permita, pero en Delphi, aquí tenemos un problema, ya que no es posible asignarle un valor al resultado de una función.

Es decir no se puede hacer:
Código Delphi [-]
...
function LBR_For_Venus: string;
begin
  ...
end;

...

var
 T,L,B,R : Double;
begin
  ...
  LBR_For_Venus := FloatToStr(L) + '|' + FloatToStr(B) + '|' + FloatToStr(R); // <- ¡ Error !

Saludos:)

compuin 26-04-2020 21:24:33

La funcion en VB6 pinta asi


Public Function LBR_For_Venus(At_JDE)
' LEVEL 0

Dim L As Double
Dim B As Double
Dim R As Double
Dim T As Double

' 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)

B = Venus_B01(T) + Venus_B11(T) + Venus_B21(T) + Venus_B31(T) _
+ Venus_B41(T) + Venus_B51(T)

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 / Atn(1)
If Abs(L) >= 360 Then L = L - 360 * Int(L / 360)
If L < 0 Then L = L + 360

B = B * 45 / Atn(1)

' Return the L,B,R values in a data vector string
LBR_For_Venus = L & "|" & B & "|" & R

End Function

Esto es lo que estoy tranado de migrar a Delphi

ecfisa 26-04-2020 21:50:35

Hola.

Esta traducción se corresponde con la información que brindas y no te va a dar errores de compilación siempre que traduzcas bien las funciones Venus_... , pero me es imposible saber si devuelve los valores correctos desconociendo que es lo que hace.

Código Delphi [-]
function LBR_For_Venus(LBR_For_Venus(At_JDE:extended): string;
var
  L,B,R,T: Double;
begin
  T := (At_JDE - 2451545) / 365250;
  L := Venus_L01(T) + Venus_L11(T) + Venus_L21(T) + Venus_L31(T) +
       Venus_L41(T) + Venus_L51(T);
  B := Venus_B01(T) + Venus_B11(T) + Venus_B21(T) + Venus_B31(T) +
       Venus_B41(T) + Venus_B51(T);
  R := Venus_R01(T) + Venus_R11(T) + Venus_R21(T) + Venus_R31(T)  +
       Venus_R41(T) + Venus_R51(T);
  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);
  Result := FloatToStr(L) + '|' + FloatToStr(B)+ '|' + FloatToStr(R);
end;

Saludos :)

compuin 26-04-2020 22:01:02

Muchas gracias estimado

Voy a probar y le comento

Casimiro Noteví 27-04-2020 00:05:44

Cita:

Empezado por compuin (Mensaje 536878)
La funcion en VB6 pinta asi


Public Function LBR_For_Venus(At_JDE)
' LEVEL 0

Dim L As Double
Dim B As Double
Dim R As Double
Dim T As Double

' 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)

B = Venus_B01(T) + Venus_B11(T) + Venus_B21(T) + Venus_B31(T) _
+ Venus_B41(T) + Venus_B51(T)

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 / Atn(1)
If Abs(L) >= 360 Then L = L - 360 * Int(L / 360)
If L < 0 Then L = L + 360

B = B * 45 / Atn(1)

' Return the L,B,R values in a data vector string
LBR_For_Venus = L & "|" & B & "|" & R

End Function

Esto es lo que estoy tranado de migrar a Delphi


No olvides usar las etiquetas para el código fuente, que ya no eres un novato aquí ;)



compuin 27-04-2020 01:12:19

Relajate,

ese simbolo es para sintaxis Delpi pero no sabia que tenia que hacerlo con cualquier codigo de otro lenguaje tambien.

Tomado en cuenta para la proxima vez

Casimiro Noteví 27-04-2020 09:56:59

Cita:

Empezado por compuin (Mensaje 536883)
Relajate,
ese simbolo es para sintaxis Delpi pero no sabia que tenia que hacerlo con cualquier codigo de otro lenguaje tambien.
Tomado en cuenta para la proxima vez

Estoy muy relajado :)
Tal y como decimos en nuestra guía de estilo, siempre ha de usarse para poner código fuente, se lee mucho mejor.
Gracias, saludos.

compuin 27-04-2020 20:44:24

En VB6 esta formula se migra tal como esta o hhay que hacerle alguna conversion en radianes en Delphi ?

Código Delphi [-]
' ====================================================================

' Function to convert geocentric ecliptical coordinates in degrees
' into corresponding right ascension and declination and return
' coordinates as a delimited 2D vector in the form  RA|Decl

  Public Function EQU_Lng_Lat_Equiv_To(Ecl_Lng, Ecl_Lat, Obliquity)
' LEVEL 0

  Dim Q As Variant

  Dim Sin_e As Double
      Sin_e = Sin(Obliquity * Atn(1) / 45)

  Dim Cos_e As Double
      Cos_e = Cos(Obliquity * Atn(1) / 45)

  Dim x As Double

  Dim y As Double

  x = Sin(Ecl_Lng * Atn(1) / 45) * Cos_e - Tan(Ecl_Lat * Atn(1) / 45) * Sin_e

  y = Cos(Ecl_Lng * Atn(1) / 45)

  EQU_Lng_Lat_Equiv_To = Atn(y / x) * 45 / Atn(1)
  If x < 0 Then EQU_Lng_Lat_Equiv_To = EQU_Lng_Lat_Equiv_To + 180

     Q = Sin(Ecl_Lat * Atn(1) / 45) * Cos_e + Cos(Ecl_Lat * Atn(1) / 45) * Sin_e _
       * Sin(Ecl_Lng * Atn(1) / 45)

  EQU_Lng_Lat_Equiv_To = EQU_Lng_Lat_Equiv_To & "|" & Atn(Q / Sqr(-Q * Q + 1)) * 45 / Atn(1)
  
  End Function


La franja horaria es GMT +2. Ahora son las 00:51:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi