Záverečný test z Programovania (2)


V úlohách, kde to nie je priamo napísané, netreba odovzdávať funkciu ani žiaden postup, stačí priradiť hodnoty do pripravených premenných.


  1. Daná je postupnosť bajtov (čísel od 0 do 255), ktorá reprezentuje nejaké veľké celé čéslo. Hodnotu tohto veľkého čísla priraď do premennej cislo. Najnižší bajt čísla je posledný v postupnosti bajtov.

    post1 = (90, 70, 83, 202, 103, 55, 104, 86, 91, 65, 247, 117, 214,
             148, 125, 85, 207, 56, 19, 209)
    
    cislo = ...
    

  1. Daný je neprázdny jednosmerný spájaný zoznam, ktorého vrcholy sú typu Vrchol1. Napíš funkciu vyrob_dvojice, ktorá vytvorí nový spájaný zoznam (pôvodný nepokazí). Každý prvok bude obsahovať dvojicu (tuple), ktorá sa skladá z i-teho prvku a i+1-teho prvku pôvodného zoznamu. Posledná dvojica v novom zozname bude mať posledný a prvý 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') -> ('a', 123) -> None
    

  1. Pre binárny strom poznáme jeho preorder a inorder. Vytvor postorder a zisti počet listov tohto stromu:

    preorder = '1 3 9 11 12 13 5 10 14 15 2 7 8 4 6'
    inorder = '9 12 13 11 3 10 5 15 14 1 7 8 2 6 4'
    
    postorder = ...
    pocet_listov = ...
    

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

    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í). Zisti počet listov, počet vrcholov v ľavom a pravom podstrome a tiež výšku celého stromu:

    post2 = (27, 33, 18, 32, 16, 8, 24, 23, 14, 25, 22, 10, 34, 17, 12,
             20, 30, 26, 6, 11, 19, 13, 29, 7, 9, 28, 15, 21, 31, 5)
    
    pocet_listov_bvs = ...
    pocet_vlavom = ...
    pocet_vpravom = ...
    vyska_bvs = ...
    

  1. Z daného postfixu vyrob prefix. Zisti výšku a šírku príslušného aritmetického stromu:

    postfix = 'a b + c + d e - * f g h - / +'
    
    prefix = ...
    vyska_as = ...
    sirka_as = ...
    

  1. Graf je zadaný vymenovaním všetkých orientovaných hran. Zisti, či je tento graf orientovaný (do premennej je_orientovany pritaď True alebo False). Tiež pre každý komponent grafu zisti jeho veľkosť. Tieto veľkosti priraď do zoznamu velkosti_komponentov:

    graf = ((6, 1), (7, 9), (3, 10), (1, 6), (12, 8), (9, 7), (5, 1), (5, 4),
            (6, 2), (4, 5), (16, 6), (6, 11), (8, 12), (1, 5), (15, 8), (11, 6),
            (13, 9), (9, 13), (2, 14), (2, 6), (14, 2), (8, 15), (10, 3), (6, 16))
    
    je_orientovany = ...
    velkosti_komponentov = ...
    


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

zrejme ako študenta uvedieš svoje meno.