Závěrečná písemka E3011 – 21. 6. 2023 1 2 3 4 Σ Jméno: UČO: Datum: Při zkoušce je povoleno používat jakékoliv materiály. Naopak je zakázáno kopírovat (celý nebo část) kód z internetu nebo během písemky s někým komunikovat, včetně chatGPT a podobných služeb. Pokud není řečeno jinak, nesmíte používat žádné externí knihovny. Dbejte, aby byl kód čitelný, správně okomentovaný, proměnné i funkce byly dobře pojmenované. Svou práci nahrajte do odevzdávárny Zkouška 21.6.2023. Pro každou úlohu odevzdejte jeden .py soubor. Odevzdejte také tento papír s vyplněnou hlavičkou a případnými poznámkami. Příklad 1 (30 bodů). Implementujte algoritmus popsaný níže jako bubble(L). Jedná se o tzv. bubble sort, algoritmus seřadí hodnoty v listu L vzestupně. Input: L list of numbers n ← length(L); for i ∈ {0, 1, . . . n − 1} do swapped ← False; for j ∈ {1, 2, . . . , n − i − 1} do if L[j] < L[j − 1] then swap(L[j], L[j − 1]); swapped ← True; end end if not swapped then break; end end return L Pozn: swap(L[j], L[j − 1]) znamená vyměnit v poli L hodnoty na pozicích j a j − 1. Ukázka jak funguje algoritmus na poli L = [0.3, 5, 4, −1, 0, 4, 4, 3] (print na začátku vnějšího cyklu): [0.3, 5, 4, -1, 0, 4, 4, 3] [0.3, 4, -1, 0, 4, 4, 3, 5] [0.3, -1, 0, 4, 4, 3, 4, 5] [-1, 0, 0.3, 4, 3, 4, 4, 5] [-1, 0, 0.3, 3, 4, 4, 4, 5] Příklad 2 (10 bodů). Napište funkci choose(n,k), která vrátí kombinační číslo ( n k ) = n! k!(n − k)! , např. choose(20,5) = 15504. Kolik je ∑10 k=0 (10 k ) ? Napište odpověď někam sem. Příklad 3 (30 bodů). Fialové číslo je takové přirozené číslo, které je ostře menší než součet jeho dělitelů kromě sebe sama. Např. číslo 12 je fialové, protože dělitelé čísla 12 (kromě čísla 12) jsou 1, 2, 3, 4, 6 a jejich součet je 16, což je víc jak 12. Číslo 13 fialové není, protože má jen jednoho dělitele menšího než 13, a to 1. Číslo 14 také fialové není, protože 1 + 2 + 7 ≤ 14 Napište funkci isPurple(x), která vrátí True pokud je x fialové a False jinak. [20 bodů] Využijte poté tuto funkci, abyste nalezli nejmenší přirozené liché fialové číslo a napište jej sem. [10 bodů] Příklad 4 (30 bodů). Implementuje funkci Cramer(A, b), která pomocí Cramerova pravidla vyřeší systém Ax = b, kde A je čtvercová matice a b je vektor pravých stran rovnic. Funkce nejprve zjistí, zda je systém řešitelný (tj. |A| ̸= 0) a poté vypočítá jednotlivé složky řešení x = (x1, x2, . . . ): xi = |Ai| |A| , kde Ai je matice, která vznikne z matice A nahrazením i-tého sloupce vektorem b. Pokud je systém jednoznačně řešitelný (podmínka |A| ̸= 0) funkce vrátí vektor x. Pokud jednoznačně řešitelný není, vrátí None a vypíše vhodnou zprávu. Ve studijních materiálech (složka písemky) naleznete 2 systémy, na kterých můžete vaši funkci otestovat. Zde je prostor pro neanonymní vzkazy, připomínky a zpětnou vazbu k předmětu: