Llenar array
Hola amigos, estoy tratando de crear un array de la siguiente forma
Lo cieeto es que no funciona Alguna sugerencia ? |
¿Qué es se_sun?
¿Qué es se_mean_node? ¿Qué es swe_calc_ut? ¿Qué es iflag? ¿Qué es xx? ¿Qué es serr? ¿Qué es lg? ¿Qué es lt? Y aparte de eso, ¿qué es lo que no funciona? Y pon todo tu código involucrado. Cita:
|
Cita:
Esta es la funcion
devuelve lo siguiente xx =array of 6 doubles for longitude, latitude, distance, speed in long., speed in lat., and speed in dist. Necesito que me devuelva xx=0; |
|
Yo necesito tantas cosas....
:D |
Cita:
|
Cita:
|
Que no entiendes? Te puse toda la informacion que me pedistes
|
Lo que requiero es que el resultado de lg:= xx[0]; lo pueda agregar a un array que llamo planet[i]
|
Cita:
Eso es correcto. Cita:
Cita:
Difiere de la pregunta origional. Cita:
Esto es iuna asignación y es correcta. Otra cosa es que te devuelva un valor que no esperas, pero eso para nosotros en IMPOSIBLE saber porqué pasa. Cita:
Has puesto información inconexa, desordenada y todavía no queda claro cual es la pregunta. Te recomiendo que reformulaes la pregunta y la releas antes de publicarla. Des los datos relevantes y preguntes algo concreto. |
Después de lo que te han explicado para que tus preguntas sean lo suficientemente claras. Hago un apunte sobre el código que has pegado. Tienes un For dentro de otro fFor y la variable que se utiliza en ambos es "i".
En la primera iteración sobre "for i := SE_SUN to SE_MEAN_NODE do" el valor de "i" será SE_SUN. Ahora adivinando el resto del código que no has puesto, deduzco que en la siguiente iteración sobre "for i := SE_SUN to SE_MEAN_NODE do" "i" valdrá 12. En ese momento puede suceder que SE_MEAN_NODE sea menor que 12 en cuyo caso se saldrá del For tras solo una iteración, pero si SE_MEAN_NODE es mayor que 12 entonces lo más probable es que nunca jamás puedas salir del primer For. Deberías reformular la pregunta cómo te han dicho. De todas formas, yo me aseguraría de que realmente necesitas que los dos For utilicen la misma variable. Es más diría que mi Delphi al menos cuando intenta compilar algo así muestra un error del tipo "Assignment to FOR-Loop variable 'i'" |
Otra opción que no se utiliza mucho, pero que es muy útil es subir un pequeño proyecto (código) sólo con la parte del código a examinar y en ese caso el muy fácil descargarlo, abrirlo y revisar el comportamiento.
NOTA: Es importante crear un proyecto dummy sólo con el código que da problemas, no como algunos de nuestros clientes, que les pides un ejemplo de código que reproduzca un error y te envían la aplicación completa con 15.000 líneas de código... :o:o:o:o |
Neftali, saludos y muchas gracias por tu respuesta, es muy educado de tu parte.
Reconozco que no tengo mucha experiencia en programación pero eso no justifica que ciertos foristas respondan un post mío en forma grosera o peyorativa. Si no les gusta lo que pregunto, simplemente no participen ni respondan. Respeto ante todo. |
Cita:
Personalmente creo que nadie ha sido grosero. Tal vez un poco de ironía y de humor. Es una forma de pedirte que hagas las preguntas dedicándoles un poco de tiempo. Al final la gente intenta ayudarte, sino piensa que nadie hubiera respondido. |
¿Dónde está la grosería? Solamente son muchas dudas. :confused:
Cita:
|
Cita:
|
Hola compuin.
Leí todos tus mensajes y no entiendo el problema. Sincenramente creo que es por que la información que nos das es escasa o inconéxa. En esto de comunicarnos es fundamental que nos pongamos de acuerdo, tanto el emisor como el receptor. No me cabe duda alguna que tu intención era explicar el problema lo mejor posible así como también, que los que participaron en las respuestas tuvieron la firme intención de ayudarte desinteresadamente como siempre lo hacen. Lo importante aquí, creo yo, es que soluciones tu problema y no seguir en discuciones inconducentes. Rebobinemos y por favor plantea el problema de otro modo ya que del anterior no logramos entenderlo. Saludos :) |
Yo tampoco entiendo bien el asunto, faltan cosas. Creo que lo que pretende compuin es algo como esto:
Asumiendo que: 1.- Los indices de planeta van de 1 a 12 (pueden ser 0-11) según la función no documentada swe_calc_ut 2.- La fecha se sabrá y se inicializará. 3.- iflag se conocerá y se inicializará. Saludos. |
Hola escafandra
Efectivamente, tanto la fecha como iflag estan inicializados Esta es la funcion como tal
|
Cita:
En fin, tienes razón. Cita:
Cita:
|
Movorack
Sin comentarios |
Cita:
|
Cita:
|
Cita:
|
Calma. Creo que hay un acúmulo de malas interpretaciones. Por un lado tenemos un usuario con poca experiencia pero con ganas de resolver un tema y por otro lado foristas que con ganas de prestar ayuda no terminamos de entender el tema en profundidad. Frustración por ambas partes. Entiendo que cuando alguien tiene poca experiencia le resulta complejo explicarse. El problema es que la gente más experta también tiene problemas en entender puesto que se necesita precisión en la pregunta. Si aparecen suspicacias se pierde el sentido y ultimo fin, que es la ayuda desinteresada. No hay magos de sabiduría infinita que todo lo entiendan al vuelo como tampoco hay gente que consiga hacerse entender en problemas que le resultan complejos. Con buena voluntad las cosas van saliendo y así ha sido siempre.
Yo pediría a compuin que trate de estudiar mejor su problema para poder preguntar con mayor precisión, que es la garantía de buenas respuestas y soluciones. También pediría al resto, comprensión ante la dificultad de explicarse pues no creo que sea deliberada. Creo que compuin debería abordar temas más pequeños para familiarizarse con delphi y la forma de encarar los problemas desde el punto de vista del programador y, sobre todo, no tener prisa en abordar nuevas cuestiones sin tener claras al 100% las previas, es la única forma de aprender con provecho. Saludos. |
Muchas gracias escafandra por tu post. Tomare un tiempo para replantear mi inquietud de la forma más clara para todos.
|
Una manera simple cuando estas estancado con codigo, es mostrar los datos de entrada y los datos deseados de salida. Es posible que haya un algoritmo mas simple.
|
@Compuin, hay una cosa/concepto (no caigo ahora como llamarle, la verdad :-) muy útil que se llama MCVE y que muy resumido es un ejemplo mínimo de código donde se reproduzca el error. Aquí tienes todos los detalles y amplia explicación...
Para problemas complejos (y también no tan complejos), va muy bién para que se entienda rápidamente el problema y a la vez te ayude el máximo número de gente (aquí encontrarás muchísima), ya que con un copiar-pegar lo puede reproducir cualquiera, y creeme que quitas muchas barreras así. (No tiene nada de ironía esta respuesta, simplemente la única buena intención de ayudar a resolver el problema) Un saludo |
Cita:
Muy de acuerdo contigo. ... ... ... ;););) Cita:
|
Al parecer la librería "swedll32.dll" si está documentada y aparentemente tiene un nicho de usuarios importante. Buscando información al respecto encontré el siguiente dato:
(tomado de stackoverflow) Antes de llamar a swe_calc_ut usted debería colocar un Path a un folder con los datos de "ephe" con algo similar a lo siguiente : Código PHP:
|
Aca dejo el llamado de funciones para la swedll32.dll
Lo copio en parte porque no puedoi agregar todo en un post
|
Aca dejo un ejemplo del codigo con el que estoy trabajando
Lo que quisiera es que me llene un array que se llame planeta[i], donde planeta es xx[0] y el elemento i es
Atento a sus comentarios |
El asunto es que en una "marea" de codigo es facil perderse:
http://www.dreamsongs.com/ObjectsHaveNotFailedNarr.html Cita:
Asi, por ejm:
Nota bien lo interesante. Usando records/clases como si modelaras las "tablas" de una BD vas dandole forma a la estructura conceptual del programa, y al usuarlo en funciones/metodos se vuelve claro cual es el flujo de este: "medir TPlaneta me retorna un TPlanetaMedicion". El programa se AUTO DOCUMENTA cuando usas los nombres/clasificaciones/tipos de datos adecuados. De allí es copiar datos y calcular. Ademas, en Delphi tienes enumeraciones y sets, que son superiores (logicamente) que clavar constantes como ocurre con SE_MERCURY y similares. Aunque pueden haber expeciones, si un metodo/funcione tiene "muchas" lineas *tal vez* es buena idea partirlo en sub rutinas (o agregas marcas con comentario en las secciones). El truco que dice Fred Brooks es que estructurar los datos clarifica el programa mientras el codigo "duro" lo obscurece. Con respecto a copiar arrays, es mejor que aprendas como usar iteraciones y LOW/HIGH para capturar las posiciones del mismo: http://www.delphibasics.co.uk/Article.asp?Name=Arrays |
De entrada y sin entrar en el funcionamiento del código veo que tienes una unit con las definiciones para usar swedll32.dll desde delphi. Eso implica que debes incluirla en el uses y no repetir de nuevo nada.
Tu código debe quedar mucho más sencillo y resumiendo esto es la parte que interesa:
El código es un galimatías. Debes ir con orden. Primero inicializaciza los ComboBox en funciones de inicio o en el Form.Create. Luego darás funcionalidad a los botones... Debes estudiar el uso de esa dll pues al parecer debes inicializar con una ruta que debe contener previamente algunos archivos y quizás requiera más acciones. Este punto es básico y piensa que probablemente ninguno de nosotros estamos familiarizados con esa dll, ese es tu cometido. Cuando requieras preguntar alguna cosa concreta, trata de aislar en lo posible el código que te preocupa y que sea suficiente para entenderte pero no tán sobrecargado que se pierdan las ganas de leerlo. Saludos. |
Ahora fíjate en este código:
El array es asignado correctamente, otra cosa es que los valores sean los experados. Fíjate que arroja un error serr = 'SwissEph file 'seplm48.se1' not found in PATH 'c:\sweph\ephe\'' para todos los valores de i hasta para I=10. Para i= 11 el error es 'SwissEph file 'semom48.se1' not found in PATH 'c:\sweph\ephe\'' y para i=12 no falla Esto quiere decir que en ese path deben existir previamente esos archivos y probablemente alguno más. Entonces la pregunta no es como rellenar un array, sino como manejar swedll32.dll para conseguir el array que esperamos. Saludos. |
Pero si lo usamos así:
Entonces no hay errores y los valores son: Cita:
Saludos. |
Hola Escafandra
Te anexo el archivo con el projecto completo (Puse el link ya que no me deja ponerlos adjuntos ) https://www.astro.com/ftp/swisseph/sweph.zip La Dll hace los calculos, pero existen unos archivos .se1 que aunque arrojan error no son necesarios (Son para calculo de asteroides) La variable xx[0] se espera que arroje la longitud o posicion planetaria del sol, luna, mercurio, venus, marte, jupiter, saturn, urano, neptuno y pluton Son 10 planetas, asi que seria del 1 al 10 |
Para la fecha de hoy esto es lo que se espera
deltat: 69.5103960890 sec jul. day: 2458900.50000000 UT Sun 331.8094127618 Moon 302.2187037435 Mercury 341.5633697228 Venus 15.2722542439 Mars 273.1099711227 Jupiter 287.8282244089 Saturn 297.2549903731 Uranus 33.3602165722 Neptune 347.7743860929 Pluto 294.0205054947 mean Node 95.5387999697 true Node 97.1857573215 Sid. time 10.5957212216 ARMC 158.9358183233 ascendant 230.7646482310 MC 157.2282506635 vertex 92.2206035689 house 1 230.7646482310 house 2 261.2501400084 house 3 298.8634035392 house 4 337.2282506635 house 5 8.4105200249 house 6 32.0604837022 house 7 50.7646482310 house 8 81.2501400084 house 9 118.8634035392 house 10 157.2282506635 house 11 188.4105200249 house 12 212.0604837022 |
Ya, pero eso no es xx [0] que fue el origen de la pregunta y tampoco queda claro que son todos esos datos a no ser que seas entendido en la materia.
Saludos. |
Cita:
Los datos de houses son las posiciones en una rueda que no esta presente en el codigo (no necesaria dibujarla) Los calculos de la posicion de los planetas son mostrados en xx[0] La pregunta original era como podia llenar un array llamado planeta a partir de este ultimo valor |
La franja horaria es GMT +2. Ahora son las 01:31:56. |
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