Programación Avanzada.
Centro Superior de Informática.
Universidad de La Laguna.
2001/2002
Números Racionales.
Un Número Racional es un número
con un numerador y un denominador de la forma a/b-
por ejemplo: 1/3, 3/4, 10/4 etc. El denominador no puede tomar el valor
0, pero si el numerador. Todo entero a es equivalente al número
racional a/1. Los números racionales se utilizan para el
cálculo exacto que implica fracciones; por ejemplo, 1/3 = 0,33333...
Este número no se puede representar de forma precisa en formato
en punto-flotante usando los tipos de datos float o double.
Si se quiere obtener un resultado exacto, hay que utilizar un número
racional.
Existen muchos números racionales que son equivalentes, por ejemplo,
1/3=2/6=3/9=4/12. Por conveniencia, 1/3 se utiliza para representar a todos
los números racionales que son equivalentes a el. El numerador y
el denominador de 1/3 se caracteriza porque el único divisor común
que tienen es el uno, se dice entonces que 1/3 está en su mínima
expresión.
Para reducir un número racional a su mínima expresión,
es necesario encontrar el máximo común
divisor de los valores absolutos de su numerador y denominador,
entonces se dividen ambos, el numerador y el denominador por dicho valor.
A continuación se presenta el algoritmo de Euclides para encontrar
el máximo común divisor (mcd) de dos valores enteros n
y
d:
t1 <- abs(n); t2 <- abs(d); // obtener los valores absolutos
de n y d;
r = t1 % t2 // resto de dividir t1 entre t2
while(r!=0){
t1 = t2;
t2 = r;
r = t1 % t2;
}
return t2; // cuando r sea cero t2 es el divisor común entre
t1 y t2
-
Escriba una clase Rational para encapsular
números racionales.
-
Utilizar el tipo longpara
representar tanto al numerador como al
denominador.
-
Un número racional se debe representar internamente usando su mínima
expresión, esto es, el máximo común divisor entre
el numerador y el denominador debe ser 1. El método para calcular
el máximo común divisor mcg()
es solo para uso interno de la clase Rational.
El método abs(x) está definido
en la clase Math y devuelve el valor absoluto de x.
-
Se han de proporcionar constructores de la forma
Rational(numerador, denominador) y
Rational() (por
defecto se proporciona 0/1).
-
Además se han de proporcionar métodos que permitan a una clase
cliente conocer los valores del numerador y del denominador (getter).
-
Implementar metodos add,
subtract,
multiply
and divide que deben devolver un objeto
Rational.
-
El método toString devuelve una cadena
que representa a un objeto número racional de la forma:
numerador / denominador.
-
Escriba una clase cliente Test para comprobar
el correcto funcionamiento de la clase Rational.
En esta clase cree dos objetos número racional r1 y r2
con valores 2/1 y 2/3. Muestre por pantalla el resultado de r1 + r2, r1
- r2, r1 x r2, r1 /r2. Ejemplo de salida:
>java TestRationalClass
2/1 + 2/3 = 8/3
2/1 - 2/3 = 4/3
2/1 * 2/3 = 4/3
2/1 / 2/3 = 3/1
Bibliografía.
Y. Daniel Liang. "Introduction to Java Programming".
QueE&T. 1999