#!/usr/bin/python # -*- coding: utf-8 -*- """ Bosquejo de un programa para manipular fracciones y su simplificacion Autor: Antonio Carrillo Ledesma """ class Fraccion: """Definicion de la clase Fraccion""" Pr = [] # inicializa el arreglo que contendra los primos encontrados nPr = 100 def __init__(self, p=0, q=1): """Constructor fraccion p/q""" self.P = p self.Q = q self.criba_Eratostenes() def __str__(self): """Visualiza la Fraccion""" self.simplifica() return str(self.P) + "/" + str(self.Q) def visualiza(self): """Visualiza la Fraccion""" self.simplifica() print("{} / {}".format(self.P, self.Q)) def suma1(self, a): """Suma un operador""" self.P = self.P * a.Q + a.P * self.Q self.Q = self.Q * a.Q def suma(self, a, b): """Suma dos operadores""" self.P = a.P * b.Q + b.P * a.Q self.Q = a.Q * b.Q def criba_Eratostenes(self): """Calcular los primeros N numeros primos por el algoritmo de la criba de Eratostenes """ # Guarda los primeros 2 primos self.Pr.append(2) self.Pr.append(3) npr = 2 # Empieza la busqueda de primos a partir del numero 4 n = 4 # Ciclo para buscar los primeros N primos while npr < self.nPr: for i in range(npr): if (n % self.Pr[i]) == 0: break if i == npr - 1: self.Pr.append(n) npr += 1 n += 1 def visualiza_Primos(self): """Visualiza los primos encontrados""" print("Visualiza los primeros " + str(self.nPr) + " primos ") for i in range(self.nPr): print(self.Pr[i]) def simplifica(self): """Simplifica la fraccion""" for i in range(self.nPr): sw = 1 while sw == 1: sw = 0 if abs(self.P) < 2 or self.Q < 2: break if self.P % self.Pr[i] == 0 and self.Q % self.Pr[i] == 0: self.P //= self.Pr[i] self.Q //= self.Pr[i] sw = 1 """ Prueba de las clases """ if __name__ == "__main__": a = Fraccion(1, 3) b = Fraccion(2, 3) c = Fraccion() a.visualiza() b.visualiza() c.visualiza() print("Suma de dos operandos") c.suma(a, b) r = str(a) + " + " + str(b) + " = " + str(c) print(r) print("Suma de un operando") r = str(a) + " + " + str(b) + " = " a.suma1(b) r = r + str(a) print(r) a.visualiza_Primos()