{$codepage utf8} {$mode objfpc} Unit Complejos05; Interface Type TComplejo = class private ParteReal,ParteImag:double; public Constructor Crear(i:double); //Crea un imaginario puro Constructor Crear(r,i:double); Function ObtReal:double; Function ObtImag:double; Procedure PonReal(n:double); Procedure PonImag(n:double); Function ObtCad(dec:integer=0):string; Function PonCad(n:string):integer; Procedure Adicion(n:TComplejo); Procedure Multiplicacion(n:TComplejo);virtual; Procedure Cuadrado(n:TComplejo); Procedure Cuadrado; End; Implementation Constructor TComplejo.Crear(i:double); Begin ParteReal:=0; ParteImag:=i End; Constructor TComplejo.Crear(r,i:double); Begin ParteReal:=r; ParteImag:=i; End; Function TComplejo.ObtReal:double; Begin ObtReal:=ParteReal End; Function TComplejo.ObtImag:double; Begin ObtImag:=ParteImag End; Procedure TComplejo.PonReal(n:double); Begin ParteReal:=n; End; Procedure TComplejo.PonImag(n:double); Begin ParteImag:=n End; Function TComplejo.ObtCad(dec:integer=0):string; var aux1,aux2,p:string; Begin p:=''; Str(ParteReal:0:dec,aux1); Str(ParteImag:0:dec,aux2); if ParteImag>=0 then p:='+'; ObtCad := aux1 + p + aux2 + 'i'; End; Function TComplejo.PonCad(n:string):integer; Var aux:string; p,i,error:integer; PR,PI:string; encontro:boolean; Begin aux:=n; ParteReal:=0; ParteImag:=0; error:=0; if (aux[length(aux)]='i') and (Not(aux[length(aux)-1]in['0'..'9'])) then aux:=Copy(aux,1,length(aux)-1)+'1i'; if aux[length(aux)]='i' then Begin delete(aux,length(aux),1); if aux[length(aux)] in ['0'..'9'] then Begin i:=length(aux); encontro:=false; p:=0; while (not encontro) and (i>1) do Begin if (aux[i]='+') or (aux[i]='-') then Begin encontro:=true; p:=i end; i:=i-1 End; PR:=Copy(aux,1,p-1); delete(aux,1,p-1); PI:=aux; Val(PR,ParteReal,error); Val(PI,ParteImag,error); if error<>0 then Begin ParteReal:=0; ParteImag:=0 End End; End else Begin Val(aux,ParteReal,error); End; PonCad:=error End; Procedure TComplejo.Adicion(n:TComplejo); Begin PonReal(ObtReal+n.ObtReal); PonImag(ObtImag+n.ObtImag) End; Procedure TComplejo.Multiplicacion(n:TComplejo); var PR,PI:double; Begin Writeln('Multiplicando con TComplejo'); PR:=(ObtReal*n.ObtReal)-(ObtImag*n.ObtImag); PI:=(ObtReal*n.ObtImag)+(ObtImag*n.ObtReal); PonReal(PR); PonImag(PI) End; Procedure TComplejo.Cuadrado(n:Tcomplejo); Begin PonReal(n.obtReal);PonImag(n.ObtImag); Multiplicacion(n) End; Procedure TComplejo.Cuadrado; Begin Multiplicacion(self) End; End.