Este taller de algebra computacional se enfoca en la propiedad de aritmetica de precisión arbitraria usada en el algebra computacional.
Para este taller se requiere de la implementación de los operadores aritmeticos básicos para el conjunto de los racionales, basado en la distinción particular de los números enteros, fraccionarios y decimales.
El taller se trabajará en equipos de 3 a 5 personas, y debe existir participación funcional de todos los integrantes (commits que no sean solo comentarios o estilo).
La componente individual del taller se valora hasta una unidad. Mínimo deben existir 3 commits funcionales del integrante y una función a su responsabilidad (las funciones internas que requieran y no necesariamente de las 4 mencionadas explicitamente). La valoración individual por los commits será de $0.3$ y la función a su responsabilidad $0.5$.
En la componente colectiva:
README.md: $0.2$. El plazo máximo para el último commit válido será dominfo 2 de octubre a las 23:59:59. El enlace de sus repositorios me debe ser reportado máximo el miercoles 21 de septiembre a las 23:59:59.
Elegido el usuario que tendrá el alojamiento del repositorio, deben crear el repositorio público con el nombre que deseen dar a su implementación.
El repositorio debe contener:
README.md: Debe contener una descripción de su implementación, forma general de instalación y uso, así como asociar la finalidad como actividad del curso de herramientas del pregrado de computación científica, enlazando a la página oficial del pregrado. En este mismo archivo se debe mencionar a los integrantes enlazando a sus cuentas de github y asociando sus responsabilidades principales en la implementación. README.md). Para todos los conjuntos numéricos debe soportarse los siguientes operadores: +, -, *, / y ** (este último solo soporta como segundo operador números enteros o $0.5$). Estos operadores deben responder a las siguientes reglas:
Las operaciones entre los enteros generan enteros, salvo en la división. Para el desarrollo de todos los operadores entre entre enteros es posible usar el soporte nativo de enteros largos de python.
La división entre enteros cumplirá las reglas de representación de los fraccionarios.
Se distingue entre la división de dos cantidades y una fracción por medio de las siguientes formas: a/b es una fracción y a / b es la división de las dos cantidades. Debe tenerse en cuenta que en la fracción las dos cantidades son enteras.
Las operaciones entre los fraccionarios generan fraccionarios, salvo en los casos donde la fracción reducida puede llevarse a un entero. Las operaciones de enteros y fraccionarios cumplen la misma regla que entre fraccionarios (se implementa la potencia entera de fraccionarios).
Puede recurrir a la implementación de la aritmetica de enteros como paso intermedio para la aritmetica de fraccionarios.
Las operaciones entre los racionales en representación decimal generan racionales en representación decimal salvo que el resultado se pueda expresar como entero y de la división (la cual debe expresarse en fracción reducida). Las operaciones de enteros y racionales de representación decimal cumple la misma regla de las operaciones de representaciones decimales (se implementa la potencia entera de fraccionarios). Las operaciones de representación decimal y fraccionarios cumplen las reglas de fraccionarios.
Se debe hacer funciones para verificar el tipo de numero.
isQ: Racional en representación decimal. isF: Fraccionario. isZ: Enteros.isZ('-6')
True
isZ('5')
True
isZ('5.2')
False
isZ('5/2')
False
isF('5.2')
False
isF('5')
False
isF('5/2')
True
isQ('5')
False
isQ('-5.2')
True
isQ('5/2')
False
simplify('5+6')
'11'
simplify('5/6')
'5/6'
simplify('12/6')
'2'
simplify('0.5*0.7')
'0.35'
simplify('0.5/0.7')
'5/7'
simplify('0.5**3')
'0.125'
simplify('1.55+0.45')
'2'
simplify('1/2 + 3/2')
'2'
simplify('0.4+2/5')
'4/5'
simplify('(2/3)**2')
'4/9'