Table of Contents

Cvičení 9, Fronta, Stavový automat

náplň cvičení

Úloha 1 Fronta

Úloha 2 Komentáře - rozšíření

a='b\'c#d' #e
i="j\"k'l#m" #n

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

floatnumber   ::=  pointfloat | exponentfloat
pointfloat    ::=  [intpart] fraction | intpart "."
exponentfloat ::=  (intpart | pointfloat) exponent
intpart       ::=  digit { digit }
fraction      ::=  "." digit { digit }
exponent      ::=  ("e" | "E") ["+" | "-"] digit { digit }
digit         ::=  "0"..."9"

Úloha 4 Obsahy závorek

aa[bb(cc)dd(ee)fff[gggg]]hhh

()cc
()ee
[]gggg
[]bbddfff

domácí práce

Lehká varianta:

zaznam      ::= cele_jmeno ";" studium
cele_jmeno  ::= jmeno "(" jmena ")" "{" rodne_prijmeni "}" prijmeni |
                jmeno "(" jmena ")" prijmeni |
                jmeno "{" rodne_prijmeni "}" prijmeni | 
                jmeno prijmeni
jmeno, rodne_prijmeni, prijmeni ::= pismeno { pismeno }
jmena       ::= jmeno { ","jmeno }
pismeno     ::= "a"..."z"|"A"..."Z"
studium     ::= typ "," rocnik "," obor
typ         ::= ( "Bc." | "Ing." | "Ph.D." )
rocnik      ::= cislo { cislo }
cislo       ::="0"..."9"
obor        ::= pismeno { pismeno }

Novak, Jaroslav, oi, Bc.
Novak, J. D., kybernetika, Ph.D.
Novy, J. M. Z., robotika, Ing.
Nova, Jarmila, robotika, Ing.
Novak, Jara, kybernetika, Ph.D.
Novotny, J. D. I., robotika, Ing.
Nowotnny, Y. D. Y., robotika, Ing.

Těžká varianta:

#define MIN_VALUE -1.0f
#define normalize(_x) _x - MIN_VALUE

Příklad

#define MIN_VALUE -1.0f
#define _normalize(_x) ff((_x) - MIN_VALUE)
#define ff cos
float last_value = get_value();
 
#ifdef output
// Print if defined
std::cout << "Normalized: " << _normalize(last_value);
#endif
 
auto y = 2.0f * _normalize(atan2(last_value,-last_value)+0.5f);
#define MIN_VALUE -10.0f
#undef ff
auto y2 = 2.0f * _normalize(last_value);

float last_value = get_value();
 
 
auto y = 2.0f * cos((atan2(last_value,-last_value)+0.5f) - -1.0f);
auto y2 = 2.0f * ff((last_value) - -10.0f);