Riešenie úloh 13. cvičenia


  1. Riešenie:

    def vypis(tab, sirka=4):
        for riadok in tab:
            for prvok in riadok:
                print(f'{repr(prvok):>{sirka}}', end=' ')
            print()
    

  1. Riešenie:

    def max2(tab):
        vysl = max(tab[0])
        for riadok in tab[1:]:
            vysl = max(vysl, max(riadok))
        return vysl
    
    def min2(tab):
        vysl = min(tab[0])
        for riadok in tab[1:]:
            vysl = min(vysl, min(riadok))
        return vysl
    
    def sum2(tab):
        vysl = 0
        for riadok in tab:
            vysl += sum(riadok)
        return vysl
    

  1. Riešenie:

    def zoznam_suctov(tab):
        vysl = []
        for riadok in tab:
            vysl.append(sum(riadok))
        return vysl
    

  1. Riešenie:

    def zoznam_suctov(tab):
        vysl = []
        for riadok in tab:
            if riadok == []:
                vysl.append(None)
            else:
                suc = riadok[0]
                for prvok in riadok[1:]:
                    suc += prvok
                vysl.append(suc)
        return vysl
    

  1. Riešenie:

    def pridaj_sucty(tab):
        for riadok in tab:
            if riadok == []:
                riadok.append(None)
            else:
                suc = riadok[0]
                for prvok in riadok[1:]:
                    suc += prvok
                riadok.append(suc)
    

  1. Riešenie:

    def preklop(tab):
        pr, ps = len(tab), len(tab[0])
        novy = []
        for i in range(ps):
            novy.append([0]*pr)
        for r in range(pr):
            for s in range(ps):
                novy[s][r] = tab[r][s]
        return novy
    

    alebo

    def preklop(tab):
        novy = []
        for s in range(len(tab[0])):
            novy.append([])
            for r in range(len(tab)):
                novy[-1].append(tab[r][s])
        return novy
    

  1. Riešenie:

    def ocisluj2(tab):
        poc = maxs = 0
        for riadok in tab:
            maxs = max(maxs, len(riadok))
        for s in range(maxs):
            for r in range(len(tab)):
                if s < len(tab[r]):
                    tab[r][s] = poc
                    poc += 1
    

  1. Riešenie:

    def pascalov_trojuholnik(n):
        vysl = []
        for i in range(1, n+1):
            riadok = [1]
            for j in range(1, i):
                riadok.append(riadok[-1] * (i-j) // j)
            vysl.append(riadok)
        return vysl
    

  1. Riešenie:

    def citaj(meno_suboru):
        with open(meno_suboru, encoding='utf-8') as subor:
            vysl = []
            for riadok in subor:
                vysl.append(riadok.split())
        return vysl
    

  1. Riešenie:

    def zapis(tab, meno_suboru):
        with open(meno_suboru, 'w', encoding='utf-8') as subor:
            for riadok in tab:
                for prvok in riadok:
                    print(prvok, end=' ', file=subor)
                print(file=subor)
    

  1. Riešenie:

    def citaj_cisla(meno_suboru):
        with open(meno_suboru, encoding='utf-8') as subor:
            vysl = []
            for riadok in subor:
                vysl.append([])
                for prvok in riadok.split():
                    vysl[-1].append(int(prvok))
        return vysl
    

  1. Riešenie:

    import tkinter
    
    def kresli(tab, d=20, farby=('black', 'yellow', 'orange', 'blue', 'red', 'white')):
        canvas.delete('all')
        for r, riadok in enumerate(tab):
            for s, prvok in enumerate(riadok):
                if prvok != None:
                    x, y = s*d + 5, r*d + 5
                    farba = farby[prvok]
                    canvas.create_rectangle(x, y, x+d, y+d,
                                            fill=farba, outline='light gray')
        canvas.update()
    
    canvas = tkinter.Canvas()
    canvas.pack()
    
    p = [[0,0,0,None,None],
         [1,1,None,None,None],
         [1,1,1,None,2],
         [3,None,None,None,2],
         [3,3,2,2,None],
         [3,3,None,None,None],
         [4,4,None,None,None],
         [4,4,4,None,None],
         [4,None,4,4,None],
         [2,None,None,2,None],
         [2,2,None,2,2]
        ]
    
    kresli(p)
    

  1. Riešenie:

    def zrkadlo(obr):
        novy = []
        for r in range(len(obr)):
            novy.append(obr[r] + [None] + obr[r][::-1])
        return novy
    

  1. Riešenie:

    def zvacsi(obr):
        novy = []
        for riadok in obr:
            novy.append([])
            for prvok in riadok:
                novy[-1].extend((prvok, prvok))
            novy.append(novy[-1])
        return novy
    

  1. Riešenie:

    def nahrad(obr, post):
        novy = []
        for riadok in obr:
            riadok = list(riadok)
            for i, prvok in enumerate(riadok):
                for x, y in post:
                    if prvok == x:
                        riadok[i] = y
                        break
            novy.append(riadok)
        return novy
    

  1. Riešenie:

    import tkinter
    
    def kresli(tab, d=20, farby=('black', 'yellow', 'orange', 'blue', 'red', 'white')):
        ...
    
    def kruh(tab, r, r1, s1, hodnota):
        n = len(tab)
        for i in range(n):
            for j in range(n):
                vzd = ((i-r1)**2 + (j-s1)**2) ** 0.5
                if vzd <= r:
                    tab[i][j] = hodnota
    
    t = []
    for i in range(50):
        t.append([5]*50)
    kruh(t, 17, 20, 30, 4)
    kruh(t, 13, 40, 25, 3)
    kruh(t, 10, 15, 15, 0)
    kruh(t, 8, 15, 15, 5)
    kresli(t, 5)
    

  1. Riešenie:

    def do_radu(tab):
        vysl = []
        for riadok in tab:
            vysl.extend(riadok)
        return vysl
    

  1. Riešenie:

    def do_dvojrozmernej(postupnost, sirka):
        vysl = []
        zoz = list(postupnost)
        while zoz:
            vysl.append(zoz[:sirka])
            zoz = zoz[sirka:]
        return vysl