Priebežný test z Programovania (1)


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 a ani prvky Pythonu, ktoré sme sa neučili do 13. prednášky.


  1. Napíš funkciu najdlzka(zoznam), ktorá vráti dĺžku najdlhšieho riadku textového súboru. Predpokladaj, že súbor sme už prečítali a jeho obsah sme prekopírovali po znakoch do zoznamu, napríklad takto list(subor.read()). Dĺžku riadku počítaj bez znaku '\n'.

    def najdlzka(zoznam):
        ...
        return ...
    

  1. Funkcia urob(p) spracuje nejakú postupnosť (napríklad je to zoznam, n-tica alebo reťazec):

    def urob(p):
        a, b, c = p[:5], p[4:], p[2:7]
        return a[-1:len(c)] + b[1:] + c[:] + a[:-1] + b[0:1]
    

    Do premennej postupnost priraď takú hodnotu, pre ktorú volanie dostaneme:

    >>> postupnost = ...
    >>> urob(postupnost)
    ['m', 'b', 'e', 'r', 'v', 'e', 'm', 'b', 'e', 'n', 'o', 'v', 'e', 'm']
    

  1. Nasledovná funkcia:

    def kresli():
        d, dx, dy, x, y = 5, 4, 1, 0, 0
        for i in range(300):
            x1, y1 = d * dx, d * dy
            canvas.create_line(x, y, x1, y1)
            x, y, dx, dy, d = x1, y1, -dy, dx, d*1.01
    

    nakreslí časť nejakej krivky. Zisti celkovú dĺžku kreslených čiar - aj tých, ktoré sú mimo canvas. Výsledok priraď do premenneJ:

    dlzka_ciar = ...
    

  1. Predpokladám, že máš nejakú funkciu, ktorá danú postupnosť (napríklad zoznam alebo reťazec) vypíše pomocou print takto: najprv prvý prvok, potom posledný, potom druhý, potom predposledný, … až nejaký stredný. Výpis je pritom organizovaný tak, že v každom riadku (okrem posledného) bude vypísaných presne päť hodnôt (oddelených medzerou). Do dvoch premenných priraď reťazce, ktoré reprezentujú výpisy pre volania s rôznymi postupnosťami (aj s oddeľovačmi riadkov '\n'):

    vypis1 = '...'           # pre postupnost 'programujem_v_pythone'
    vypis2 = '...'           # pre postupnost range(100, 333)
    

  1. Pre danú funkciu cykly(m, n) nájdi také hodnoty m a n (obe sú dvojciferné), aby funkcia vrátila číslo 43461.

    def cykly(m, n):
        vysl = 0
        for i in range(n):
            if i % 7 == 5:
                for j in range(m):
                    if j % 10 > 7 and i != j:
                        vysl += i%89 + j%97*101
        return vysl
    

    Nájdené m a n priraď:

    m = ...
    n = ...
    

  1. Nájdi všetky sedemciferné prvočísla, ktoré majú všetky cifry rôzne a tieto tvoria rastúcu postupnosť čísel. Napríklad, ak by sme potrebovali takéto štvorciferné prvočísla, boli by medzi nimi aj 2347, 2357, 2389. Nájdené sedemciferné prvočísla priraď do zoznamu:

    zoznam_prvocisel = [...]
    

  1. Daná je rekurzívna funkcia:

    def rek(d):
        if d <= 10:
            t.fd(d)
        else:
            rek(d / 2 - 5)
            t.pu()
            rek(10)
            t.pd()
            rek(d / 2 - 5)
    

    Zisti, aká je dĺžka nakreslených čiar (so spusteným perom) pre volania rek(70), rek(300) a rek(311) (vždy predpokladáme, že začína kresliť so spusteným perom). Výsledky priraď do troch premenných:

    dlzka70 = ...
    dlzka300 = ...
    dlzka311 = ...
    

  1. Napíš funkciu do_riadkov(zoznam), ktorá neprázdny vstupný zoznam čísel postupne rozdelí do riadkov dvojrozmernej tabuľky. Všetky riadky budú obsahovať len čísla vo vzostupnom poradí (r[i]<r[i+1]). Funkcia sa bude snažiť vytvarať čo najdlhšie takéto riadky:

    def do_riadkov(zoznam):
        ...
        return ...
    

    Napríklad:

    >>> do_riadkov([3, 4, 5, 4, 6, 8, 8, 11, 11])
    [[3, 4, 5], [4, 6, 8], [8, 11], [11]]
    


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

# priebezny test z programovania(1)
# student: Janko Hrasko
# datum: 12.11.2020

zrejme ako študenta uvedieš svoje meno.