2. Priebežný test z Programovania (1) 2020


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. V odovzdanom riešení nepoužívaj import ani niektoré iné príkazy.


  1. Do premennej riadok100 priraď stý riadok Pascalovho trojuholníka:

    riadok100 = [1, 100, ..., 1]
    

  1. Prepíš funkciu urob tak, aby namiesto kreslenia čiar vrátila zoznam súradníc (tuple dvoch čísel) červených krížikov presne v tom poradí, ako sa kreslili. Samozrejme, že pritom nepoužiješ tkinter:

    def urob(x, y, n, d):
        canvas.create_line(x, y, x+d, y)
        if n > 0:
            urob(x+d, y, n-1, d*0.6)
            canvas.create_line(x+d, y, x+d, y+d)
            urob(x+d, y+d, n-1, d*0.4)
        else:
            x += 2*d
            canvas.create_text(x, y, text='+', fill='red')
    

    Napríklad, by to mohlo fungovať pre:

    urob(10, 10, 5, 100)
    

  1. Máme dvojrozmernú tabuľku:

    [[5, 7, 2, 2, 1, 9], [8, 4, 6, 6, 2, 8], [9, 9, 2, 9, 8, 8],
     [5, 9, 6, 3, 7, 9], [5, 5, 9, 7, 1, 8], [4, 3, 5, 2, 9, 7],
     [1, 7, 9, 7, 5, 1]]
    

    Do premennej tab priraď otočenú túto tabuľku o 90 stupňov (v smere otáčania hodinových ručičiek):

    tab = [[...], ...]
    

  1. V súbore 'subor.txt' sú slová oddelené medzerami, prípadne koncami riadkov. Do premennej cisla (typu tuple) priraď všetky čísla v tomto súbore. Niektoré zo slov v súbore sú totiž celé čísla, niektoré desatinné. Do n-tice ich zaraď presne v tom poradí, ako sú v súbore.

    cisla = (...)
    

  1. Aritmetický výraz (2+3)*(5-2)**(6//3)**(17%7)*14//11 zapíš len pomocou magických metód. Nezabudni uzavrieť do zátvoriek prvý (ľavý) operand operácie, ak je ním číslo. Napríklad, 1+2 zapíšeš ako (1).__add__(2). Výsledok zapíš do znakového reťazca vyraz:

    vyraz = '...'
    

  1. Dodefinuj metódy triedy:

    class Cislo:
        ...
    

    tak, aby fungovalo:

    >>> i = Cislo(6789)    # parametrom je kladné číslo
    >>> i
    6789
    >>> i.daj()            # pôvodná hodnota
    6789
    >>> i.daj(0)
    9
    >>> i.daj(3)           # tretia cifra od konca
    6
    >>> i.daj(5)
    0
    

  1. Z daného súboru 'subor.txt' nájdi množinu slov, ktoré sú zložené len z týchto písmen set('adnkcp'). Do premennej mnozina priraď množinu týchto slov:

    mnozina = {'a', ...}
    

  1. Vygeneruj všetky súčty so štyrmi sčítancami s celými číslami od 1 do 5 v tvare znakových reťazcov '2+5+1+2'. Všetky tieto výrazy dávajú rôzne súčty, niektoré súčty sa opakujú. Napríklad, výrazy '2+5+1+2' a '3+2+3+2' dávajú rovnaký súčet. Na poradí sčítancov záleží a preto '2+5+1+2' a '2+1+5+2' sú rôzne výrazy s rovnakým súčtom. Vyrob množinu všetkých takých reťazcov, ktoré dávajú najčastejší súčet. Výsledok priraď do premennej sucty:

    sucty = {...}
    

  1. Máme danú n-ticu a tri funkcie:

    ntica = (2053, 4656, 7664, 3724, 6099, 6670, 5159, 2556,
             1307, 6689, 2992, 2158, 4979, 3292, 1166, 1243,
             4783, 2386, 4629, 2881, 3210, 1209, 5638, 2970,
             3054, 6488, 847, 7215, 7730, 4447, 7478, 3434,
             6221, 832, 5463, 841, 7641, 4266, 6236, 2613,
             3563, 4106, 2432, 5109, 1045, 6479, 7419, 3299,
             1366, 3715, 2699, 5264, 7107, 4079, 7035, 975,
             3552, 6553, 6210, 1247, 5227, 7388, 1637, 970,
             7536, 996, 1110, 3997, 3269, 4809, 6879, 1480,
             904, 7366, 762, 7498, 4059, 3212, 2980, 2977,
             4840, 4121, 1418, 5949, 7527, 4708, 7028, 804,
             2311, 6413, 4248, 7949, 6948, 1021, 2809, 2723,
             4794, 2639, 4238, 3754)
    
    fun1 = lambda x: int(str(x)[::-1])
    fun2 = lambda x: x**2-1
    fun3 = lambda x: x//100 + x%100*100
    

    Vyrob zoznam do premennej map3, v ktorom na prvý prvok z n-tice aplikuješ fun1, na druhý fun2, na tretí fun3, na štvrtý opäť fun1, …

    map3 = [...]
    

  1. Máme tento program pre Turingov stroj (stav 'a' je počiatočný):

    prog = '''
    a 1 1 > a
    b 1 2 < b
    c 1 0 < c
    a 2 2 > a
    b 2 1 < c
    c 2 2 < c
    a 0 0 > a
    b 0 0 < b
    c 0 1 < b
    a _ _ < b
    b _ _ = end
    c _ 1 = end
    '''
    

    Zisti, čo bolo na páske po skončení programu, keď pri štarte je '1012202'. Tento koncový obsah na páske priraď do premennej:

    paska = '...'
    


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

# 2. priebezny test 2020
# student: Janko Hrasko
# datum: 13.12.2022

zrejme ako študenta uvedieš svoje meno.