====== Cvičení 10, Fronta, Stavový automat ====== ===== náplň cvičení ===== ==== Quick test 1 ==== {{ :courses:b3b33alp:cviceni:alp19_qt1_zadani.pdf | Zadání Quick-testu }}, nahrávání v BRUTE je zapnuto do 5.1. ==== Úloha 1 Fronta ==== * Přeměňte řešení úlohy 3 Flood fill z cvičení 8 na frontu. * Postupnou animací zjistěte jak se změnilo vyplňování prostoru * Zjistěte, zda potřebuje více paměti zásobník, nebo fronta ==== Úloha 2 Komentáře - rozšíření ==== * Upravte program na odstraňování komentářů z přednášky tak: * aby program bral v úvahu řetězce začínající a končící znakem ' * aby správně interpretoval znaky \' a \" * aby pokud řádka končí znakem \ dovedl řetězec prodloužit přes více řádek * Program otestujte na následujících datech a='b \' c#d' #e i="j \" k'l#m" #n * Program z přednášky: def preskoc_komentare(line): # vytiskne obsah souboru 'f' s vynechanymi komentari stav=0 # počáteční stav automatu for c in line: # přečti jeden znak if stav==0: # počáteční stav if c=="#": # začátek komentáře stav=1 continue elif c=='\"': stav=2 # začátek řetězce elif stav==1: # 1="komentar" continue elif stav==2: if c=='\"': stav=0 print(c,end="") # vytiskni znak i=input() preskoc_komentare(i) # nacti radku a preskakuj ==== Úloha 3 Kontrola reálného čísla ==== * Reálné číslo v pythonu je zadána touto BNF gramatikou: floatnumber ::= pointfloat | exponentfloat pointfloat ::= [intpart] fraction | intpart "." exponentfloat ::= (intpart | pointfloat) exponent intpart ::= digit+ fraction ::= "." digit+ exponent ::= ("e" | "E") ["+" | "-"] digit+ digit ::= "0"..."9" * Vymyslete a naprogramujte stavový automat, který bude zjišťovat, zda je řetězec na řádce reálným číslem. * ==== Úloha 4 Obsahy závorek ==== * Uvažujme řetězec obsahující závorky () a []. * Napište program, který bude testovat, zda je výraz správně uzávorkován a zjistí text uvnitř závorek * Závorky mohou být do sebe vnořeny a pak text patří do poslední úrovně závorek * Program tedy text: aa[bb(cc)dd(ee)fff[gggg]]hhh * převede na výstup: ()cc ()ee []gggg []bbddfff * písmena 'aa' a 'hhh' se zahodí, nejsou uvnitř žádných závorek ===== Domácí práce ===== Tentokráte bez domácího cvičení, poslední domácí cvičení bude zadané příští týden.