class To:
    def __init__(self, mely=None):
        if mely is None:
            mely = []
        self.melysegek = mely

    def melyseg(self, sor=0, oszlop=0):
        """to melysege egy adott pontban"""
        return self.melysegek[sor - 1][oszlop - 1]

    def felszin(self):
        """to felszine"""
        return sum(1 for m in self.melysegek for n in m if n)

    def atlagos_melyseg(self):
        """to atlagos melyseg"""
        return sum(sum(m) for m in self.melysegek if m) / self.felszin() / 10

    def legmelyebb(self):
        """legnagyobb melyseg"""
        return max(max(m) for m in self.melysegek)

    def legmelyebb_koordinatak(self):
        """legnagyobb melyseghez tartozo koordinatak"""
        return [(i + 1, j + 1) for i, sor in enumerate(self.melysegek) for j, hely in enumerate(sor)
                if self.melysegek[i][j] == self.legmelyebb()]

    def legmelyebb_koordinatak_kiir(self):
        """legnagyobb melyseghez tartozo koordinatak kiir"""
        sz = ''
        koor = self.legmelyebb_koordinatak()
        for i, j in koor:
            sz += '(' + str(i) + '; ' + str(j) + ')\n'
        return sz

    def parvonal(self):
        """partvonal hossza"""
        hossz = 0
        adatok = self.melysegek
        for i, sor in enumerate(adatok):
            for j, hely in enumerate(sor):
                if 0 < i < len(adatok) and 0 < j < len(sor):
                    if adatok[i][j] > 0:
                        if adatok[i - 1][j] == 0:
                            hossz += 1
                        if adatok[i + 1][j] == 0:
                            hossz += 1
                        if adatok[i][j - 1] == 0:
                            hossz += 1
                        if adatok[i][j + 1] == 0:
                            hossz += 1
        return hossz

    def szelveny(self, oszlop):
        """egy oszlophoz tartozo adatok"""
        return [sor[oszlop - 1] for sor in self.melysegek]

    def szelveny_kiir(self, oszlop):
        """grafikon"""
        sz = ''
        i = 1
        for hely in self.szelveny(oszlop):
            sz += "{0:02d}".format(i) + round(hely / 10) * '*' + '\n'
            i += 1
        return sz


class Fajl:
    """Fajlmuveletek osztalya"""

    def __init__(self, fnev):
        self.fnev = fnev

    def beolvas(self):
        """fajl adatainak beolvasasa"""
        f = open(self.fnev)
        sor = int(f.readline())
        oszlop = int(f.readline())
        adatok = []
        for sor in f.readlines():
            egysor = []
            x = sor.split()
            for i in x:
                egysor.append(int(i))
            adatok.append(egysor)
        f.close()
        return adatok

    def kiir(self, adatok):
        """fajlba iras"""
        f = open(self.fnev, 'w')
        print(adatok, end='', file=f)
        f.close()


# 1. feladat
fajl = Fajl('melyseg.txt')
adatok = fajl.beolvas()
to = To(adatok)

# 2. feladat
sorid = int(input("2. feladat\nA mérés sorának azonosítója = "))
oszlopid = int(input("A mérés oszlopának azonosítója = "))
print("A mért mélység az adott helyen", to.melyseg(sorid, oszlopid), "dm")

# 3. feladat
print("3. feladat\nA tó felszíne: {} m2, átlagos mélysége: {:.2f} m".format(to.felszin(), to.atlagos_melyseg()))

# 4. feladat
print("4. feladat\nA tó legnagyobb mélysége:", to.legmelyebb(), "dm")
print("A legmélyebb helyek sor-oszlop koordinátái:\n", to.legmelyebb_koordinatak_kiir(), sep="")

# 5. feladat
print("5. feladat\nA tó partvonala", to.parvonal(), "m hosszú.")

# 6. feladat
sorid = int(input("6. feladat\nA vizsgált szelvény oszlopának azonosítója = "))
fajl = Fajl('diagramOOP.txt')
fajl.kiir(to.szelveny_kiir(sorid))
