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.