2. Priebežný test z Programovania (1) v 2022 - variant A


Odovzdávaš len jeden skript test.py, v ktorom budú všetky tvoje riešenia úloh. V odovzdanom riešení nepoužívaj import a ani global. Svojim funkciám (oproti zadaniu) môžeš zmeniť mená parametrov.


  1. Napíš funkciu dopln(tabulka, hodnota), ktorá do zadanej dvojrozmernej tabuľky doplní zadanú hodnotu tak, aby vznikla štvorcová tabuľka (rovnaký počet riadkov a stĺpcov). Funkcia nič nevypisuje ani nevracia, len modifikuje vstupnú tabuľku.

    >>> t = [[], [1, 2, 3]]
    >>> dopln(t, 9)
    >>> print(*t, sep='\n')
        [9, 9, 9]
        [1, 2, 3]
        [9, 9, 9]
    

    Zadefinuj:

    def dopln(tabulka, hodnota=0):
        ...
    

  1. Daná funkcia rek kreslí pomocou korytnačej grafiky nejakú rekurzívnu krivku. Každá nakreslená čiara je zafarbená jednou zo štyroch farieb. Prepíš túto funkciu tak, aby namiesto kreslenia čiar vrátila n-ticu počtov čiar jednotlivých farieb. Samozrejme, že pritom nepoužiješ tkinter:

    def rek(d, f=0):
        if d < 10:
            t.pencolor(('red', 'green', 'blue', 'yellow')[f%4])
            t.fd(d)
        else:
            for i, u in enumerate((60, -120, 60, 0)):
                rek(d*(.3, .5, .5, .2)[i], f+i)
                t.lt(u)
    

    Napríklad, by to malo fungovať takto:

    >>> t = rek(100)
    >>> t
        (18, 17, 20, 21)
    >>> rek(200)
        (55, 53, 48, 49)
    

    Uvedom si, že funkcia by mala správne fungovať aj pre viac spustení.


  1. V textovom súbore dobs.txt sú slová oddelené medzerami, prípadne koncami riadkov. Nájdi trojicu rôznych slov, ktoré sú všetky zložené z rovnakých písmen. Keďže takýchto trojíc je v tomto súbore viac, nájdi trojicu čo najdlhších slov. Trojicu priraď do premennej trojica. Napríklad, výsledkom by mohla byť trojica:

    trojica = ('tma', 'mat', 'tam')
    

    vtedy, keby sme nepotrebovali nájsť čo najdlhšiie takéto slová.


  1. Dodefinuj metódy triedy:

    class Dvojica:
        ...
    

    tak, aby fungovalo:

    >>> x = Dvojica(7, 13)    # parametrami sú dve celé čísla
    >>> x
        (7, 13)
    >>> type(x)
        <class '__main__.Dvojica'>
    >>> y = Dvojica(10, 20)
    >>> z = x + y
    >>> type(z)
        <class '__main__.Dvojica'>
    >>> z
        (17, 33)
    >>> x.a
        7
    >>> z.b
        33
    >>> y.a = 13
        ...
        AttributeError: property 'a' of 'Dvojica' object has no setter
    >>> z.b = 40
        ...
        AttributeError: property 'b' of 'Dvojica' object has no setter
    

  1. V reťazci je neprázdna množina čísel (celých a desatinných). Napíš funkciu mnozina(retazec), ktorá z tohto reťazca vráti množinu čísel. V tomto reťazci môžu byť aj chybné zápisy, ktoré ale bude táto funkcia ignorovať. Napríklad:

    >>> m = mnozina('{3.14, 314, "314", 42, .314, 3.1.4}')
    >>> type(m)
        <class 'set'>
    >>> m
        {0.314, 314, 3.14, 42}
    

    Zadefinuj:

    def mnozina(retazec):
        ...
    

  1. Napíš funkciu vyhod(podmienka, mnozina), ktorá z danej množiny vyhodí všetky prvky, pre ktoré je splnená zadaná podmienka. Funkcia správne spracuje aj chybové situácie, ktoré môžu vzniknúť počas volania podmienky, Napríklad:

    >>> m = set('python') | set(range(3, 50, 7))
    >>> m
        {'o', 'n', 't', 'y', 3, 38, 10, 45, 17, 'h', 24, 31, 'p'}
    >>> vyhod(lambda x: x < 't' or x%2, m)
    >>> m
        {'t', 'y', 3, 38, 10, 45, 17, 24, 31}
    

    Zadefinuj:

    def vyhod(podmienka, mnozina):
        ...
    


Riešenie odovzdaj v súbore test.py (môžeš si ho stiahnuť z L.I.S.T.u), pričom prvé tri riadky súboru budú obsahovať:

# 2A. priebezny test 2022
# student: Janko Hrasko
# datum: 30.11.2023

zrejme ako študenta uvedieš svoje meno.