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 08-03-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Poder: 0
ioco Va por buen camino
Una serie de dudas con unos procedures y functions elementales

Buenas, aquí vengo a traer de nuevo más problemas de novato ¬¬'

Lo que últimamente me ocupa es una unit para poder usarla en futuras aplicaciones de cálculo con números complejos.

Tengo varias dudas al respecto:
  • No entiendo porqué me dice que la expresión es ilegal ya que no veo nada fuera de lo normal a cómo siempre las he puesto ¿he olvidado poner algo?
Código Delphi [-]
                    If Z.ArgumentoRadianes>(2*Pi) then
                       Repeat
                             Z.ArgumentoRadianes-(2*Pi);
                       until (Z.ArgumentoRadianes<=(2*Pi));

He probado por si fuera cosa de paréntesis o algo y no encuentro manera :S
  • Estoy con mi primera función con "overload" y me está dando problemas ya que se trata de sacar el Ln de un número complejo, pero dentro se recurre a ella misma y lo que quiero es que llame a la Ln que todos tenemos... ¿sé que podría solucionarlo cambiando el nombre a la función y quedarme tan ancho, pero me gustaría aprender si hay alguna otra manera :
Código Delphi [-]
      Function Ln(a:TComplejo):TComplejo; overload;
               Var
                  Z:TComplejo;
               Begin
                    Z.Modulo:=ln(a.Modulo); //<-Incompatible type for arg no1: Got Extended, expected TCOmplejo
                    Z.ArgumentoRadianes:=a.ArgumentoRadianes;
                    Z.ArgumentoGrados:=RadToDeg(Z.ArgumentoRadianes);
                    CalcularRectangular(Z);
                    Result:=Z;
               end;

Un saludo
Responder Con Cita
  #2  
Antiguo 08-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Buenas!
Te explico:
Código Delphi [-]
If Z.ArgumentoRadianes>(2*Pi) then
  Repeat
    Z.ArgumentoRadianes-(2*Pi);
  until (Z.ArgumentoRadianes<=(2*Pi));
Z.ArgumentoRadiantes es una variable, y como tal para asignarle un valor tenes que usar la asignaciíon :=.
Z.ArgumentoRadianes:=Z.ArgumentoRadianes-(2*Pi);


El siguiente:
Código Delphi [-]
Function Ln(a:TComplejo):TComplejo; overload;
Var
  Z:TComplejo;
Begin
  Z.Modulo:=ln(a.Modulo); //<-Incompatible type for arg no1: Got Extended, expected TCOmplejo
  Z.ArgumentoRadianes:=a.ArgumentoRadianes;
  Z.ArgumentoGrados:=RadToDeg(Z.ArgumentoRadianes);
  CalcularRectangular(Z);
  Result:=Z;
end;
Tu función acepta argumentos de tipo TComplejo, y en Z.Modulo:=ln(a.Modulo); le estás pasando la variable Modulo que es un extended. Deberías pasarle el número complejo (a).

Saludos!!!!
Responder Con Cita
  #3  
Antiguo 08-03-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Poder: 0
ioco Va por buen camino
Tantas veces que he mirado el código y no ví que faltaba la asignación ¬¬' es como mirar con los ojos cerrados...

Gracias por el toque ^^

Respecto a la función de Ln, lo que necesito hacer dentro de mi función Ln(de un complejo) es llamar a Ln(de un extended) que reside en la unit típica de System, pero en su lugar se llama a si misma.

Según leí para que se distinga entre una función u otra con el mismo nombre deben de tener o distinta cantidad de parámetros o que estos sean de distinto tipo. Y las funciones son las siguientes:

Código Delphi [-]
function Ln  ( Number  : Extended )  : Extended; //function Ln de la unit System
                                                             //(sacado de delphibasics.co.uk)
Function Ln(a:TComplejo;b:byte=0):TComplejo; overload; //mi function (le puse el parámetro b con valor por defecto tal 
                                                           //y como leí en delphibasics pero sigue sin funcionar :S)

Con esto he pensado que quizá el problema radique en que ambas funciones deberían de llevar la directiva overload, aunque no sé si es posible modificar la primera.

Última edición por ioco fecha: 08-03-2010 a las 16:33:54.
Responder Con Cita
  #4  
Antiguo 08-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Ahhh.
Te recomiendo que no modifiques la primera, porque es de la unit system mejor dejala como la hicieron.
En todo caso, modifica tu función. Nombrala LogNat o algo similar, es más simple evitar esos problemas cambiando el nombre de tu función. No le harías mal al código.
Sino, fijate si te sirve asi (de verdad, no sé si funcionará, es una idea nnomás):
Código Delphi [-]
Function Ln(a:TComplejo):TComplejo; overload;
Var
  Z:TComplejo;
Begin
  Z.Modulo:=System.Ln(a.Modulo); //<-Incompatible type for arg no1: Got Extended, expected TCOmplejo
  Z.ArgumentoRadianes:=a.ArgumentoRadianes;
  Z.ArgumentoGrados:=RadToDeg(Z.ArgumentoRadianes);
  CalcularRectangular(Z);
  Result:=Z;
end;
Por cierto, en esta Unit tuya, te acordaste de poner a System en el uses??
Saludos!
Responder Con Cita
  #5  
Antiguo 08-03-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Poder: 0
ioco Va por buen camino
Sí, ya probé a ver si era falta de declarar la unit y si la pongo en el uses me da el mensaje conforme está duplicada (según vi en los comentarios de delphibasics no es necesario declarar esta unit).

Evité el error temporalmente llamandola
Código Delphi [-]
Function Loge(a:TComplejo):TComplejo;

que era la única solución que se me ocurría para el error (supongo que el mantener el nombre para que a la hora de usarla de nuevo fuera mas sencillo no siempre se puede jeje)

Respecto a lo que propones de poner System.Ln(...) evita el error no sabía que se podía hacer referencia a funciones de una unit concreta como si de un form se tratara jeje

Probaré a implementarla para conservar el nombre si se puede ^^

Gracias por la ayuda!
Responder Con Cita
  #6  
Antiguo 08-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Thumbs up

Si si, llamar a cualquier módulo de una unidad, anteponiendo el nombre de la unidad con un punto, es lo mismo que llamarla sin el nombre de la unidad.
Te tiene que andar sí o sí poniendo Sustem.ln
Me alegro haberte solucionado el problema
Saludos!
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
Dudas sobre TRUNCATE y Stores Procedures kvtm Conexión con bases de datos 0 29-07-2006 00:29:13
functions Makiley Varios 8 07-02-2006 12:17:02
Nested Aggregate Functions bartHo Firebird e Interbase 8 20-05-2005 01:50:34
Parametros Opcionales en Procedures/Functions Enan0 Varios 4 03-03-2005 10:32:30
Dudas con Stored Procedures pigu SQL 1 05-10-2004 02:53:07


La franja horaria es GMT +2. Ahora son las 16:28:15.


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