Jak Začít?

Máš v počítači zápisky z přednášek
nebo jiné materiály ze školy?

Nahraj je na studentino.cz a získej
4 Kč za každý materiál
a 50 Kč za registraci!




06_stavove_automaty

PDF
Stáhnout kompletní materiál zdarma (637.96 kB)

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

Témata, do kterých materiál patří