Escolar Documentos
Profissional Documentos
Cultura Documentos
ALGORITMOS Y PROGRAMACION
UNMSM FII
ALGORITMOS Y PROGRAMACION
Racional
Racional() getnum() getdenom() +, -, *, / ==, <, <=, >, >=, != =, +=, -=, *=, /= ++, -<<, >> print()
Interface publica
Interface privada
//Archivo: racional.h #ifndef RACIONAL_H #define RACIONAL_H #include <iostream> #include <assert.h> using namespace std; int mcd(int, int); //para el maximo comun divisor class Racional{ public: //constructores Racional(int num=0, int denom=1); Racional(const Racional&); //atributos int getnum()const{return num;} int getdenom()const{return denom;} //operadores aritmeticos Racional operator-(); // menos unario friend Racional operator+(const Racional&, friend Racional operator-(const Racional&, friend Racional operator*(const Racional&, friend Racional operator/(const Racional&,
//operadores de comparacion friend bool operator==(const Racional&, const Racional&); friend bool operator!=(const Racional&, const Racional&); friend bool operator<(const Racional&, const Racional&); friend bool operator<=(const Racional&, const Racional&); friend bool operator>(const Racional&, const Racional&);
UNMSM FII
ALGORITMOS Y PROGRAMACION
friend bool operator>=(const Racional&, const Racional&); //operadores unarios Racional& operator++(); //incremento prefijo Racional& operator--(); //disminucion prefijo //operadores de asignacion Racional& operator=(const Racional&); Racional& operator+=(const Racional&); Racional& operator-=(const Racional&); Racional& operator*=(const Racional&); Racional& operator/=(const Racional&); //entrada salida void print(); friend ostream& operator<<(ostream&, const Racional&); friend istream& operator>>(istream&, Racional&); private: int num, denom; void simplificar(); }; Racional Racional :: operator-() { return Racional(-num, denom); } Racional operator+(const Racional& r1, const Racional& r2) { int dd = r1.denom*r2.denom; int nn = r1.num*r2.denom + r1.denom*r2.num; return Racional(nn,dd); } Racional operator-(const Racional& r1, const Racional& r2) { int dd = r1.denom*r2.denom; int nn = r1.num*r2.denom - r1.denom*r2.num; return Racional(nn,dd); } Racional operator*(const Racional& r1, const Racional& r2) { int dd = r1.denom*r2.denom; int nn = r1.num*r2.num; return Racional(nn,dd); } Racional operator/(const Racional& r1, const Racional& r2) { int dd = r2.num*r1.denom; int nn = r1.num*r2.denom; return Racional(nn,dd); }
UNMSM FII
ALGORITMOS Y PROGRAMACION
bool operator==(const Racional& r1, const Racional& r2) { return (r1.num*r2.denom == r1.denom*r2.num)?true:false; } bool operator!=(const Racional& r1, const Racional& r2) { return (r1.num*r2.denom != r1.denom*r2.num)?true:false; } bool operator<(const Racional& r1, const Racional& r2) { return (r1.num*r2.denom < r1.denom*r2.num)?true:false; } bool operator<=(const Racional& r1, const Racional& r2) { return (r1.num*r2.denom <= r1.denom*r2.num)?true:false; } bool operator>(const Racional& r1, const Racional& r2) { return (r1.num*r2.denom > r1.denom*r2.num)?true:false; } bool operator>=(const Racional& r1, const Racional& r2) { return (r1.num*r2.denom >= r1.denom*r2.num)?true:false; } Racional& Racional :: operator++() //prefijo { num = num + denom; return *this; } Racional& Racional :: operator--() //prefijo { num = num - denom; return *this; } Racional& Racional :: operator=(const Racional& p) { if ( *this != p) { num = p.num; denom = p.denom; } return *this; } Racional& Racional :: operator+=(const Racional& p) { *this = *this + p; return *this; }
UNMSM FII
ALGORITMOS Y PROGRAMACION
Racional& Racional :: operator-=(const Racional& p) { *this = *this-p; return *this; } Racional& Racional :: operator*=(const Racional& p) { *this = *this*p; return *this; } Racional :: Racional(int nu, int den) { assert(den != 0); num = nu; denom = den; simplificar(); } Racional :: Racional(const Racional& r) { num = r.num; denom = r.denom; } void Racional :: print() { cout<< *this; } ostream& operator<<(ostream& os, const Racional& r) { os<<r.num<<"/"<<r.denom; return os; } istream& operator>>(istream& is, Racional& r) { is>>r.num>>r.denom; return is; } void Racional :: simplificar() { if (!num) return; if (denom<0) { num = -num; denom = -denom; } int d = mcd(num,denom); if ( d > 1) { num = num/d; denom = denom/d; } }
UNMSM FII
int mcd(int x, int y) { if (x < y) return mcd(y,x); if( x%y == 0) return y; else return mcd(y, x%y); } #endif
ALGORITMOS Y PROGRAMACION
//Archivo racional.cpp #include <stdio.h> #include "racional.h" using namespace std; int main() //racional.cpp { Racional r1(2,3), r2(1,2), r3(2,3), r4; cout<<"Numeros racionales"<<endl; cout<<"r1 = "<<r1<<endl; cout<<"r2 = "<<r2<<endl; cout<<"r3 = "<<r3<<endl; r4 = r1 + r2; cout<<"\nSuma de r1 y r2 = r4 -> "<<r4<<endl; if (r1 == r3) cout<<"\nr1 es igual a r3"<<endl; else cout<<"\nr1 no es igual a r3"<<endl; r4 += r1; cout<<"\nr4 = r4 + r1 -> "<<r4<<endl; r4 *= r2; cout<<"\nr4 = r4 * r2 -> "<<r4<<endl; ++r3; cout<<"\n1 + r3 = "<<r3<<endl; r1 = r4; cout<<"\nAsignando r4 a r1 -> "<<r1<<endl; cout<<"\nPresione una tecla..."; getchar(); return 0; }
UNMSM FII
ALGORITMOS Y PROGRAMACION
Referencias: 1. 2. Perry Jo, Ellen and Levin Harold. An Introduction to ObjectOriented Design in C++ 1st edition, Addison Wesley Publishing Company, Inc. U.S.A. 1999. Deitel y Deitel, C++ How To Program 4th. Edition, Prentice Hall, Inc. U.S.A. 2003.
/ERL 2010