Commit ad449a8f by Szeberényi Imre

Merge branch 'lyszamlalo' into 'master'

Lyszamlalo

See merge request !2
parents ba753cdf 05c10300
# Prerequisites
*.d
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
*.smod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
main
\ No newline at end of file
......@@ -5,7 +5,7 @@ Ahogyan az első félévben tanultuk, az állapotgépek (véges automaták) kéz
```
while (van_input) {
új_állapot = állapot_tábla[akt_állapot][input]
tevékenység = [akt_állapot][input]
tevékenység = tevékenység_tábla[akt_állapot][input]
tevékenység_végrehajtása
akt_állapot = új_állapot
}
......@@ -45,24 +45,24 @@ struct Nop {
/// @param ch - erre az input értékre léptünk ide
virtual void akcio(T ch) {}
virtual ~Nop() {}
};
}; //allapotgep.hpp
```
A 2D táblázathoz egy olyan osztályt definiáltunk, amely az All és Imp sablonparaméterként megadott típusokkal indexelhető, és törli a tárolt elemeket, ha elérkezett az idő.
```c++
struct AllTabla : public std::map<All, std::map<Inp, Nop*> > {
~AllTabla() { // bejárjuk a tárolót és töröljük a dinamikusan létrehozott elemeket
typename AllTabla::iterator i1 = this->begin();
while (i1 != this->end()) {
typename std::map<Inp, Nop*>::iterator i2 = i1->second.begin();
while (i2 != i1->second.end()) {
delete i2->second;
++i2;
}
++i1;
struct AllTabla : public std::map<All, std::map<Inp, Nop*> > {
~AllTabla() { // bejárjuk a tárolót és töröljük a dinamikusan létrehozott elemeket
typename AllTabla::iterator i1 = this->begin();
while (i1 != this->end()) {
typename std::map<Inp, Nop*>::iterator i2 = i1->second.begin();
while (i2 != i1->second.end()) {
delete i2->second;
++i2;
}
++i1;
}
};
}
}; //allapotgep.hpp
```
Az `Allapotgep` osztály továbbá a következő függvényekkel rendelkezik:
```c++
......@@ -80,7 +80,7 @@ All operator()(T ch) {
tab[akt_allapot][akt_input]->akcio(ch);
akt_allapot = tab[akt_allapot][akt_input]->kov_allapot;
return akt_allapot;
}
} //allapotgep.hpp
```
Nézd meg az osztályt tartalmazó _allapotgep.hpp_ fejlécfájlt!
......@@ -107,24 +107,23 @@ _Megjegyzés: a template paraméterek miatt nyugodtan használhattunk volna az e
Az egyes állapotokhoz kapcsolódó akciókat a következő módon definiáljuk:
```c++
struct Novel1 : public Nop {
Lyszaml& allapotgep; // állapotgép referenciája, hogy elérje a számlálót
Novel1(LyAllapot all, Lyszaml& allapotgep) : Nop(all), allapotgep(allapotgep) {}
void akcio(char ch) { allapotgep.sz += 1; }
};
struct Novel2 : public Nop {
Lyszaml& allapotgep;
Novel2(LyAllapot all, Lyszaml& allapotgep) : Nop(all), allapotgep(allapotgep) {}
void akcio(char ch) { allapotgep.sz += 2; }
};
//lyszamlalo.hpp
struct Novel1 : public Nop {
Lyszaml& allapotgep; // állapotgép referenciája, hogy elérje a számlálót
Novel1(LyAllapot all, Lyszaml& allapotgep) : Nop(all), allapotgep(allapotgep) {}
void akcio(char ch) { allapotgep.sz += 1; }
};
struct Novel2 : public Nop {
Lyszaml& allapotgep;
Novel2(LyAllapot all, Lyszaml& allapotgep) : Nop(all), allapotgep(allapotgep) {}
void akcio(char ch) { allapotgep.sz += 2; }
}; //lyszamlalo.hpp
```
Az állapotgép tábláját az átláthatóság kedvéért soronként adtam meg inicializáló lista segítségével:
```c++
Lyszaml::Lyszaml() : Allapotgep(LyAllapot::alap, tab), sz(0) {
tab[LyAllapot::alap] = {{LyInput::l, new Nop(LyAllapot::l_jott)},
{LyInput::y, new Nop(LyAllapot::l_jott)},
{LyInput::y, new Nop(LyAllapot::alap)},
{LyInput::egyeb, new Nop(LyAllapot::alap)}};
tab[LyAllapot::l_jott] = {{LyInput::l, new Nop(LyAllapot::ll_jott)},
{LyInput::y, new Novel1(LyAllapot::alap, *this)},
......
......@@ -12,7 +12,7 @@
/// A kezdő állapot(alap) és az állapotátmenet tábla megadása és beállítása
Lyszaml::Lyszaml() : Allapotgep(LyAllapot::alap, tab), sz(0) {
tab[LyAllapot::alap] = {{LyInput::l, new Nop(LyAllapot::l_jott)},
{LyInput::y, new Nop(LyAllapot::l_jott)},
{LyInput::y, new Nop(LyAllapot::alap)},
{LyInput::egyeb, new Nop(LyAllapot::alap)}};
tab[LyAllapot::l_jott] = {{LyInput::l, new Nop(LyAllapot::ll_jott)},
{LyInput::y, new Novel1(LyAllapot::alap, *this)},
......@@ -27,18 +27,24 @@ void Lyszaml::runtests() {
TEST(Lyszaml Test, alma) {
Lyszaml szaml;
szaml.str("alma");
EXPECT_EQ(szaml.get(), 0);
EXPECT_EQ(0, szaml.get());
} END
TEST(Lyszaml Test, ayya) {
Lyszaml szaml;
szaml.str("ayya");
EXPECT_EQ(0, szaml.get());
} END
TEST(Lyszaml Test, bagoly) {
Lyszaml szaml;
szaml.str("bagoly");
EXPECT_EQ(szaml.get(), 1);
EXPECT_EQ(1, szaml.get());
} END
TEST(Lyszaml Test, gally) {
Lyszaml szaml;
szaml.str("gally");
EXPECT_EQ(szaml.get(), 2);
EXPECT_EQ(2, szaml.get());
} END
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment