| 
    La Matriz Abstracta no Polimorfica:
   
    
   
   | 
  
  
  
 
Declara el tipo "rational".  
Más...
#include <iostream>#include <cstdlib>#include <cctype>Ir al código fuente de este archivo.
Clases | |
| class | rational< INT > | 
La clase rational implementa las operaciones aritméticas principales para números rationales.  Más... | |
Namespaces | |
| namespace | std | 
| C++ STL.  | |
'defines' | |
| #define | rational_h | 
| Evita la inclusión múltiple.   | |
Funciones | |
| template<class NUM > | |
| NUM | mcd (NUM x, NUM y) | 
Calcula el Máximo Común Divisor de los números "x" y "y".   | |
| template<class INT > | |
| INT | gcd (const INT &x, const INT &y) | 
Sinónimo de mcd(x,y).   | |
| template<class NUM > | |
| bool | operator== (const rational< NUM > &x, const rational< NUM > &y) | 
| ¿ x == y ?.   | |
| template<class NUM > | |
| bool | operator< (const rational< NUM > &x, const rational< NUM > &y) | 
| ¿ x < y ?   | |
| template<class NUM > | |
| bool | operator> (const rational< NUM > &x, const rational< NUM > &y) | 
| ¿ x > y ?   | |
| template<class NUM > | |
| bool | operator!= (const rational< NUM > &x, const rational< NUM > &y) | 
| ¿ x != y ?   | |
| template<class NUM > | |
| bool | operator<= (const rational< NUM > &x, const rational< NUM > &y) | 
| ¿ x <= y ?   | |
| template<class NUM > | |
| bool | operator>= (const rational< NUM > &x, const rational< NUM > &y) | 
| ¿ x >= y ?   | |
| template<class NUM > | |
| double | real (const rational< NUM > &num) | 
| Convertidor a punto flotante.   | |
| template<class NUM > | |
| long | integer (const rational< NUM > &num) | 
| Convertidor a punto fijo.   | |
| template<class NUM > | |
| bool | check_ok (const rational< NUM > &r) | 
Verifica la invariante de la clase rational.   | |
| template<class NUM > | |
| bool | check_ok_no_Rep (const rational< NUM > &r) | 
Verifica la invariante de la clase rational.   | |
| template<class NUM > | |
| ostream & | operator<< (ostream &COUT, const rational< NUM > &r) | 
Graba el valor de "r" en el flujo "COUT".   | |
| template<class NUM > | |
| istream & | operator>> (istream &CIN, rational< NUM > &r) | 
Lee del flujo de texto "CIN" el valor de "r".   | |
| template<class NUM > | |
| rational< NUM > | operator+ (const rational< NUM > &x, const rational< NUM > &y) | 
"x+y".   | |
| template<class NUM > | |
| rational< NUM > | operator- (const rational< NUM > &x, const rational< NUM > &y) | 
"x-y".   | |
| template<class NUM > | |
| rational< NUM > | operator* (const rational< NUM > &x, const rational< NUM > &y) | 
"x*y".   | |
| template<class NUM > | |
| rational< NUM > | operator/ (const rational< NUM > &x, const rational< NUM > &y) | 
"x/y".   | |
| template<class NUM > | |
| rational< NUM > & | operator++ (rational< NUM > &r) | 
++r.   | |
| template<class NUM > | |
| rational< NUM > | operator++ (rational< NUM > &r, int) | 
r++.   | |
| template<class NUM > | |
| rational< NUM > & | operator-- (rational< NUM > &r) | 
--r.   | |
| template<class NUM > | |
| rational< NUM > | operator-- (rational< NUM > &r, int) | 
r--.   | |
Declara el tipo "rational". 
rational implementa las operaciones aritméticas principales para números rationales. [1/3] == [2/6] == ... [9/27] == ...  [1/3] * [2/6] / [3/9] - [9/27] Definición en el archivo rational.h.
| #define rational_h | 
Evita la inclusión múltiple.
Definición en la línea 19 del archivo rational.h.
| NUM mcd | ( | NUM | x, | 
| NUM | y | ||
| ) | 
Calcula el Máximo Común Divisor de los números "x" y "y". 
 mcd(x,y) >= 1  siempre. (y != 0)     {{  // test::mcd()
        assertTrue( 1 == mcd(1,2) );
        assertTrue( 2*3*5 == mcd( 2*2*2*2 * 3*3 * 5*5, 2*3*5 ) );
        assertTrue( 30 == mcd( -3600, -30 ) );
    }}
Definición en la línea 449 del archivo rational.h.
| INT gcd | ( | const INT & | x, | 
| const INT & | y | ||
| ) |  [inline] | 
        
Sinónimo de mcd(x,y). 
Definición en la línea 112 del archivo rational.h.
| bool operator== | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) |  [inline] | 
        
¿ x == y ?.
    {{  // test::op_comp()
        rational<INT> neg_half(-1,2), quarter(1,4);
        assertTrue( neg_half == -(-neg_half) );
        assertTrue( neg_half <  quarter  );
        assertTrue( quarter  >  neg_half );
        assertTrue( neg_half <= quarter  );
        assertTrue( quarter  >= neg_half );
        assertTrue( neg_half != quarter  );
    }}
Definición en la línea 254 del archivo rational.h.
| bool operator< | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) |  [inline] | 
        
¿ x < y ?
Definición en la línea 266 del archivo rational.h.
| bool operator> | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) |  [inline] | 
        
¿ x > y ?
Definición en la línea 289 del archivo rational.h.
| bool operator!= | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) |  [inline] | 
        
¿ x != y ?
Definición en la línea 295 del archivo rational.h.
| bool operator<= | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) |  [inline] | 
        
¿ x <= y ?
Definición en la línea 301 del archivo rational.h.
| bool operator>= | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) |  [inline] | 
        
¿ x >= y ?
Definición en la línea 307 del archivo rational.h.
Convertidor a punto flotante.
Definición en la línea 313 del archivo rational.h.
Convertidor a punto fijo.
Definición en la línea 319 del archivo rational.h.
Verifica la invariante de la clase rational. 
    +---+
    | 3 | <==  m_num == numerador del número racional
    +---+
    |134| <==  m_den == denominador del número racional
    +---+
Ok() 
    {{  // test::check_ok()
        rational<INT> r, *nul=0;      assertFalse( check_ok(*nul) );
        r.m_num =  2;  r.m_den =  0;  assertFalse( check_ok(  r ) );
        r.m_num =  2;  r.m_den = -1;  assertFalse( check_ok(  r ) );
        r.m_num =  0;  r.m_den =  2;  assertFalse( check_ok(  r ) );
        r.m_num = 31;  r.m_den = 31;  assertFalse( check_ok(  r ) );
        r.simplify();                 assertTrue ( check_ok(  r ) );
    }}
Definición en la línea 356 del archivo rational.h.
| bool check_ok_no_Rep | ( | const rational< NUM > & | r | ) | 
Verifica la invariante de la clase rational. 
Ok() 
Definición en la línea 401 del archivo rational.h.
| ostream& operator<< | ( | ostream & | COUT, | 
| const rational< NUM > & | r | ||
| ) | 
Graba el valor de "r" en el flujo "COUT". 
cout << r << q;
    {{  // test::op_out()
        std::basic_ostringstream<char> ost; // receptor de salida
        ost.str(""); ost << rational<INT>(-1,2);  assertTrue( ost.str() == "[-1/2]" );
        ost.str(""); ost << rational<INT>(-12);   assertTrue( ost.str() == "[-12]"  );
        ost.str(""); ost << rational<INT>(1-1,8); assertTrue( ost.str() == "[0]"    );
        ost.str(""); // Borra el receptor de salida
        ost << rational<INT>(-1,2) << rational<INT>(-12) << rational<INT>(1-1,8);
        assertTrue( ost.str() == "[-1/2][-12][0]" );
    }}
Definición en la línea 543 del archivo rational.h.
| istream& operator>> | ( | istream & | CIN, | 
| rational< NUM > & | r | ||
| ) | 
Lee del flujo de texto "CIN" el valor de "r". 
"]". [ -+-+-+-+- 4 / -- -+ -- 32 ]  se lee como  [1/8]     {{  // test::op_in()
        std::basic_istringstream<char> ist( "[-1/2] [-12] [0]" );
        rational<INT> r(0); ist >> r;  assertTrue( r == rational<INT>(-1,2) );
        rational<INT> s(1); ist >> s;  assertTrue( s == rational<INT>(-12)  );
        rational<INT> t(2); ist >> t;  assertTrue( t == rational<INT>(0)    );
        ist.str( "[ -+-+-+-+- 4 / -- -+ -- 32  ]" );
        rational<INT> u(3); ist >> u;  assertTrue( u == rational<INT>(1,8) );
    }}
Definición en la línea 566 del archivo rational.h.
| rational<NUM> operator+ | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) | 
"x+y". 
"x+y".    {{  // test::op_add()
        rational<INT> add(0), sub(0);
        for ( int i=20; i>=-20; --i ) {
            add = add + rational<INT>(i-i, 20*i+1);
            sub = sub - rational<INT>(i-i, 20*i+1);
        }
        assertTrue( add == sub );
    }}
Definición en la línea 712 del archivo rational.h.
| rational<NUM> operator- | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) | 
"x-y". 
"x-y".    {{  // test::op_add()
        rational<INT> add(0), sub(0);
        for ( int i=20; i>=-20; --i ) {
            add = add + rational<INT>(i-i, 20*i+1);
            sub = sub - rational<INT>(i-i, 20*i+1);
        }
        assertTrue( add == sub );
    }}
Definición en la línea 729 del archivo rational.h.
| rational<NUM> operator* | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) | 
"x*y". 
"x*y".    {{  // test::op_mult()
        rational<INT> mlt(1), div(1);
        for ( int i=15; i>=-15; --i ) {
            mlt = mlt * rational<INT>(17*i-1, 13*i+1);
            div = div / rational<INT>(13*i+1, 17*i-1);
        }
        assertTrue( mlt == div );
    }}
Definición en la línea 746 del archivo rational.h.
| rational<NUM> operator/ | ( | const rational< NUM > & | x, | 
| const rational< NUM > & | y | ||
| ) | 
"x/y". 
"x/y". y != 0       {{  // test::op_mult()
        rational<INT> mlt(1), div(1);
        for ( int i=15; i>=-15; --i ) {
            mlt = mlt * rational<INT>(17*i-1, 13*i+1);
            div = div / rational<INT>(13*i+1, 17*i-1);
        }
        assertTrue( mlt == div );
    }}
Definición en la línea 764 del archivo rational.h.
++r. 
    {{  // test::op_cpp()
        rational<INT> r(3,2);
        assertTrue( r++ == rational<INT>(3,2) );
        assertTrue( r   == rational<INT>(5,2) );
        assertTrue( r-- == rational<INT>(5,2) );
        assertTrue( r   == rational<INT>(3,2) );
        assertTrue( --r == rational<INT>(1,2) );
    }}
Definición en la línea 789 del archivo rational.h.
r++. 
Definición en la línea 796 del archivo rational.h.
--r. 
    {{  // test::op_cpp()
        rational<INT> r(3,2);
        assertTrue( r++ == rational<INT>(3,2) );
        assertTrue( r   == rational<INT>(5,2) );
        assertTrue( r-- == rational<INT>(5,2) );
        assertTrue( r   == rational<INT>(3,2) );
        assertTrue( --r == rational<INT>(1,2) );
    }}
Definición en la línea 809 del archivo rational.h.
r--. 
Definición en la línea 816 del archivo rational.h.
 1.8.0