Priebežný test z Programovania (2)


  1. Napíš funkciu vyrob_cislo, ktorá ako parameter dostáva postupnosť bajtov (čísel od 0 do 255). Táto postupnosť reprezentuje nejaké veľké celé číslo a funkcia vráti hodnotu tohto veľkého čísla. Najnižší bajt čísla je prvý v postupnosti bajtov. Napríklad:

    >>> vyrob_cislo(21, 205, 91, 7, 0)
    123456789
    >>> vyrob_cislo(12, 34, 56)
    3678732
    

  1. Daný je neprázdny jednosmerný spájaný zoznam, ktorého vrcholy sú typu Vrchol1. Napíš funkciu vyrob_dvojice, ktorá vytvorí a vráti nový spájaný zoznam (pôvodný nepokazí). Každý prvok (opäť typu Vrchol1) bude obsahovať dvojicu (tuple), ktorá sa skladá zo samotného (i-teho) prvku a predchádzajúceho (i-1-teho) prvku pôvodného zoznamu. Prvá dvojica v novom zozname bude obsahovať prvý a posledný prvok:

    class Vrchol1:
        def __init__(self, data, next=None):
            self.data, self.next = data, next
    
    def vyrob_dvojice(zoz):
        novy = None
        ...
        return novy
    

    Napríklad volanie:

    vyrob_dvojice(Vrchol1(123, Vrchol1([], Vrchol1('a'))))
    

    by vytvorilo takýto zoznam:

    (123, 'a') -> ([], 123) -> ('a', []) -> None
    

  1. Pre úplný binárny strom poznáme jeho postupnosť vrcholov po-úrovniach. Vytvor funkciu inorder, ktorá vytvorí inorder postupnosť tohto stromu a vráti ju v tvare tuple, napríklad:

    >>> inorder(1, 2, 3, 4, 5, 6, 7)
    (4, 2, 5, 1, 6, 3, 7)
    

  1. Máme daný binárny strom, ktorého vrcholy sú typu Vrchol2. Napíš funkciu oprav_strom, ktorá štvrtine vrcholov v tomto binárnom strome zmení hodnotu vo vrchole (apribút data) na 'a', štvrtine na 'b', štvrtine na 'c' a štvrtine na 'd':

    class Vrchol2:
        def __init__(self, data):
            self.data, self.left, self.right = data, None, None
    
    def oprav_strom(strom):
        ...
    

    Táto funkcia nič nevracia len zmení hodnoty vo vrcholoch.


  1. Z danej postupnosti hodnôt sa vyrobil binárny vyhľadávací strom (hodnoty sa vkladali presne v tomto poradí). Napíš funkciu zisti, ktorá pre takýto neprazdny strom zistí počet listov, počet vrcholov v ľavom a pravom podstrome. Funkcia vráti trojicu celých čísel. Napríklad:

    >>> zisti(3, 5, 7, 4, 2)
    (3, 1, 3)
    

  1. Daný je výraz v tvare postfix, ktorý obsahuje ako operandy len celé čísla a premennú x. Operáciami sú celočíselné +, -, *, /. Napíš funkciu minimum, ktorá nájde tákú hodnotu premennej x, pre ktorú daný výraz vráti minimálnu hodnotu. Druhý parameter funkcie je postupnosť hodnôt pre premennú x. Napríklad:

    >>> minimum(''x 4 * 5 - x x * +'', range(-10, 10))
    -2
    

  1. Graf je zadaný vymenovaním všetkých neorientovaných hran. Napíš funkciu komponenty, ktorá pre každý komponent grafu zisti jeho veľkosť. Tieto veľkosti vráti ako výsledok funkcie v tvare zoznamu celých čísel (v ľubovoľnom poradí). Graf neobsahuje izolované vrcholy. Napríklad:

    >>> komponenty({(3, 7), (6, 1), (2, 5), (4, 7)})
    [2, 3, 2]
    


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ť:

# test z programovania(2)
# student: Janko Hrasko
# datum: 1.6.2021

zrejme ako študenta uvedieš svoje meno.