#!/usr/bin/python # -*- coding: utf-8 -*- """ Bosquejo de un programa para manipular nuemeros complejos Autor: Antonio Carrillo Ledesma """ class Complejos: """Definicion de la clase Complejos""" def __init__(self, rp=0, rq=1, ip=0, iq=1): """Constructor nulo rp/rq + ip/iqi""" self.R = Fraccion(rp, rq) self.I = Fraccion(ip, iq) def __str__(self): return str(self.R) + " + " + str(self.I) + "i" def visualiza(self): """Visualiza la Fraccion""" print("{} + {}i".format(self.R, self.I)) def suma1(self, a): self.R.suma1(a.R) self.I.suma1(a.I) def suma(self, a, b): self.R.suma(a.R, b.R) self.I.suma(a.I, b.I) 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.cribaEratostenes() 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 cribaEratostenes(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 = Complejos(1, 3, 2, 4) b = Complejos(2, 3) c = Complejos() a.visualiza() b.visualiza() c.visualiza() print("Suma de un operando") r = str(a) + " + " + str(b) + " = " a.suma1(b) r = r + str(a) print(r) print("Suma de dos operandos") c.suma(a, b) r = str(a) + " + " + str(b) + " = " + str(c) print(r) # a.visualizaPrimos()