Ver Mensaje Individual
  #1  
Antiguo 11-03-2010
ioco ioco is offline
Miembro
 
Registrado: ene 2010
Posts: 42
Reputación: 0
ioco Va por buen camino
lio con una asignación

Buenos días ^^

Hace unos días hice la típica unit de principiante con un record y una serie de funciones y procedures ya que la POO aún me da algo de respeto y de momento solo me aclaré de forma elemental con el uso de objetos ya creados.

La cuestión es que me he decidido a convertir esa unit en una unit para almacenar un objeto (hace semanas lo intenté y acabé desistiendo y opté por aplazarlo para seguir leyendo y practicando las bases.)

Así que aquí les traigo el objeto en si

Código Delphi [-]
Type
      TComplejo = class
                Re,
                Img,
                Modulo,
                ArgumentoGrados,
                ArgumentoRadianes:Extended;
                N:LongInt; //Índice para la raíz n-esima
                SolucionesRaizN:TFPObjectList;
                {Función de construcción de un complejo (todo = 0)}
                Constructor NuevoNumero;
                {Procedimiento para rellenar la parte de coordenadas polares de la variable}
                Procedure CalcularPolar;
                {Procedimiento para rellenar la parte de coordenadas rectangulares de la variable}
                Procedure CalcularRectangular;
                {Función para sumar dos complejos}
                Function Suma(a,b:TComplejo);
                {Función para restar dos complejos}
                Function Resta(a,b:TComplejo);
                {Función para multiplicar dos complejos}
                Function Multiplica(a,b:TComplejo);
                {Función para dividir dos complejos}
                Function Divide(a,b:TComplejo);
                {Función para obtener el logaritmo natural de un complejo}
                Function Ln(a:TComplejo); overload;
                {Función para elevar un complejo a otro complejo}
                Function Eleva(a,b:TComplejo);
                {Función para sacar la raíz n-ésima de un complejo}
                Function RaizN(a:TComplejo;b:LongInt);

Suponiendo que el código completo de la unit esté correcto (no me ha dado ningun error de compilación) y esperando que no haya sorpresas (que las habrá seguro xD) cuando empiece a llamar al objeto por primera vez desde un form, les pego aquí la parte que me dio la duda (pongo la function completa para contextualizar, el problema está señalado con '//' espero se entienda bien :S):

Código Delphi [-]
      Function TComplejo.RaizN;
               Var
                  i:LongInt;
                  z:=TComplejo;
               Begin
                    {Si el índice de la raíz es 0, entonces damos como resultado un complejo 0}
                    If N<0 then
                       Begin
                            z:=TComplejo.NuevoNumero;
                            ListaSoluciones:=TFPObjectList.Create;
                            ListaSoluciones.Add(z);
                            z.free;
                       end
                    {Si el índice de la raíz es 1, entonces damos como resultado el mismo complejo}
                    else If N=1 then
                         Begin
                              z:=TComplejo.NuevoNumero;
                              z:= ;//¿z:=self? para asignar a los atributos de z los valores de los de
                                  //la instancia de TComplejo con la que estemos trabajando
                              ListaSoluciones:=TFPObjectList.Create;
                              ListaSoluciones.Add(z);
                              z.free;
                         end
                    {Si el índice de la raíz es >1, entonces damos las N soluciones}
                    else
                        ListaSoluciones:=TFPObjectList.Create;
                        For i:=1 to N do
                            Begin
                                 z:=TComplejo.NuevoNumero;
                                 {Cálculo de la raíz en formato polar}
                                 z.Modulo:=Power(Modulo,1/N);
                                 z.ArgumentoRadianes:=(2*Pi*(i))/N;
                                 {Conversión de radianes a grados}
                                 z.ArgumentoGrados:=RadToDeg(z.ArgumentoRadianes);
                                 {Modificación del formato rectangular}
                                 CalcularRectangular(z);
                                 {Añadir solución a la lista de soluciones}
                                 ListaSoluciones.Add(z);
                                 z.free;
                            end;
               end;

Un saludo y mil gracias por su tiempo

Última edición por ioco fecha: 11-03-2010 a las 08:31:33.
Responder Con Cita