Jestem poczatkująca. Stworzyłam program-kalulator ułamkowy (suma i różnica). Działa on dobrze, gdy ulamki są dodatnie, dobrze uproszczone (np. 2 1/3, a nie 1 4/3), i pierwszy ułamek jest większy od drugiego.
Np.: 1 5/7 i 1 3/6 daje odpowiednio rezultaty: 3/14 (odejmowanie) i 3 3/14 (dodawanie).
Czy może ktoś pomóc mi z tym kodem i popełnić go tak, by był on uniwersalny dla dowolnego ułamka (ujemnych, "niedobrze" uproszczonych i podobnie)?
class ulamek:
czescCalkowita = 0
licznik = 0
mianownik = 1
def __init__(self,czescC = 0, licznikArg = 0, mianownikArg = 1):
self.licznik = licznikArg
self.mianownik = mianownikArg
self.czescCalkowita = czescC
def __str__(self):
retVal = ""
if self.czescCalkowita != 0:
retVal = retVal + str(self. czescCalkowita) + " "
if self.licznik != 0:
retVal = retVal + str(self.licznik) + "/" + str(self.mianownik)
return(retVal)
def ulamekNiewlasciwy(self):
self.licznik += self.czescCalkowita * self.mianownik
self.czescCalkowita = 0
def CzescCalkowita(self):
self.czescCalkowita = self.licznik // self.mianownik
self.licznik -= (self.czescCalkowita * self.mianownik)
def upraszczanie(self):
for i in xrange(2,100):
while self.licznik % i == 0 and self.mianownik % i == 0:
self.licznik = self.licznik / i
self.mianownik = self.mianownik / i
return self.licznik
return self.mianownik
def __add__(self, innyUlamek):
mianownikOdp = self.mianownik * innyUlamek.mianownik
licznikOdp = (mianownikOdp / self.mianownik) * self.licznik + (mianownikOdp / innyUlamek.mianownik) * innyUlamek.licznik
retVal = ulamek(0, licznikOdp, mianownikOdp)
return retVal
def __sub__(self, innyUlamek):
mianownikOdp = self.mianownik * innyUlamek.mianownik
licznikOdp = (mianownikOdp / self.mianownik) * self.licznik - (mianownikOdp / innyUlamek.mianownik) * innyUlamek.licznik
retVal = ulamek(0, licznikOdp, mianownikOdp)
return retVal
czescCalkowita1 = int(raw_input("Czesc calkowita pierwszego ulamka: "))
licznik1 = int(raw_input("Licznik pierwszego ulamka: "))
mianownik1 = int(raw_input("Mianownik pierwszego ulamka: "))
czescCalkowita2 = int(raw_input("Czesc calkowita drugiego ulamka: "))
licznik2 = int(raw_input("Licznik drugiego ulamka: "))
mianownik2 = int(raw_input("Mianownik drugiego ulamka: "))
A = ulamek(czescCalkowita1,licznik1,mianownik1)
B = ulamek(czescCalkowita2,licznik2,mianownik2)
A.ulamekNiewlasciwy()
B.ulamekNiewlasciwy()
mnozenie = A * B
dzielenie = A / B
roznica = A - B
suma = A + B
roznica.upraszczanie ()
suma.upraszczanie ()
roznica.CzescCalkowita ()
suma.CzescCalkowita ()
print roznica
print suma