Clase de números racionales (Parte 3)
En las partes 1 y 2 de este desafío de 3 partes, se te pidió desarrollar una estructura de número racional struct. Un número racional, como su nombre indica, es una razón entre dos números naturales y normalmente se representa como una fracción con la forma 1/2, 5/4, -79/13, etc.
En la parte 1, la tarea consistía en crear una struct de C# con:
- Un constructor que recibe dos parámetros enteros,
- dos propiedades de solo lectura
NumeratoryDenominatorque devuelven el numerador y el denominador de la fracción, respectivamente, reducidos a su forma irreducible. - Una redefinición del método
ToString()que proporciona una representación de cadena del número racional, como se describió en el párrafo anterior.
En la parte 2, el código se amplió para:
- Permitir operaciones aritméticas
+,-,*y/entre números racionales (incluido el operador unario-) - Una propiedad
Signque devuelve el signo de la fracción.
Antes de completar esta parte, asegúrate de que tu clase cumpla las condiciones descritas en las partes 1 y 2. La mejor manera de hacerlo es completar primero esos desafíos y usar el código para comenzar este desafío.
Tarea
Tu tarea ahora es agregar operadores de comparación a tu clase para que los números racionales puedan compararse entre sí mediante los operadores de comparación ==, !=, <, <=, > y >=. Otro requisito es implementar la conversión implícita y explícita hacia y desde el tipo de valor C# decimal. Para obtener información sobre cómo implementar estas funcionalidades, consulta la pestaña Resources.
Ejemplos
var r1 = new Rational(1, 2);
var r2 = new Rational(10, 8);
var r3 = new Rational(2, -1);
// Comparison operations
r1 == r2 ➞ false
r2 >= r1 ➞ true
r2 != r3 ➞ true
r1 == new Rational(17/34) ➞ true
// Type conversion
var r4 = (Rational)6.5572m; ➞ explicit conversion from decimal
var d = (decimal)r2; ➞ explicit conversion to decimal
r4 == 6.5572m ➞ true (implicit conversion to decimal)
r4.ToString() ➞ "16393/2500"Notas
Al sobrecargar los operadores de comparación == y !=, también se espera que redefinas los métodos Equals() y GetHashCode() (consulta la pestaña Resources para obtener más información).