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 ...@@ -5,7 +5,7 @@ Ahogyan az első félévben tanultuk, az állapotgépek (véges automaták) kéz
``` ```
while (van_input) { while (van_input) {
új_állapot = állapot_tábla[akt_állapot][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 tevékenység_végrehajtása
akt_állapot = új_állapot akt_állapot = új_állapot
} }
...@@ -45,24 +45,24 @@ struct Nop { ...@@ -45,24 +45,24 @@ struct Nop {
/// @param ch - erre az input értékre léptünk ide /// @param ch - erre az input értékre léptünk ide
virtual void akcio(T ch) {} virtual void akcio(T ch) {}
virtual ~Nop() {} 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ő. 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++ ```c++
struct AllTabla : public std::map<All, std::map<Inp, Nop*> > { 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 ~AllTabla() { // bejárjuk a tárolót és töröljük a dinamikusan létrehozott elemeket
typename AllTabla::iterator i1 = this->begin(); typename AllTabla::iterator i1 = this->begin();
while (i1 != this->end()) { while (i1 != this->end()) {
typename std::map<Inp, Nop*>::iterator i2 = i1->second.begin(); typename std::map<Inp, Nop*>::iterator i2 = i1->second.begin();
while (i2 != i1->second.end()) { while (i2 != i1->second.end()) {
delete i2->second; delete i2->second;
++i2; ++i2;
}
++i1;
} }
++i1;
} }
}; }
}; //allapotgep.hpp
``` ```
Az `Allapotgep` osztály továbbá a következő függvényekkel rendelkezik: Az `Allapotgep` osztály továbbá a következő függvényekkel rendelkezik:
```c++ ```c++
...@@ -80,7 +80,7 @@ All operator()(T ch) { ...@@ -80,7 +80,7 @@ All operator()(T ch) {
tab[akt_allapot][akt_input]->akcio(ch); tab[akt_allapot][akt_input]->akcio(ch);
akt_allapot = tab[akt_allapot][akt_input]->kov_allapot; akt_allapot = tab[akt_allapot][akt_input]->kov_allapot;
return akt_allapot; return akt_allapot;
} } //allapotgep.hpp
``` ```
Nézd meg az osztályt tartalmazó _allapotgep.hpp_ fejlécfájlt! 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 ...@@ -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: Az egyes állapotokhoz kapcsolódó akciókat a következő módon definiáljuk:
```c++ ```c++
struct Novel1 : public Nop { struct Novel1 : public Nop {
Lyszaml& allapotgep; // állapotgép referenciája, hogy elérje a számlálót Lyszaml& allapotgep; // állapotgép referenciája, hogy elérje a számlálót
Novel1(LyAllapot all, Lyszaml& allapotgep) : Nop(all), allapotgep(allapotgep) {} Novel1(LyAllapot all, Lyszaml& allapotgep) : Nop(all), allapotgep(allapotgep) {}
void akcio(char ch) { allapotgep.sz += 1; } void akcio(char ch) { allapotgep.sz += 1; }
}; };
struct Novel2 : public Nop { struct Novel2 : public Nop {
Lyszaml& allapotgep; Lyszaml& allapotgep;
Novel2(LyAllapot all, Lyszaml& allapotgep) : Nop(all), allapotgep(allapotgep) {} Novel2(LyAllapot all, Lyszaml& allapotgep) : Nop(all), allapotgep(allapotgep) {}
void akcio(char ch) { allapotgep.sz += 2; } void akcio(char ch) { allapotgep.sz += 2; }
}; }; //lyszamlalo.hpp
//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: 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++ ```c++
Lyszaml::Lyszaml() : Allapotgep(LyAllapot::alap, tab), sz(0) { Lyszaml::Lyszaml() : Allapotgep(LyAllapot::alap, tab), sz(0) {
tab[LyAllapot::alap] = {{LyInput::l, new Nop(LyAllapot::l_jott)}, 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)}}; {LyInput::egyeb, new Nop(LyAllapot::alap)}};
tab[LyAllapot::l_jott] = {{LyInput::l, new Nop(LyAllapot::ll_jott)}, tab[LyAllapot::l_jott] = {{LyInput::l, new Nop(LyAllapot::ll_jott)},
{LyInput::y, new Novel1(LyAllapot::alap, *this)}, {LyInput::y, new Novel1(LyAllapot::alap, *this)},
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
/// A kezdő állapot(alap) és az állapotátmenet tábla megadása és beállítása /// 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) { Lyszaml::Lyszaml() : Allapotgep(LyAllapot::alap, tab), sz(0) {
tab[LyAllapot::alap] = {{LyInput::l, new Nop(LyAllapot::l_jott)}, 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)}}; {LyInput::egyeb, new Nop(LyAllapot::alap)}};
tab[LyAllapot::l_jott] = {{LyInput::l, new Nop(LyAllapot::ll_jott)}, tab[LyAllapot::l_jott] = {{LyInput::l, new Nop(LyAllapot::ll_jott)},
{LyInput::y, new Novel1(LyAllapot::alap, *this)}, {LyInput::y, new Novel1(LyAllapot::alap, *this)},
...@@ -27,18 +27,24 @@ void Lyszaml::runtests() { ...@@ -27,18 +27,24 @@ void Lyszaml::runtests() {
TEST(Lyszaml Test, alma) { TEST(Lyszaml Test, alma) {
Lyszaml szaml; Lyszaml szaml;
szaml.str("alma"); 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 } END
TEST(Lyszaml Test, bagoly) { TEST(Lyszaml Test, bagoly) {
Lyszaml szaml; Lyszaml szaml;
szaml.str("bagoly"); szaml.str("bagoly");
EXPECT_EQ(szaml.get(), 1); EXPECT_EQ(1, szaml.get());
} END } END
TEST(Lyszaml Test, gally) { TEST(Lyszaml Test, gally) {
Lyszaml szaml; Lyszaml szaml;
szaml.str("gally"); szaml.str("gally");
EXPECT_EQ(szaml.get(), 2); EXPECT_EQ(2, szaml.get());
} END } 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