| Contacto | Chat | Foro |__
  
 
Principal Hoja de Vida Universidad Artículos Programas Descargas
 

Clase para manejo de números racionales (fracciones)


PROG00018 - C/C++
Esta clase, permite la manipulación sencilla de números racionales (fracciones). Incluye una interesante rutina para simplificación de fracciones. Admite todos los operadores aritméticos y condicionales y así como manejo de "streams". Permite "casting" a punto flotante en doble precisión.
class FRACCION
{
   int N,D;

   void Reducir (void);

   public:
   FRACCION (void);
   FRACCION (int n,int d=1);
   FRACCION (FRACCION& F);
   FRACCION& operator = (FRACCION& F);
   FRACCION operator + (FRACCION& F);
   FRACCION operator - (FRACCION& F);
   FRACCION operator * (FRACCION& F);
   FRACCION operator / (FRACCION& F);
   int operator == (FRACCION& F);
   int operator != (FRACCION& F);
   int operator > (FRACCION& F);
   int operator >= (FRACCION& F);
   int operator < (FRACCION& F);
   int operator <= (FRACCION& F);
   operator double (void);

   friend ostream& operator << (ostream& os,FRACCION& F);
};
void FRACCION::Reducir (void)
{
   if (D<0)
   {
      D= -D;
      N= -N;
   }
   else if (D==0)
      D= 1;

   int _N= abs(N),
   DD= (_N>D)?_N:D,
   DS= (_N<=D)?_N:D,R;

   while ((R= DD%DS)>0)
   {
      DD= DS;
      DS= R;
   }
   N/= DS;
   D/= DS;
}

FRACCION::FRACCION (void)
{
   N= 0;
   D= 1;
}

FRACCION::FRACCION (int n,int d)
{
   N= n;
   D= d;
   Reducir();
}

FRACCION::FRACCION (FRACCION& F)
{
   N= F.N;
   D= F.D;
   Reducir();
}

FRACCION& FRACCION::operator = (FRACCION& F)
{
   N= F.N;
   D= F.D;
   Reducir();

   return (*this);
}

FRACCION FRACCION::operator + (FRACCION& F)
{
   FRACCION T;
   T.N= N*F.D+D*F.N;
   T.D= D*F.D;

   return(T);
}

FRACCION FRACCION::operator - (FRACCION& F)
{
   FRACCION T;
   T.N= N*F.D-D*F.N;
   T.D= D*F.D;

   return(T);
}

FRACCION FRACCION::operator * (FRACCION& F)
{
   FRACCION T(N,D);
   T.N*= F.N;
   T.D*= F.D;

   return(T);
}
FRACCION FRACCION::operator / (FRACCION& F)
{
   FRACCION T(N,D);
   T.N*= F.D;
   T.D*= F.N;

   return(T);
}

int FRACCION::operator == (FRACCION& F)
{
   return (((double)N/D)==((double)F.N/F.D));
}

int FRACCION::operator != (FRACCION& F)
{
   return (!(operator==(F)));
}

int FRACCION::operator > (FRACCION& F)
{
   return (((double)N/D)>((double)F.N/F.D));
}

int FRACCION::operator <= (FRACCION& F)
{
   return (!(operator>(F)));
}

int FRACCION::operator < (FRACCION& F)
{
   return (((double)N/D)<((double)F.N/F.D));
}

int FRACCION::operator >= (FRACCION& F)
{
   return (!(operator<(F)));
}

FRACCION::operator double (void)
{
   return (double(N)/D);
}

ostream& operator << (ostream& os,FRACCION& F)
{
   F.Reducir();

   os << F.N;

   if (F.D!=1)
      os << "/" << F.D;

   return os;
}
Advertencia
Aunque no he escatimado esfuerzos en cuanto a proveer aplicaciones e información confiable y veraz, sin embargo no puedo garantizar que esté totalmente libre de errores; por esa razón, no asumo responsabilidad alguna por las consecuencias que se deriven de su empleo.




7-Zip

Descarga Adobre Reader

Descargar programa
  Copyright 2005 | Ramón Medina | Todos los derechos reservados | Última Actualización: Agosto del 2008 | webmaster@ramonmedina.name