import math


class Tort:
    def __init__(self, szaml, nev):
        if type(szaml) is not int or type(nev) is not int:
            raise TypeError("Számláló és nevező int legyen")
        if szaml < 0 or nev < 1:
            raise ValueError("Számláló>=0, nevező>0 kell")
        lnko = math.gcd(szaml, nev)
        self.szaml = szaml // lnko
        self.nev = nev // lnko


def tort_sztringkent(t):
    """szaml/nev alakú sztringgé alakítja a törtet."""
    return "{}/{}".format(t.szaml, t.nev)


def tort_valoskent(t):
    """Visszatér a tört lebegőpontos értékével."""
    return t.szaml / t.nev

    
def sztring_tortte(s):
    """szaml/nev alakú sztringből törtet csinál."""
    elemek = s.split("/")
    if len(elemek) != 2:
        raise ValueError("Törthöz száml/nev alakú sztring!")
    szaml = int(elemek[0])
    nev = int(elemek[1])
    return Tort(szaml, nev)


def tort_osszeg(t1, t2):
    """Megadja a két tört összegét."""
    return Tort(
        t1.szaml*t2.nev + t2.szaml*t1.nev,
        t1.nev*t2.nev
    )


def tort_szorzat(t1, t2):
    """Megadja a két tört szorzatát."""
    return Tort(
        t1.szaml * t2.szaml,
        t1.nev * t2.nev
    )
    

def main():
    x = Tort(1, 2)
    y = sztring_tortte("1/4")
    
    z = tort_osszeg(x, y)
    print("x+y =", tort_sztringkent(z))
    print("sqrt(x+y) =", math.sqrt(tort_valoskent(z)))


main()
