Taller Algebra Computacional: Alternativo

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).

Evaluación

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:

  • Archivo de licencia: $0.1$.
  • Archivo README.md: $0.2$.
  • Documento Notebook: $0.5$.
  • Las $3.4$ unidades restantes se obtendrá directamente de los 20 casos de prueba (cada acierto corresponde a $0.18$ unidades).

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.

Repositorio

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:

  • Archivo de licencia: Especifique un tipo de licencia libre para su implementación.
  • Archivo 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.
  • Implementación en python: Puede usar python 2 o 3 según sea de su agrado. En caso de usar python 2 utilice las opciones de compatibilidad con python 3. Su desarrollo puede ser tan modular como lo desee o requiera.
  • Documentación en notebook: Debe documentarse adecuadamente con sus casos de prueba que no solo explicarán el funcionamiento sino que serán prueba del correcto funcionamiento de la implementación. La documentación debe recordar su forma de uso (explicado en README.md).

Operaciones a soportar

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:

Enteros

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.

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.

Representación decimal

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.

Tipos numericos

Se debe hacer funciones para verificar el tipo de numero.

  • isQ: Racional en representación decimal.
  • isF: Fraccionario.
  • isZ: Enteros.

Casos de prueba

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'