06_stavove_automaty
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
• Možné převádět mezi nimi
Moore
• Konečný počet vnitřních stavů
• Každý stav definuje právě jeden výstup
• Přechody na základě vstupů
• Musí mít výchozí vnitřní stav
• Výstup určen jen na základě
vnitřního stavu
u – vstupy
x – stavy
y – výstupy
x = f(x,u)
y = f(x)
Mealy
• Konečný počet vnitřních stavů
• Méně stavů než srovnatelný Moore
• Každý stav definuje právě jeden výstup
• Přechody na základě vstupů
• Musí mít výchozí vnitřní stav
• Výstup určen na základě
vnitřního stavu a vstupu
u – vstupy
x – stavy
y – výstupy
x = f(x,u)
y = f(x,u)
Příklad: Odstranění komentářů z kódu
• Napište program, který odstraní z kódu komentáře
• jednořádkové //komentář
• víceřádkové /*dlouhý komentář*/
• v řetězci nic nedělej
• Víceřádkový komentář nahraďte mezerou
• Stavy
• TEXT
• LOMITKO
• KOMENTAR1
• KOMENTAR2_ZACATEK
• KOMENTAR2_KONEC
Příklad: Odstranění komentářů z kódu
https://www.itnetwork.cz/cplusplus/cecko/linux/cecko-linux-zdrojove-kody/program-c-linux-delcom/
Realizace stavových automatů
• Podmíněné rozhodování
• If () … else …
• Switch
• Stavy uložené v Enum
• Ukazatele na funkce
• Vysvětlení ukazatelů na funkce
• Stavový automat s ukazateli na funkce
Podmíněné rozhodování
• Uložení stavů
enum stavy { TEXT,LOMITKO,…}
//definice typu
enum stavy stav = TEXT;
//uložení stavu
• Rozhodování
while(1) {
if(stav == TEXT)
akce1();
else if (stav == LOMITKO)
akce2();
else
akce3();
čekej(čas)
}
Podmíněné rozhodování
• Uložení stavů
enum stavy { TEXT,LOMITKO,…}
//definice typu
enum stavy stav = TEXT;
//uložení stavu
• Rozhodování
while(1) {
switch(stav) {
case TEXT:
akce1();
break;
case LOMITKO:
akce2();
break;
default:
akce3();
}
čekej(čas)
}
Podmíněné rozhodování
• Uložení stavů
void text();
//definice stavu
void lomitko();
void (*stav)() = text;
//uložení stavu
• Rozhodování
void text() { akce1(); stav = lomitko; }
void lomitko(){ akce2(); stav = text; }
int main (){
while(1) {
(*stav)();
čekej(čas)
}
}
Podmíněné rozhodování
• Uložení stavů
typedef void *(*StavPtr)();
//definice ukazatele na další funkci