#!/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 = 1000 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 __add__(self, a): """Suma""" p = self.P * a.Q + a.P * self.Q q = self.Q * a.Q return Fraccion(p, q) def __sub__(self, a): """Resta""" p = self.P * a.Q - a.P * self.Q q = self.Q * a.Q return Fraccion(p, 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 visualizaPrimos(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 = a + b r = str(a) + " + " + str(b) + " = " + str(c) print(r) print("Resta de dos operandos") c = a - b r = str(a) + " - " + str(b) + " = " + str(c) print(r) a.visualizaPrimos()