class Muvelet:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def lnko(self):
        # 2. feladat
        if self.a == self.b:
            return self.a
        elif self.a < self.b:
            self.b = self.b - self.a
            return self.lnko()
        else:
            self.a = self.a - self.b
            return self.lnko()

    def lkkt(self):
        # 5. feladat
        return self.a * self.b / self.lnko()


class Tort:
    def __init__(self, sz=1, n=1):
        self.sz = int(sz)
        self.n = int(n)

    def __str__(self):
        return str(self.sz) + '/' + str(self.n)

    def __mul__(self, other):
        """ket tort szorzasa"""
        return Tort(self.sz * other.sz, self.n * other.n)

    def __add__(self, other):
        """ket tort oszeadasa"""
        muv = Muvelet(self.n, other.n)
        # knev = lkkt(self.n, other.n)
        knev = muv.lkkt()
        ujsz = self.sz * (knev // self.n) + other.sz * (knev // other.n)
        return Tort(ujsz, knev)

    def knev(self, other):
        """a tort es egy masik kozos nevezoje"""
        muv = Muvelet(self.n, other.n)
        return muv.lkkt()

    def egesz(self) -> bool:
        """a tort egesz szam-e"""
        return [False, True][self.sz % self.n == 0]

    def egesz_kiir(self) -> str:
        """ha a tort egesz kiirja egesz szamkint, kulonben 'nem egesz' -t ir ki"""
        return ['nem egész', self.sz // self.n][self.egesz()]

    def egyszerusit(self):
        """tortet egyszerusit"""
        muv = Muvelet(self.sz, self.n)
        return Tort(self.sz // muv.lnko(), self.n // muv.lnko())

    def egyszerusit_kiir(self) -> str:
        """tort kiirasa egyszerusitve"""
        return [self.egyszerusit(), self.egesz_kiir()][self.egesz()]

    def bovit(self, szam):
        """tort bovitese"""
        return Tort(self.sz * szam, self.n * szam)


class Feladat:
    def __init__(self, tort1, tort2, muv):
        self.tort1 = tort1
        self.tort2 = tort2
        self.muv = muv

    def kiir(self):
        """a feladat kiirasa szovegbe"""
        sz = str(self.tort1) + ' ' + self.muv + ' ' + str(self.tort2) + ' = '
        if self.muv == '*':
            szorzat = self.tort1 * self.tort2
            sz += str(szorzat) + ' = ' + str(szorzat.egyszerusit_kiir())
        else:
            kn = self.tort1.knev(self.tort2)
            tort1bovit = self.tort1.bovit(kn // self.tort1.n)
            tort2bovit = self.tort2.bovit(kn // self.tort2.n)
            osszeg = self.tort1 + self.tort2
            sz += str(tort1bovit) + ' + ' + str(tort2bovit) + ' = ' + str(osszeg) + ' = ' + str(
                osszeg.egyszerusit_kiir())
        return sz


class Feladatok:
    def __init__(self, fel=None):
        if fel is None:
            fel = []
        self.fel = fel

    def kiir(self):
        sz = ''
        for feladat in self.fel:
            sz += feladat.kiir() + '\n'
        return sz


class Fajl:
    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev)
        feladatok = []
        for sor in f.readlines():
            sz1, n1, sz2, n2, muv = sor.split()
            feladatok.append(Feladat(Tort(int(sz1), int(n1)), Tort(int(sz2), int(n2)), muv))
        f.close()
        return feladatok

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w')
        print(adatok, end='', file=f)
        f.close()


# 1. feladat
sz = int(input("1. feladat\nAdd meg a számlálót: "))
n = int(input("Add meg a nevezőt: "))
tort = Tort(sz, n)
print(tort.egesz_kiir())

# 3. feladat
print("3. feladat\n", tort, ' = ', tort.egyszerusit_kiir(), sep='')

# 4. feladat
sz2 = int(input("4. feladat\nAdd meg a számlálót: "))
n2 = int(input("Add meg a nevezőt: "))
tort2 = Tort(sz2, n2)
feladat = Feladat(tort, tort2, '*')
print(feladat.kiir())

# 6. feladat
feladat = Feladat(tort, tort2, '+')
print("6. feladat")
print(feladat.kiir())

# 7. feladat
print("7. feladat\nAdatok beolvasasa és műveletek fájlba írása")

fajl = Fajl('adat.txt')
feladatok = fajl.beolvas()
faladvany = Feladatok(feladatok)
fajl = Fajl('eredmenyOOP.txt')
fajl.kiir(faladvany.kiir())
print("Fájlbaírás kész.")
