17 de mayo de 2016

34. PR11. Fracciones (clases)

PR11: Fracciones (100 puntos)

Desarrolla un programa que haga lo siguiente:
  1. Crear una clase "fraccion", que cuente con dos atributos: dividendo y divisor, que se asignan en el constructor, y se imprimen como X/Y en el método __str__.
  2. Crear un método sumar que recibe otra fracción y devuelve una nueva fracción con la suma de ambas.
  3. Crear un método multiplicar que recibe otra fracción y devuelve una nueva fracción con el producto de ambas.
  4. Crear un método simplificar que modifica la fracción actual de forma que los valores del dividendo y divisor sean los menores posibles.
PISTAS:
  1. Crear una función descomponer (no es un método de la clase "fraccion", está "fuera" de la clase) que devuelva una lista con los factores de un número. Se consigue con un bucle y comparaciones con la operación módulo.
  2. Crear un método dentro de la clase "fraccion" llamado simplificar, que, al aplicarlo sobre una instancia de esa clase, haga más o menos lo siguiente: obtenga las listas de factores tanto del numerador como del denominador. Iterando sobre una de las listas (ej: numerador), si encuentra un factor común en la otra (ej: denominador), elimine ese factor de la otra (de la del denominador)  pero no de la primera, y, a su vez, vaya construyendo una lista intermedia con esos factores comunes. Cuando acabe, iterando sobre esa lista intermedia creada, si encuentra factores comunes en la primera lista (la del numerador), que los retire de ella. Ya sólo queda que el nuevo numerador sea la multiplicación de los factores que han quedado en su lista y lo mismo pasaría con el denominador. La lista intermedia representaría el MCD (máximo común divisor).

PR11BIS: producto escalar y vectorial, o determinante matriz n x n (10 puntos extra)

Repite el programa del ejercicio 4, el de obtener el producto escalar y vectorial de dos vectores, o bien, el del cálculo del determinante de la matriz n x n, pero usando en esta ocasión una clase vector o una clase matriz. Si te sientes capaz, amplíalo todo lo posible. En el primer caso, por ejemplo, pidiendo un punto y calculando el plano que contiene a esos dos vectores directores y ese punto y en el segundo, intentando por ejemplo calcular la matriz adjunta e inversa.

No hay comentarios:

Publicar un comentario