NelloRizzo

Frazioni Aritmetiche

Nov 30th, 2020
495
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # supponiamo di voler implementare un sistema in cui sia possibile effettuare
  2. # operazioni tra frazioni aritmetiche
  3. #
  4. # cosa intendiamo con "frazione aritmetica"?
  5. # quali sono le operazioni che intendiamo effettuare?
  6. #
  7. # una [frazione aritmetica] è un numero rappresentato da un [segno], un
  8. # [numeratore] e un [denominatore]
  9. # il [valore numerico] associato alla frazione è dato dal rapporto tra
  10. # numeratore e denominatore.
  11. #
  12. # Frazione
  13. #   segno -> può essere + o - (poiché non mi piace + e - dico + => 1 e - => -1)
  14. #   numeratore -> qualsiasi numero intero non negativo
  15. #   denominatore -> qualsiasi numero intero positivo
  16. #
  17. class Frazione:
  18.     #segno = 1 # segno positivo (esempio)
  19.     #numeratore = 0
  20.     #denonimatore = 1
  21.  
  22.     def stampa_a_video(self): # metodo della classe Frazione
  23.         if (self.__numeratore == 0):
  24.             print(0)
  25.             return
  26.  
  27.         if (self.__segno == -1):
  28.             print("-",end="")
  29.         print(int(self.__numeratore), end="")
  30.         if (self.__denominatore != 1):
  31.             print("/", end="")
  32.             print(int(self.__denominatore))
  33.         else:
  34.             print()
  35.  
  36. #    def __init__(self): # costruttore di classe Frazione
  37. #        print("Chiamata al costruttore")
  38. #        self.segno = 1
  39. #        self.numeratore = 0
  40. #        self.denominatore = 1
  41.  
  42.     def __init__(self, numeratore=0, denominatore=1):
  43.         print("Chiamata ad init")
  44.         self.__segno = 1
  45.         if (numeratore < 0):
  46.             numeratore *= -1
  47.             self.__segno = -1
  48.         if (denominatore < 0):
  49.             denominatore *= -1
  50.             self.__segno *= -1
  51.  
  52.         self.__numeratore = numeratore
  53.         self.__denominatore = denominatore
  54.         self.__riduzione()
  55.  
  56.     def leggi_numeratore(self): # accesso in lettura ad una variabile di stato <--------------------- getter
  57.         return self.__numeratore
  58.  
  59.     def imposta_numeratore(self, numeratore): # accesso in scrittura ad una variabile di stato <----- setter
  60.         if (numeratore < 0):
  61.             numeratore *= -1
  62.             self.__segno = -1
  63.         self.__numeratore = numeratore
  64.         self.__riduzione()
  65.  
  66.     def leggi_denominatore(self): # accesso in lettura ad una variabile di stato <--------------------- getter
  67.         return self.__denominatore
  68.  
  69.     def imposta_denominatore(self, denominatore): # accesso in scrittura ad una variabile di stato <----- setter
  70.         if (denominatore < 0):
  71.             denominatore *= -1
  72.             self.__segno = -1
  73.         self.__denominatore = denominatore
  74.         self.__riduzione()
  75.  
  76.     def get_segno(self):
  77.         return self.__segno;
  78.     def set_segno(self, segno):
  79.         self.__segno = -1 if (segno < 0) else 1
  80.  
  81.     segno = property(fget=get_segno, fset=set_segno,fdel=None, doc=None)
  82.     numeratore = property(leggi_numeratore, imposta_numeratore)
  83.     denominatore = property(leggi_denominatore, imposta_denominatore)
  84.  
  85.     def __mcd(self, a, b):
  86.         if (b == 0):
  87.             return a
  88.         if (a < b):
  89.             (a,b)=(b,a)
  90.         return self.__mcd(b, a % b)
  91.  
  92.     def __riduzione(self):
  93.         d = self.__mcd(self.__numeratore, self.__denominatore)
  94.         self.__numeratore /= d
  95.         self.__denominatore /= d
  96.  
  97.     def addizione(self, f):
  98.         return Frazione(f.__segno * f.numeratore * self.denominatore + self.__segno * self.numeratore * f.denominatore, f.denominatore * self.denominatore)
  99.     def sottrazione(self, f):
  100.         return Frazione(-f.__segno * f.numeratore * self.denominatore + self.__segno * self.numeratore * f.denominatore, f.denominatore * self.denominatore)
  101.     def moltiplicazione(self, f):
  102.         return Frazione(f.__segno * f.numeratore * self.numeratore * self.__segno, f.denominatore * self.denominatore)
  103.     def divisione(self, f):
  104.         return self.moltiplicazione(Frazione(f.denominatore * f.__segno, f.numeratore))
  105.     def inverti(self):
  106.         return Frazione(-self.__numeratore, self.__denominatore)
  107.  
  108.     def as_float(self): return self.__segno * self.__numeratore / self.__denominatore
  109.  
  110.     def __eq__(self, value): return self.__segno == value.segno and self.__numeratore == value.numeratore and self.__denominatore == value.denominatore
  111.     def __ne__(self, value): return not self.__eq__(value)
  112.     def __lt__(self, value): return self.as_float() < value.as_float()
  113.     def __le__(self, value): return self.__lt__(value) or self.__eq__(value)
  114.     def __gt__(self, value): return self.as_float() > value.as_float()
  115.     def __ge__(self, value): return self.__gt__(value) or self.__eq__(value)
  116.  
  117.     def __str__(self):
  118.         if (self.__numeratore == 0): return "0"
  119.         s = "-" if (self.__segno == -1) else ""
  120.         s += str(int(self.__numeratore))
  121.         if (self.__denominatore != 1):
  122.             s += "/" + str(int(self.__denominatore))
  123.         return s
  124.  
  125.     def __add__(self, f): return self.addizione(f)
  126.  
  127. f1 = Frazione(4,2) # f1 è variabile di istanza della classe Frazione e contiene una propria copia
  128.                     # di segno, numeratore, denominatore
  129. #f1.numeratore = -20
  130.                    #f1.denonimatore = 0
  131. #print("segno di f1: " + str(f1.segno) + " numeratore di f1: " +
  132.                   #str(f1.__numeratore) + " denominatore: " + str(f1.__denominatore))
  133. f1.stampa_a_video()
  134. #stampa_a_video(f1)
  135. f2 = Frazione(denominatore= -7,numeratore= 4)
  136. print("numeratore di f2: " + str(f2.leggi_numeratore()))
  137. f2.segno = -1
  138. #print("segno di f2: " + str(f2.segno) + " numeratore di f2: " + str(f2.__numeratore))
  139. f2.stampa_a_video()
  140. f2.imposta_numeratore(-2)
  141. f2.stampa_a_video()
  142. f1.numeratore = 15
  143. f1.denominatore = -2
  144. f1.stampa_a_video()
  145. f3 = f1.addizione(f2)
  146. f1.stampa_a_video()
  147. f2.stampa_a_video()
  148. f3.stampa_a_video()
  149. f3 = f1.sottrazione(f2)
  150. f3.stampa_a_video()
  151. f3 = f1.moltiplicazione(f2)
  152. f3.stampa_a_video()
  153. f3 = f1.divisione(f2)
  154. f3.stampa_a_video()
  155. f3 = f3.inverti()
  156. f3.stampa_a_video()
  157.  
  158. f1 = Frazione(3, 4)
  159. f2 = Frazione(5, 4)
  160. if (f1 < f2):
  161.     print("f1 < f2")
  162. else:
  163.     print("f1 >= f2")
  164.  
  165. if (f1 == f2):
  166.     print("uguali")
  167. else:
  168.     print("diversi")
  169. print(f1)
  170. print(f2)
  171. f3 = f1
  172. if (f1 != f3):
  173.     print("diversi")
  174. else:
  175.     print("uguali")
  176. print(f1)
  177. print(f3)
  178. f3.numeratore = 10
  179. f1.stampa_a_video()
  180. print("La frazione f1 vale: " + str(f1))
  181.  
  182. print ("1/3 + 3/4 = " + str(Frazione(1,3) + Frazione(3,4)))
  183.  
RAW Paste Data