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.
Do premennej
riadok100
priraď stý riadok Pascalovho trojuholníka:riadok100 = [1, 100, ..., 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)
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 = [[...], ...]
V súbore
'subor.txt'
sú slová oddelené medzerami, prípadne koncami riadkov. Do premennejcisla
(typutuple
) 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 = (...)
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ťazcavyraz
:vyraz = '...'
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
Z daného súboru
'subor.txt'
nájdi množinu slov, ktoré sú zložené len z týchto písmenset('adnkcp')
. Do premennejmnozina
priraď množinu týchto slov:mnozina = {'a', ...}
Vygeneruj všetky súčty so štyrmi sčítancami s celými číslami od
1
do5
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 premennejsucty
:sucty = {...}
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 = [...]
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.