"rational". Más...
#include <iostream>
#include <cstdlib>
#include <cctype>
Ir al código fuente de este archivo.
Namespaces | |
| namespace | std |
Clases | |
| class | rational< INT > |
La clase rational implementa las operaciones aritméticas principales para números rationales. Más... | |
Definiciones | |
| #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 (INT x, 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--. | |
"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 |
| NUM mcd | ( | NUM | x, | |
| NUM | y | |||
| ) | [inline] |
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 436 del archivo rational.h.
| INT gcd | ( | INT | x, | |
| INT | y | |||
| ) | [inline] |
| 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 250 del archivo rational.h.
| double real | ( | const rational< NUM > & | num | ) | [inline] |
| long integer | ( | const rational< NUM > & | num | ) | [inline] |
| bool check_ok | ( | const rational< NUM > & | r | ) | [inline] |
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 352 del archivo rational.h.
| bool check_ok_no_Rep | ( | const rational< NUM > & | r | ) | [inline] |
Verifica la invariante de la clase rational.
Libera al programador de implementar el método Ok()
Definición en la línea 388 del archivo rational.h.
| ostream& operator<< | ( | ostream & | COUT, | |
| const rational< NUM > & | r | |||
| ) | [inline] |
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 530 del archivo rational.h.
| istream& operator>> | ( | istream & | CIN, | |
| rational< NUM > & | r | |||
| ) | [inline] |
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 553 del archivo rational.h.
| rational<NUM> operator+ | ( | const rational< NUM > & | x, | |
| const rational< NUM > & | y | |||
| ) | [inline] |
"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 699 del archivo rational.h.
| rational<NUM> operator- | ( | const rational< NUM > & | x, | |
| const rational< NUM > & | y | |||
| ) | [inline] |
"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 716 del archivo rational.h.
| rational<NUM> operator* | ( | const rational< NUM > & | x, | |
| const rational< NUM > & | y | |||
| ) | [inline] |
"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 733 del archivo rational.h.
| rational<NUM> operator/ | ( | const rational< NUM > & | x, | |
| const rational< NUM > & | y | |||
| ) | [inline] |
"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 751 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 776 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 796 del archivo rational.h.
1.5.6