20. 10. 2025 Programování 04. Hodina 1. Dotazy k recodexu - test driven: standardní chyby () a (ne)chybovost recodexu (CPU, RAM, Data Only, String compare, ...) - test driven: testovací data recodexu nesdělujmeme, avšak je možné diskutovat, proč Vám konkrétní test nedopadl a optat se, kde je ve výstupu chyba 1.5 Konzultace, poznámka: před cvičeními v posluchárnách neprobíhá výuka (nebo je předchozí moje), a chodím (zpravidla) aspoň 20 minut dřív (i kvůli případným dopravním komplikacím) a sedím/pracuji v posluchárně klidně (nebojte se, jsem tu pro Vás) využijte tento čas pro konzultace (látka přednášek, cvičení, školní věci, dotazy obecně) Inspirováno: https://ksvi.mff.cuni.cz/~dingle/2025-6/prog_1/notes_2.html * range (revisited: range(n) vs range(a b) vs range(a b c)) * len() * string slicing * testovací data - zamyšlení jaké případy můžeme testovat * funkce print a jeji parametry (end a sep); priklad: star square * konstanty; priklad: palindrom soucinem * funkce - (uvod) znovupouzitelnost, parametrizovatelnost, (casto kodu se opakuji, jsou parametrizovatelne) ...., definice, jmeno fce, volani fce, parametry a jejich pouziti, return; priklad: palindrom soucinem * zakladní knihovny: random a math; knihovny a metafora se stolem a pracovni deskou; a proc mit vice funkci sin * chr, ord (pro domácí úkol) https://ksvi.mff.cuni.cz/~dingle/2025-6/prog_1/notes_2.html * list, různé typy, délka listu, access [], list slicing, append, extend, insert, del, ... PRISTE * std I/O: konzole, standardní vstup a výstup, přesměrování std vstupu a výstupu (cat) * funkce, navratova hodnota, parametry, pass variable refenci a hodnotou, pojmenovane parametry, neznamy pocet param * passing variable - reference, value * knihovny a moduly 0.5. Napiste program, ktery precte slovo a vypise kazdy druhy znak (pomoci slicingu). (string slicing) 0.6. Napiste program, ktery precte slovo a vypise vše od 4. znaku do konce (pomoci slicingu). (string slicing) 0.7. Napiste program, ktery precte slovo a vypise ho pozpatku-reverzne (pomoci slicingu). (string slicing) 0.9. Napište program, který ověří, zdali zadaný (neprázdný konečný) string je palindrom. Pokud je string palindrom, vypíše "ano", pokud ne vypíše "ne". (string slicing, for cyklus, testovací data) (nejprve diskutujte algoritmus) (šlo by reverse string a porovnat s původním; zde udělejme přes for cyklus) 0.9.2 Navrhněte množinu testovacích dat pro testování programu testujícího polindrom :D 0.9.3 Navrhněte množinu KOREKTNICH testovacích dat pro testování programu testujícího polindrom :D function Print parameters print_params.py 1.2 Square (asterix_square.py; zatim bez fci; zato motivace k fci;) Read a number N, then print an N x N square of asterisks as in the example below. Enter N: 5 ***** * * * * * * ***** (skip) 1.3 Triangle Read a number N, then print an N x N triangle of asterisks as in the example below. Enter N: 6 * ** *** **** ***** ****** 0.11. Napište program, který nalezne a vypíše, všechny číselné palindromy vzniklé součinem tří dvouciferných čísel. (motivace k fci, konstanty, zatim bez funkci!) 0.11.1 Upravte predchozi kod, aby vyuzival konstanty (refactoring; pro konstanty) 0.11.2 Upravte predchozi kod, aby vyuzival funkce a konstanty (refactoring; pro konstanty a funkce) Funkce *1. Napiste funkci obsahObdelniku(a,b) vypočítávající obsah obdélníka a vypise ho *1.2 Napičte funkci obsahObdelniku(a,b) vypočítávající obsah obdélníka a vrati ho a nasledne ho vypiste *2. Napiste funkci přičítávající jedničku k: a) intu b) ke všem prvkům v listu *1.5 Napiste funkci reverseList(list), ktera dostane list a vrati otoceny list (pomoci for cyklu) *1.6 Napiste funkci reverseList(list), ktera dostane list a vrati otoceny list (pomoci slice listu) *1.3 Napiste funkci sum() scitajici neznamy pocet cisel eg. sum(4,6,7), sum(2,4,6,9,4,1) 3. Vypočítejte hodnotu: cos(4) 4. Password gen Napište generátor náhodných hesel délky 12 znaků z abecedy a-zA-Z. (random, chr, ord, knihovny) 5. std IO: reverse line Napište program, který čte řádky ze std IO a vypisuje je pozpátku (reverzně). 5.2 prepend line number to lines and print Napište program, který čte řádky ze std IO, vytiskne na jeden řádek pořadí řádku a odpovídající obsah řádku (pořadí se přiloží na začátek řádky). Ex. pro vstup: Kde domov můj, kde domov můj? Voda hučí po lučinách, bory šumí po skalinách, v sadě skví se jara květ, zemský ráj to na pohled! A to je ta krásná země, země česká, domov můj, země česká, domov můj! vypíše: 1. Kde domov můj, 2. kde domov můj? 3. Voda hučí po lučinách, 4. bory šumí po skalinách, 5. v sadě skví se jara květ, 6. zemský ráj to na pohled! 7. A to je ta krásná země, 8. země česká, domov můj, 9. země česká, domov můj! 5.3 zkuste si poslat programu data ze souboru na standardni vstup a vypsat do konzole cat inputDataFile.txt | python skript.py 5.4 zkuste si poslat programu data ze souboru na standardni vstup a vypsat do souboru cat inputDataFile.txt | python skript.py >> outputFile.txt vs. cat inputDataFile.txt | python skript.py > outputFile.txt 6. std IO: sum number ------------------------------------------------------------ LIST *3. Matrix Sum Write a function that takes two matrices, and returns the sum of the matrices. Assume that the matrices have the same dimensions. *4. Symmetric Matrix A matrix M is symmetric if Mij = Mji for all i and j. For example, here is a symmetric matrix: 1 2 3 2 5 4 3 4 6 Write a function that takes a square matrix M represented as a list of lists, and returns True if the matrix is symmetric. *5. Letter Histogram Write a program that reads a series of input lines and determines how many times each letter A-Z appears in the input. You should ignore case, considering 'a' and 'A' to be the same letter. Ignore any characters that are not letters from the Latin alphabet. The input text is guaranteed to contain at least one letter. The program should print the most frequent letter with a count of its occurrences. It should also print a histogram showing each letter's frequency as a fraction of all input letters, rounded up to the nearest percent. For example, if 3.7% of letters are N, the program should print 'n: ****'. Sample input: The quick fox jumped over the lazy dog. Then the dog got up and jumped over the fox. Sample output: Most frequent letter: e (9) a: * b: c: * d: ** e: *** f: * g: * h: ** ------------------------------------------------------------ 04. hodina 20. 10. 2025 Algoritmizace 0. Dotazy k přednášce 2. Převody soustav Převeďte čísla ze zadaných výchozích soustav do cílových soustav ([číslo]_soustava): 2.1. [143]_10 do []_2 2.3. [143]_10 do []_3 a zpět 2.5. [0111010110110]_2 do []_10 2.7. [0111010110110]_2 do []_5 2.9. [0111010110110]_2 do []_3 2.11. [1B7E]_16 do []_10 2.13. [1B7E]_16 do []_2 4. Binární vyhledávání v setříděném poli - (idea) algoritmu vyhledat v setříděném poli na tabuli, prvek který: a) je obsažen, b) není obsažen, c) je obsažen a je krajní, d) není obsažen a je menší než nejmenší obsažený a symetricky - co vracíme? (při (ne)nalezení prvku) - trekování horní a dolní meze - podmínky zastavení - co nám "přináší" setřídení oproti nesetřízenému poli a co bere? (metafora a dílnou)